@ -218,7 +218,6 @@ class FactsBase(object):
yield self . transform_dict ( item , keymap )
class Default ( FactsBase ) :
VERSION_MAP = frozenset ( [
@ -315,23 +314,38 @@ class Interfaces(FactsBase):
return interfaces
def populate_neighbors ( self , data ) :
# if there are no neighbors the show command returns
# ERROR: No neighbour information
if data . startswith ( ' ERROR ' ) :
return dict ( )
lines = data . split ( ' \n ' )
regex = re . compile ( ' ( \ S+) \ s+( \ S+) \ s+ \ d+ \ s+ \ w+ \ s+( \ S+) ' )
objects = dict ( )
if isinstance ( data , str ) :
# if there are no neighbors the show command returns
# ERROR: No neighbour information
if data . startswith ( ' ERROR ' ) :
return dict ( )
lines = data . split ( ' \n ' )
regex = re . compile ( ' ( \ S+) \ s+( \ S+) \ s+ \ d+ \ s+ \ w+ \ s+( \ S+) ' )
for item in data . split ( ' \n ' ) [ 4 : - 1 ] :
match = regex . match ( item )
if match :
nbor = { ' host ' : match . group ( 1 ) , ' port ' : match . group ( 3 ) }
if match . group ( 2 ) not in objects :
objects [ match . group ( 2 ) ] = [ ]
objects [ match . group ( 2 ) ] . append ( nbor )
elif isinstance ( data , dict ) :
data = data [ ' TABLE_nbor ' ] [ ' ROW_nbor ' ]
if isinstance ( data , dict ) :
data = [ data ]
for item in data :
local_intf = item [ ' l_port_id ' ]
if local_intf not in objects :
objects [ local_intf ] = list ( )
nbor = dict ( )
nbor [ ' port ' ] = item [ ' port_id ' ]
nbor [ ' host ' ] = item [ ' chassis_id ' ]
objects [ local_intf ] . append ( nbor )
for item in data . split ( ' \n ' ) [ 4 : - 1 ] :
match = regex . match ( item )
if match :
nbor = { ' host ' : match . group ( 1 ) , ' port ' : match . group ( 3 ) }
if match . group ( 2 ) not in objects :
objects [ match . group ( 2 ) ] = [ ]
objects [ match . group ( 2 ) ] . append ( nbor )
return objects
def parse_ipv6_interfaces ( self , data ) :