Skip to content

Commit

Permalink
Merge pull request #497 from afourmy/IOS_get_network_instances
Browse files Browse the repository at this point in the history
IOS get network instances
  • Loading branch information
dbarrosop committed Nov 11, 2017
2 parents 8a356dd + d6231c5 commit b957e2d
Show file tree
Hide file tree
Showing 4 changed files with 186 additions and 0 deletions.
46 changes: 46 additions & 0 deletions napalm/ios/ios.py
Expand Up @@ -2146,6 +2146,52 @@ def traceroute(self, destination, source=C.TRACEROUTE_SOURCE,
traceroute_dict['success'] = results
return traceroute_dict

def get_network_instances(self, name=''):

instances = {}
sh_vrf_detail = self._send_command('show vrf detail')
show_ip_int_br = self._send_command('show ip interface brief')

# retrieve all interfaces for the default VRF
interface_dict = {}
show_ip_int_br = show_ip_int_br.strip()
for line in show_ip_int_br.splitlines():
if 'Interface ' in line:
continue
interface = line.split()[0]
interface_dict[interface] = {}

instances['default'] = {
'name': 'default',
'type': 'DEFAULT_INSTANCE',
'state': {'route_distinguisher': ''},
'interfaces': {'interface': interface_dict}
}

for vrf in sh_vrf_detail.split('\n\n'):

first_part = vrf.split('Address family')[0]

# retrieve the name of the VRF and the Route Distinguisher
vrf_name, RD = re.match(r'^VRF (\S+).*RD (.*);', first_part).groups()
if RD == '<not set>':
RD = ''

# retrieve the interfaces of the VRF
if_regex = re.match(r'.*Interfaces:(.*)', first_part, re.DOTALL)
if 'No interfaces' in first_part:
interfaces = {}
else:
interfaces = {itf: {} for itf in if_regex.group(1).split()}

instances[vrf_name] = {
'name': vrf_name,
'type': 'L3VRF',
'state': {'route_distinguisher': RD},
'interfaces': {'interface': interfaces}
}
return instances if not name else instances[name]

def get_config(self, retrieve='all'):
"""Implementation of get_config for IOS.
Expand Down
@@ -0,0 +1,78 @@
{
"default":{
"interfaces":{
"interface":{
"GigabitEthernet0/0/0":{

},
"Gi0/0/0.152":{

},
"GigabitEthernet0/0/2":{

},
"Gi0/0/0.1774":{

},
"GigabitEthernet0/0/4":{

},
"Gi0/0/0.1772":{

},
"GigabitEthernet0/0/3":{

},
"Gi0/0/0.154":{

},
"GigabitEthernet0/0/1":{

},
"GigabitEthernet0":{

},
"Gi0/0/0.1776":{

},
"Gi0/0/0.600":{

},
"Loopback2":{

}
}
},
"state":{
"route_distinguisher":""
},
"type":"DEFAULT_INSTANCE",
"name":"default"
},
"Mgmt-intf":{
"interfaces":{
"interface":{
"Gi0":{

}
}
},
"state":{
"route_distinguisher":""
},
"type":"L3VRF",
"name":"Mgmt-intf"
},
"opsnet":{
"interfaces":{
"interface":{

}
},
"state":{
"route_distinguisher":"10283:1021312690"
},
"type":"L3VRF",
"name":"opsnet"
}
}
@@ -0,0 +1,17 @@
Load for five secs: 0%/0%; one minute: 1%; five minutes: 1%
Time source is NTP, 09:30:03.851 DST Wed Nov 8 2017

Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0/0 unassigned YES NVRAM up up
Gi0/0/0.152 192.168.241.21 YES NVRAM up up
Gi0/0/0.154 192.168.241.30 YES NVRAM up up
Gi0/0/0.600 192.168.241.141 YES NVRAM up up
Gi0/0/0.1772 120.177.177.1 YES NVRAM up up
Gi0/0/0.1774 101.177.177.1 YES NVRAM up up
Gi0/0/0.1776 100.177.177.1 YES NVRAM up up
GigabitEthernet0/0/1 unassigned YES NVRAM administratively down down
GigabitEthernet0/0/2 unassigned YES NVRAM administratively down down
GigabitEthernet0/0/3 unassigned YES NVRAM administratively down down
GigabitEthernet0/0/4 unassigned YES NVRAM administratively down down
GigabitEthernet0 192.168.243.80 YES NVRAM up up
Loopback2 192.168.242.152 YES NVRAM up up
@@ -0,0 +1,45 @@
Load for five secs: 0%/0%; one minute: 0%; five minutes: 1%
Time source is NTP, 09:28:50.737 DST Wed Nov 8 2017

VRF Mgmt-intf (VRF Id = 1); default RD <not set>; default VPNID <not set>
New CLI format, supports multiple address-families
Flags: 0x1808
Interfaces:
Gi0
Address family ipv4 unicast (Table ID = 0x1):
Flags: 0x0
No Export VPN route-target communities
No Import VPN route-target communities
No import route-map
No global export route-map
No export route-map
VRF label distribution protocol: not configured
VRF label allocation mode: per-prefix
Address family ipv6 unicast (Table ID = 0x1E000001):
Flags: 0x0
No Export VPN route-target communities
No Import VPN route-target communities
No import route-map
No global export route-map
No export route-map
VRF label distribution protocol: not configured
VRF label allocation mode: per-prefix
Address family ipv4 multicast not active

VRF opsnet (VRF Id = 2); default RD 10283:1021312690; default VPNID <not set>
New CLI format, supports multiple address-families
Flags: 0x180C
No interfaces
Address family ipv4 unicast (Table ID = 0x2):
Flags: 0x0
Export VPN route-target communities
RT:10283:50000
Import VPN route-target communities
RT:10283:50000
No import route-map
No global export route-map
No export route-map
VRF label distribution protocol: not configured
VRF label allocation mode: per-prefix
Address family ipv6 unicast not active
Address family ipv4 multicast not active

0 comments on commit b957e2d

Please sign in to comment.