@@ -456,6 +456,21 @@ def parse_dpg(dpg, hname):
456
456
aclintfs = None
457
457
mgmtintfs = None
458
458
subintfs = None
459
+ intfs = {}
460
+ lo_intfs = {}
461
+ mvrf = {}
462
+ mgmt_intf = {}
463
+ voq_inband_intfs = {}
464
+ vlans = {}
465
+ vlan_members = {}
466
+ dhcp_relay_table = {}
467
+ pcs = {}
468
+ pc_members = {}
469
+ acls = {}
470
+ acl_table_types = {}
471
+ vni = {}
472
+ dpg_ecmp_content = {}
473
+ static_routes = {}
459
474
tunnelintfs = defaultdict (dict )
460
475
tunnelintfs_qos_remap_config = defaultdict (dict )
461
476
@@ -575,7 +590,6 @@ def parse_dpg(dpg, hname):
575
590
nexthop = ipnh .find (str (QName (ns , "Address" ))).text
576
591
advertise = ipnh .find (str (QName (ns , "Advertise" ))).text
577
592
static_routes [prefix ] = {'nexthop' : nexthop , 'ifname' : ifname , 'advertise' : advertise }
578
-
579
593
if port_nhipv4_map and port_nhipv6_map :
580
594
subnet_check_ip = list (port_nhipv4_map .values ())[0 ]
581
595
for subnet_range in ip_intfs_map :
@@ -659,8 +673,6 @@ def parse_dpg(dpg, hname):
659
673
vlans [sonic_vlan_name ] = vlan_attributes
660
674
vlan_member_list [sonic_vlan_name ] = vmbr_list
661
675
662
- acls = {}
663
- acl_table_types = {}
664
676
for aclintf in aclintfs .findall (str (QName (ns , "AclInterface" ))):
665
677
if aclintf .find (str (QName (ns , "InAcl" ))) is not None :
666
678
aclname = aclintf .find (str (QName (ns , "InAcl" ))).text .upper ().replace (" " , "_" ).replace ("-" , "_" )
@@ -844,9 +856,8 @@ def parse_dpg(dpg, hname):
844
856
for table_key , mg_key in tunnel_qos_remap_table_key_to_mg_key_map .items ():
845
857
if mg_key in mg_tunnel .attrib :
846
858
tunnelintfs_qos_remap_config [tunnel_type ][tunnel_name ][table_key ] = mg_tunnel .attrib [mg_key ]
847
-
848
859
return intfs , lo_intfs , mvrf , mgmt_intf , voq_inband_intfs , vlans , vlan_members , dhcp_relay_table , pcs , pc_members , acls , acl_table_types , vni , tunnelintfs , dpg_ecmp_content , static_routes , tunnelintfs_qos_remap_config
849
- return None , None , None , None , None , None , None , None , None , None , None , None , None , None , None , None , None
860
+ return intfs , lo_intfs , mvrf , mgmt_intf , voq_inband_intfs , vlans , vlan_members , dhcp_relay_table , pcs , pc_members , acls , acl_table_types , vni , tunnelintfs , dpg_ecmp_content , static_routes , tunnelintfs_qos_remap_config
850
861
851
862
852
863
def parse_host_loopback (dpg , hname ):
@@ -1519,7 +1530,11 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
1519
1530
if asic_name is None :
1520
1531
current_device = [devices [key ] for key in devices if key .lower () == hostname .lower ()][0 ]
1521
1532
else :
1522
- current_device = [devices [key ] for key in devices if key .lower () == asic_name .lower ()][0 ]
1533
+ try :
1534
+ current_device = [devices [key ] for key in devices if key .lower () == asic_name .lower ()][0 ]
1535
+ except :
1536
+ print ("Warning: no asic configuration found for {} in minigraph" .format (asic_name ), file = sys .stderr )
1537
+ current_device = {}
1523
1538
1524
1539
results = {}
1525
1540
results ['DEVICE_METADATA' ] = {'localhost' : {
@@ -1845,15 +1860,15 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
1845
1860
results ['PORTCHANNEL_INTERFACE' ] = pc_intfs
1846
1861
1847
1862
# for storage backend subinterface info present in minigraph takes precedence over ResourceType
1848
- if current_device ['type' ] in backend_device_types and bool (vlan_sub_intfs ):
1863
+ if current_device and current_device ['type' ] in backend_device_types and bool (vlan_sub_intfs ):
1849
1864
del results ['INTERFACE' ]
1850
1865
del results ['PORTCHANNEL_INTERFACE' ]
1851
1866
is_storage_device = True
1852
1867
results ['VLAN_SUB_INTERFACE' ] = vlan_sub_intfs
1853
1868
# storage backend T0 have all vlan members tagged
1854
1869
for vlan in vlan_members :
1855
1870
vlan_members [vlan ]["tagging_mode" ] = "tagged"
1856
- elif current_device ['type' ] in backend_device_types and (resource_type is None or 'Storage' in resource_type ):
1871
+ elif current_device and current_device ['type' ] in backend_device_types and (resource_type is None or 'Storage' in resource_type ):
1857
1872
del results ['INTERFACE' ]
1858
1873
del results ['PORTCHANNEL_INTERFACE' ]
1859
1874
is_storage_device = True
@@ -1930,7 +1945,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
1930
1945
results ['TACPLUS_SERVER' ] = dict ((item , {'priority' : '1' , 'tcp_port' : '49' }) for item in tacacs_servers )
1931
1946
if len (acl_table_types ) > 0 :
1932
1947
results ['ACL_TABLE_TYPE' ] = acl_table_types
1933
- results ['ACL_TABLE' ] = filter_acl_table_bindings (acls , neighbors , pcs , pc_members , sub_role , current_device ['type' ], is_storage_device , vlan_members )
1948
+ results ['ACL_TABLE' ] = filter_acl_table_bindings (acls , neighbors , pcs , pc_members , sub_role , current_device ['type' ] if current_device else None , is_storage_device , vlan_members )
1934
1949
results ['FEATURE' ] = {
1935
1950
'telemetry' : {
1936
1951
'state' : 'enabled'
@@ -1983,18 +1998,18 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
1983
1998
# results['MIRROR_SESSION'] = mirror_sessions
1984
1999
1985
2000
# Special parsing for spine chassis frontend routers
1986
- if current_device ['type' ] == spine_chassis_frontend_role :
2001
+ if current_device and current_device ['type' ] == spine_chassis_frontend_role :
1987
2002
parse_spine_chassis_fe (results , vni , lo_intfs , phyport_intfs , pc_intfs , pc_members , devices )
1988
2003
1989
2004
# Enable console management feature for console swtich
1990
2005
results ['CONSOLE_SWITCH' ] = {
1991
2006
'console_mgmt' : {
1992
- 'enabled' : 'yes' if current_device ['type' ] in console_device_types else 'no'
2007
+ 'enabled' : 'yes' if current_device and current_device ['type' ] in console_device_types else 'no'
1993
2008
}
1994
2009
}
1995
2010
1996
2011
# Enable DHCP Server feature for specific device type
1997
- if current_device ['type' ] in dhcp_server_enabled_device_types :
2012
+ if current_device and current_device ['type' ] in dhcp_server_enabled_device_types :
1998
2013
results ['DEVICE_METADATA' ]['localhost' ]['dhcp_server' ] = 'enabled'
1999
2014
2000
2015
return results
0 commit comments