Before I started playing with tclsh I would have created a script in perl or
something parsing an offline copy of the config
Here's my attempt at a tcl script (I'm been interested in this for the last
few days but I think I've started to have enough)
Existing R4 vrf related Config:
ip vrf A
rd 1:1
route-target export 1:1
route-target import 1:1
!
ip vrf B
rd 1:2
route-target export 1:2
route-target import 1:2
!
ip vrf C
rd 1:3
!
ip vrf D
rd 1:4
!
interface Serial2/0
ip vrf forwarding A
ip address 1.1.1.1 255.255.255.252
!
interface Loopback1
ip vrf forwarding A
ip address 2.2.2.2 255.255.255.255
!
interface Loopback2
ip vrf forwarding B
ip address 3.3.3.3 255.255.255.255
!
interface Loopback4
ip vrf forwarding D
ip address 3.3.3.3 255.255.255.255
!
delvrf deletes vrfs and removes associated loopbacks if they exist:
proc delvrf {} {
set cmdout [exec "sh ip vrf | exclude ^__Name"]
set currentinterface "first"
set currentvrf "first"
foreach line [split $cmdout "\n"] {
set oldvrf $currentvrf
set oldinterface $currentinterface
if [regexp {^\ (\S+)\s+(\S+)\s+(\S+)} $line match vrf rd interface]
{
set currentvrf $vrf
set currentinterface $interface
} elseif [regexp {^\ (\S+)\s+(\S+)} $line match vrf rd] {
set currentvrf $vrf
} elseif [regexp {^\s+(\S+)} $line match interface] {
set currentinterface $interface
}
if [string compare $currentinterface "first"] {
if {[string compare $currentvrf $oldvrf] & [string compare $oldvrf
"first"]} {
ios_config "no ip vrf $oldvrf"
}
if {[string compare $currentinterface $oldinterface] & [regexp
{^(Lo)} $currentinterface ]} {
ios_config "no interface $currentinterface"
}
}
}
ios_config "no ip vrf $currentvrf"
}
This is it cleaning up R4
R4#tclsh
R4(tcl)#proc delvrf {} {
+>(tcl)# set cmdout [exec "sh ip vrf | exclude ^__Name"]
+>(tcl)# set currentinterface "first"
+>(tcl)# set currentvrf "first"
+>(tcl)# foreach line [split $cmdout "\n"] {
+>(tcl)# set oldvrf $currentvrf
+>(tcl)# set oldinterface $currentinterface
+>(tcl)#$regexp {^\ (\S+)\s+(\S+)\s+(\S+)} $line match vrf rd interface] {
+>(tcl)# set currentvrf $vrf
+>(tcl)# set currentinterface $interface
+>(tcl)# } elseif [regexp {^\ (\S+)\s+(\S+)} $line match vrf rd] {
+>(tcl)# set currentvrf $vrf
+>(tcl)# } elseif [regexp {^\s+(\S+)} $line match interface] {
+>(tcl)# set currentinterface $interface
+>(tcl)# }
+>(tcl)# if [string compare $currentinterface "first"] {
+>(tcl)#$ compare $currentvrf $oldvrf] & [string compare $oldvrf "first"]} {
+>(tcl)# ios_config "no ip vrf $oldvrf"
+>(tcl)# }
+>(tcl)#$erface $oldinterface] & [regexp {^(Lo)} $currentinterface ]} {
+>(tcl)# ios_config "no interface $currentinterface"
+>(tcl)# }
+>(tcl)# }
+>(tcl)# }
+>(tcl)# ios_config "no ip vrf $currentvrf"
+>(tcl)#}
R4(tcl)#delvrf
% IPv4 addresses from all interfaces in VRF D have been removed
R4(tcl)#
*Aug 25 22:31:04.591: %LINK-5-CHANGED: Interface Loopback1, changed state to
administratively down
*Aug 25 22:31:05.203: %LINK-5-CHANGED: Interface Loopback2, changed state to
administratively down
*Aug 25 22:31:05.591: %LINEPROTO-5-UPDOWN: Line protocol on Interface
Loopback1, changed state to down
*Aug 25 22:31:05.887: %LINK-5-CHANGED: Interface Loopback4, changed state to
administratively down
*Aug 25 22:31:06.203: %LINEPROTO-5-UPDOWN: Line protocol on Interface
Loopback2, changed state to down
*Aug 25 22:31:06.887: %LINEPROTO-5-UPDOWN: Line protocol on Interface
Loopback4, changed state to down
R4(tcl)#exit
R4#sh ip vrf
R4#sh ip int brie
Interface IP-Address OK? Method Status
Protocol
FastEthernet0/0 unassigned YES NVRAM up
up
FastEthernet0/1 unassigned YES NVRAM up
up
Serial2/0 unassigned YES manual administratively down
down
Serial2/1 unassigned YES NVRAM administratively down
down
Serial2/2 unassigned YES NVRAM administratively down
down
Serial2/3 unassigned YES NVRAM administratively down
down
SSLVPN-VIF0 unassigned NO unset up
up
R4#
Cheers,
Adam
On Wed, Aug 25, 2010 at 8:04 PM, garry baker <baker.garry_at_gmail.com> wrote:
> probably a tcl script could help you out also...
>
> --
> Garry L. Baker
>
> "There is no 'patch' for stupidity." - www.sqlsecurity.com
>
>
> On Wed, Aug 25, 2010 at 12:13 PM, William McCall
> <william.mccall_at_gmail.com>wrote:
>
> > Without nuking the config? You'd have to remove them per entry.
> >
> > --
> > William McCall, CCIE #25044
> >
> > On Wed, Aug 25, 2010 at 4:00 AM, karthik thatikonda
> > <get2explore_at_gmail.com> wrote:
> > > Hello,
> > >
> > > I have a question. For example if I had configured 1000 vrf's on a
> router
> > > and if I need to delete all vrf's simultaneously how can I achieve that
> > > behavior?
> > >
> > > Thanks,
> > >
> > > Karthik.
> > >
> > >
> > > Blogs and organic groups at http://www.ccie.net
> > >
> > > _______________________________________________________________________
> > > Subscription information may be found at:
> > > http://www.groupstudy.com/list/CCIELab.html
> >
> >
> > Blogs and organic groups at http://www.ccie.net
> >
> > _______________________________________________________________________
> > Subscription information may be found at:
> > http://www.groupstudy.com/list/CCIELab.html
>
>
> Blogs and organic groups at http://www.ccie.net
>
> _______________________________________________________________________
> Subscription information may be found at:
> http://www.groupstudy.com/list/CCIELab.html
Blogs and organic groups at http://www.ccie.net
Received on Wed Aug 25 2010 - 22:40:05 ART
This archive was generated by hypermail 2.2.0 : Wed Sep 01 2010 - 11:20:53 ART