[sonic-cfggen] Be case insensitive to hostname in minigraph (#1614)
This commit is contained in:
parent
225a4fa640
commit
02826667e9
@ -77,7 +77,7 @@ def parse_png(png, hname):
|
|||||||
bandwidth_node = link.find(str(QName(ns, "Bandwidth")))
|
bandwidth_node = link.find(str(QName(ns, "Bandwidth")))
|
||||||
bandwidth = bandwidth_node.text if bandwidth_node is not None else None
|
bandwidth = bandwidth_node.text if bandwidth_node is not None else None
|
||||||
|
|
||||||
if enddevice == hname:
|
if enddevice.lower() == hname.lower():
|
||||||
if port_alias_map.has_key(endport):
|
if port_alias_map.has_key(endport):
|
||||||
endport = port_alias_map[endport]
|
endport = port_alias_map[endport]
|
||||||
neighbors[endport] = {'name': startdevice, 'port': startport}
|
neighbors[endport] = {'name': startdevice, 'port': startport}
|
||||||
@ -119,7 +119,7 @@ def parse_png(png, hname):
|
|||||||
def parse_dpg(dpg, hname):
|
def parse_dpg(dpg, hname):
|
||||||
for child in dpg:
|
for child in dpg:
|
||||||
hostname = child.find(str(QName(ns, "Hostname")))
|
hostname = child.find(str(QName(ns, "Hostname")))
|
||||||
if hostname.text != hname:
|
if hostname.text.lower() != hname.lower():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
ipintfs = child.find(str(QName(ns, "IPInterfaces")))
|
ipintfs = child.find(str(QName(ns, "IPInterfaces")))
|
||||||
@ -263,7 +263,7 @@ def parse_cpg(cpg, hname):
|
|||||||
else:
|
else:
|
||||||
keepalive = 60
|
keepalive = 60
|
||||||
nhopself = 1 if session.find(str(QName(ns, "NextHopSelf"))) is not None else 0
|
nhopself = 1 if session.find(str(QName(ns, "NextHopSelf"))) is not None else 0
|
||||||
if end_router == hname:
|
if end_router.lower() == hname.lower():
|
||||||
bgp_sessions[start_peer.lower()] = {
|
bgp_sessions[start_peer.lower()] = {
|
||||||
'name': start_router,
|
'name': start_router,
|
||||||
'local_addr': end_peer.lower(),
|
'local_addr': end_peer.lower(),
|
||||||
@ -285,7 +285,7 @@ def parse_cpg(cpg, hname):
|
|||||||
for router in child.findall(str(QName(ns1, "BGPRouterDeclaration"))):
|
for router in child.findall(str(QName(ns1, "BGPRouterDeclaration"))):
|
||||||
asn = router.find(str(QName(ns1, "ASN"))).text
|
asn = router.find(str(QName(ns1, "ASN"))).text
|
||||||
hostname = router.find(str(QName(ns1, "Hostname"))).text
|
hostname = router.find(str(QName(ns1, "Hostname"))).text
|
||||||
if hostname == hname:
|
if hostname.lower() == hname.lower():
|
||||||
myasn = asn
|
myasn = asn
|
||||||
peers = router.find(str(QName(ns1, "Peers")))
|
peers = router.find(str(QName(ns1, "Peers")))
|
||||||
for bgpPeer in peers.findall(str(QName(ns, "BGPPeer"))):
|
for bgpPeer in peers.findall(str(QName(ns, "BGPPeer"))):
|
||||||
@ -301,7 +301,7 @@ def parse_cpg(cpg, hname):
|
|||||||
else:
|
else:
|
||||||
for peer in bgp_sessions:
|
for peer in bgp_sessions:
|
||||||
bgp_session = bgp_sessions[peer]
|
bgp_session = bgp_sessions[peer]
|
||||||
if hostname == bgp_session['name']:
|
if hostname.lower() == bgp_session['name'].lower():
|
||||||
bgp_session['asn'] = asn
|
bgp_session['asn'] = asn
|
||||||
bgp_sessions = { key: bgp_sessions[key] for key in bgp_sessions if bgp_sessions[key].has_key('asn') and int(bgp_sessions[key]['asn']) != 0 }
|
bgp_sessions = { key: bgp_sessions[key] for key in bgp_sessions if bgp_sessions[key].has_key('asn') and int(bgp_sessions[key]['asn']) != 0 }
|
||||||
return bgp_sessions, myasn, bgp_peers_with_range
|
return bgp_sessions, myasn, bgp_peers_with_range
|
||||||
@ -317,7 +317,7 @@ def parse_meta(meta, hname):
|
|||||||
deployment_id = None
|
deployment_id = None
|
||||||
device_metas = meta.find(str(QName(ns, "Devices")))
|
device_metas = meta.find(str(QName(ns, "Devices")))
|
||||||
for device in device_metas.findall(str(QName(ns1, "DeviceMetadata"))):
|
for device in device_metas.findall(str(QName(ns1, "DeviceMetadata"))):
|
||||||
if device.find(str(QName(ns1, "Name"))).text == hname:
|
if device.find(str(QName(ns1, "Name"))).text.lower() == hname.lower():
|
||||||
properties = device.find(str(QName(ns1, "Properties")))
|
properties = device.find(str(QName(ns1, "Properties")))
|
||||||
for device_property in properties.findall(str(QName(ns1, "DeviceProperty"))):
|
for device_property in properties.findall(str(QName(ns1, "DeviceProperty"))):
|
||||||
name = device_property.find(str(QName(ns1, "Name"))).text
|
name = device_property.find(str(QName(ns1, "Name"))).text
|
||||||
@ -411,13 +411,14 @@ def parse_xml(filename, platform=None, port_config_file=None):
|
|||||||
elif child.tag == str(QName(ns, "DeviceInfos")):
|
elif child.tag == str(QName(ns, "DeviceInfos")):
|
||||||
(port_speeds_default, port_descriptions) = parse_deviceinfo(child, hwsku)
|
(port_speeds_default, port_descriptions) = parse_deviceinfo(child, hwsku)
|
||||||
|
|
||||||
results = {}
|
current_device = [devices[key] for key in devices if key.lower() == hostname.lower()][0]
|
||||||
|
results = {}
|
||||||
results['DEVICE_METADATA'] = {'localhost': {
|
results['DEVICE_METADATA'] = {'localhost': {
|
||||||
'bgp_asn': bgp_asn,
|
'bgp_asn': bgp_asn,
|
||||||
'deployment_id': deployment_id,
|
'deployment_id': deployment_id,
|
||||||
'hostname': hostname,
|
'hostname': hostname,
|
||||||
'hwsku': hwsku,
|
'hwsku': hwsku,
|
||||||
'type': devices[hostname]['type']
|
'type': current_device['type']
|
||||||
}}
|
}}
|
||||||
results['BGP_NEIGHBOR'] = bgp_sessions
|
results['BGP_NEIGHBOR'] = bgp_sessions
|
||||||
results['BGP_PEER_RANGE'] = bgp_peers_with_range
|
results['BGP_PEER_RANGE'] = bgp_peers_with_range
|
||||||
@ -476,7 +477,7 @@ def parse_xml(filename, platform=None, port_config_file=None):
|
|||||||
results['VLAN_MEMBER'] = vlan_members
|
results['VLAN_MEMBER'] = vlan_members
|
||||||
|
|
||||||
results['DEVICE_NEIGHBOR'] = neighbors
|
results['DEVICE_NEIGHBOR'] = neighbors
|
||||||
results['DEVICE_NEIGHBOR_METADATA'] = { key:devices[key] for key in devices if key != hostname }
|
results['DEVICE_NEIGHBOR_METADATA'] = { key:devices[key] for key in devices if key.lower() != hostname.lower() }
|
||||||
results['SYSLOG_SERVER'] = dict((item, {}) for item in syslog_servers)
|
results['SYSLOG_SERVER'] = dict((item, {}) for item in syslog_servers)
|
||||||
results['DHCP_SERVER'] = dict((item, {}) for item in dhcp_servers)
|
results['DHCP_SERVER'] = dict((item, {}) for item in dhcp_servers)
|
||||||
results['NTP_SERVER'] = dict((item, {}) for item in ntp_servers)
|
results['NTP_SERVER'] = dict((item, {}) for item in ntp_servers)
|
||||||
|
317
src/sonic-config-engine/tests/simple-sample-graph-case.xml
Normal file
317
src/sonic-config-engine/tests/simple-sample-graph-case.xml
Normal file
@ -0,0 +1,317 @@
|
|||||||
|
<DeviceMiniGraph xmlns="Microsoft.Search.Autopilot.Evolution" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<CpgDec>
|
||||||
|
<IsisRouters xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
|
||||||
|
<PeeringSessions>
|
||||||
|
<BGPSession>
|
||||||
|
<MacSec>false</MacSec>
|
||||||
|
<StartRouter>switch-t0</StartRouter>
|
||||||
|
<StartPeer>10.0.0.56</StartPeer>
|
||||||
|
<EndRouter>ARISTA01T1</EndRouter>
|
||||||
|
<EndPeer>10.0.0.57</EndPeer>
|
||||||
|
<Multihop>1</Multihop>
|
||||||
|
<HoldTime>180</HoldTime>
|
||||||
|
<KeepAliveTime>60</KeepAliveTime>
|
||||||
|
</BGPSession>
|
||||||
|
<BGPSession>
|
||||||
|
<StartRouter>switch-t0</StartRouter>
|
||||||
|
<StartPeer>FC00::71</StartPeer>
|
||||||
|
<EndRouter>ARISTA01T1</EndRouter>
|
||||||
|
<EndPeer>FC00::72</EndPeer>
|
||||||
|
<Multihop>1</Multihop>
|
||||||
|
<HoldTime>180</HoldTime>
|
||||||
|
<KeepAliveTime>60</KeepAliveTime>
|
||||||
|
</BGPSession>
|
||||||
|
<BGPSession>
|
||||||
|
<MacSec>false</MacSec>
|
||||||
|
<StartRouter>switch-t0</StartRouter>
|
||||||
|
<StartPeer>10.0.0.58</StartPeer>
|
||||||
|
<EndRouter>ARISTA02T1</EndRouter>
|
||||||
|
<EndPeer>10.0.0.59</EndPeer>
|
||||||
|
<Multihop>1</Multihop>
|
||||||
|
<HoldTime>180</HoldTime>
|
||||||
|
<KeepAliveTime>60</KeepAliveTime>
|
||||||
|
</BGPSession>
|
||||||
|
<BGPSession>
|
||||||
|
<StartRouter>switch-t0</StartRouter>
|
||||||
|
<StartPeer>FC00::75</StartPeer>
|
||||||
|
<EndRouter>ARISTA02T1</EndRouter>
|
||||||
|
<EndPeer>FC00::76</EndPeer>
|
||||||
|
<Multihop>1</Multihop>
|
||||||
|
<HoldTime>180</HoldTime>
|
||||||
|
<KeepAliveTime>60</KeepAliveTime>
|
||||||
|
</BGPSession>
|
||||||
|
</PeeringSessions>
|
||||||
|
<Routers xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
|
||||||
|
<a:BGPRouterDeclaration>
|
||||||
|
<a:ASN>65100</a:ASN>
|
||||||
|
<a:Hostname>switch-t0</a:Hostname>
|
||||||
|
<a:Peers>
|
||||||
|
<BGPPeer>
|
||||||
|
<Address>10.0.0.57</Address>
|
||||||
|
<RouteMapIn i:nil="true"/>
|
||||||
|
<RouteMapOut i:nil="true"/>
|
||||||
|
<Vrf i:nil="true"/>
|
||||||
|
</BGPPeer>
|
||||||
|
<BGPPeer>
|
||||||
|
<Address>10.0.0.59</Address>
|
||||||
|
<RouteMapIn i:nil="true"/>
|
||||||
|
<RouteMapOut i:nil="true"/>
|
||||||
|
<Vrf i:nil="true"/>
|
||||||
|
</BGPPeer>
|
||||||
|
</a:Peers>
|
||||||
|
<a:RouteMaps/>
|
||||||
|
</a:BGPRouterDeclaration>
|
||||||
|
<a:BGPRouterDeclaration>
|
||||||
|
<a:ASN>64600</a:ASN>
|
||||||
|
<a:Hostname>ARISTA01T1</a:Hostname>
|
||||||
|
<a:RouteMaps/>
|
||||||
|
</a:BGPRouterDeclaration>
|
||||||
|
<a:BGPRouterDeclaration>
|
||||||
|
<a:ASN>64600</a:ASN>
|
||||||
|
<a:Hostname>ARISTA02T1</a:Hostname>
|
||||||
|
<a:RouteMaps/>
|
||||||
|
</a:BGPRouterDeclaration>
|
||||||
|
<a:BGPRouterDeclaration>
|
||||||
|
<a:ASN>64600</a:ASN>
|
||||||
|
<a:Hostname>ARISTA03T1</a:Hostname>
|
||||||
|
<a:RouteMaps/>
|
||||||
|
</a:BGPRouterDeclaration>
|
||||||
|
<a:BGPRouterDeclaration>
|
||||||
|
<a:ASN>64600</a:ASN>
|
||||||
|
<a:Hostname>ARISTA04T1</a:Hostname>
|
||||||
|
<a:RouteMaps/>
|
||||||
|
</a:BGPRouterDeclaration>
|
||||||
|
</Routers>
|
||||||
|
</CpgDec>
|
||||||
|
<DpgDec>
|
||||||
|
<DeviceDataPlaneInfo>
|
||||||
|
<IPSecTunnels/>
|
||||||
|
<LoopbackIPInterfaces xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
|
||||||
|
<a:LoopbackIPInterface>
|
||||||
|
<Name>HostIP</Name>
|
||||||
|
<AttachTo>Loopback0</AttachTo>
|
||||||
|
<a:Prefix xmlns:b="Microsoft.Search.Autopilot.Evolution">
|
||||||
|
<b:IPPrefix>10.1.0.32/32</b:IPPrefix>
|
||||||
|
</a:Prefix>
|
||||||
|
<a:PrefixStr>10.1.0.32/32</a:PrefixStr>
|
||||||
|
</a:LoopbackIPInterface>
|
||||||
|
<a:LoopbackIPInterface>
|
||||||
|
<Name>HostIP1</Name>
|
||||||
|
<AttachTo>Loopback0</AttachTo>
|
||||||
|
<a:Prefix xmlns:b="Microsoft.Search.Autopilot.Evolution">
|
||||||
|
<b:IPPrefix>FC00:1::32/128</b:IPPrefix>
|
||||||
|
</a:Prefix>
|
||||||
|
<a:PrefixStr>FC00:1::32/128</a:PrefixStr>
|
||||||
|
</a:LoopbackIPInterface>
|
||||||
|
</LoopbackIPInterfaces>
|
||||||
|
<ManagementIPInterfaces xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
|
||||||
|
<a:ManagementIPInterface>
|
||||||
|
<Name>HostIP</Name>
|
||||||
|
<AttachTo>eth0</AttachTo>
|
||||||
|
<a:Prefix xmlns:b="Microsoft.Search.Autopilot.Evolution">
|
||||||
|
<b:IPPrefix>10.0.0.100/24</b:IPPrefix>
|
||||||
|
</a:Prefix>
|
||||||
|
<a:PrefixStr>10.0.0.100/24</a:PrefixStr>
|
||||||
|
</a:ManagementIPInterface>
|
||||||
|
</ManagementIPInterfaces>
|
||||||
|
<ManagementVIPInterfaces xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
|
||||||
|
<MplsInterfaces/>
|
||||||
|
<MplsTeInterfaces/>
|
||||||
|
<RsvpInterfaces/>
|
||||||
|
<Hostname>switch-t0</Hostname>
|
||||||
|
<PortChannelInterfaces>
|
||||||
|
<PortChannel>
|
||||||
|
<Name>PortChannel01</Name>
|
||||||
|
<AttachTo>fortyGigE0/4</AttachTo>
|
||||||
|
<SubInterface/>
|
||||||
|
</PortChannel>
|
||||||
|
</PortChannelInterfaces>
|
||||||
|
<VlanInterfaces>
|
||||||
|
<VlanInterface>
|
||||||
|
<Name>ab1</Name>
|
||||||
|
<AttachTo>fortyGigE0/8</AttachTo>
|
||||||
|
<DhcpRelays>192.0.0.1;192.0.0.2</DhcpRelays>
|
||||||
|
<VlanID>1000</VlanID>
|
||||||
|
<Tag>1000</Tag>
|
||||||
|
<Subnets>192.168.0.0/27</Subnets>
|
||||||
|
</VlanInterface>
|
||||||
|
</VlanInterfaces>
|
||||||
|
<IPInterfaces>
|
||||||
|
<IPInterface>
|
||||||
|
<Name i:nil="true"/>
|
||||||
|
<AttachTo>PortChannel01</AttachTo>
|
||||||
|
<Prefix>10.0.0.56/31</Prefix>
|
||||||
|
</IPInterface>
|
||||||
|
<IPInterface>
|
||||||
|
<Name i:Name="true"/>
|
||||||
|
<AttachTo>PortChannel01</AttachTo>
|
||||||
|
<Prefix>FC00::71/126</Prefix>
|
||||||
|
</IPInterface>
|
||||||
|
<IPInterface>
|
||||||
|
<Name i:nil="true"/>
|
||||||
|
<AttachTo>fortyGigE0/0</AttachTo>
|
||||||
|
<Prefix>10.0.0.58/31</Prefix>
|
||||||
|
</IPInterface>
|
||||||
|
<IPInterface>
|
||||||
|
<Name i:nil="true"/>
|
||||||
|
<AttachTo>fortyGigE0/0</AttachTo>
|
||||||
|
<Prefix>FC00::75/126</Prefix>
|
||||||
|
</IPInterface>
|
||||||
|
<IPInterface>
|
||||||
|
<Name i:nil="true"/>
|
||||||
|
<AttachTo>ab1</AttachTo>
|
||||||
|
<Prefix>192.168.0.1/27</Prefix>
|
||||||
|
</IPInterface>
|
||||||
|
</IPInterfaces>
|
||||||
|
<DataAcls/>
|
||||||
|
<AclInterfaces>
|
||||||
|
<AclInterface>
|
||||||
|
<AttachTo>PortChannel01</AttachTo>
|
||||||
|
<InAcl>DataAcl</InAcl>
|
||||||
|
<Type>DataPlane</Type>
|
||||||
|
</AclInterface>
|
||||||
|
<AclInterface>
|
||||||
|
<AttachTo>SNMP</AttachTo>
|
||||||
|
<InAcl>SNMP_ACL</InAcl>
|
||||||
|
<Type>SNMP</Type>
|
||||||
|
</AclInterface>
|
||||||
|
</AclInterfaces>
|
||||||
|
<DownstreamSummaries/>
|
||||||
|
<DownstreamSummarySet xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
|
||||||
|
</DeviceDataPlaneInfo>
|
||||||
|
</DpgDec>
|
||||||
|
<PngDec>
|
||||||
|
<DeviceInterfaceLinks/>
|
||||||
|
<Devices>
|
||||||
|
<Device i:type="ToRRouter">
|
||||||
|
<Hostname>switch-t0</Hostname>
|
||||||
|
<HwSku>Force10-S6000</HwSku>
|
||||||
|
</Device>
|
||||||
|
<Device i:type="LeafRouter">
|
||||||
|
<Hostname>ARISTA01T1</Hostname>
|
||||||
|
<HwSku>Arista</HwSku>
|
||||||
|
</Device>
|
||||||
|
<Device i:type="LeafRouter">
|
||||||
|
<Hostname>ARISTA02T1</Hostname>
|
||||||
|
<HwSku>Arista</HwSku>
|
||||||
|
</Device>
|
||||||
|
<Device i:type="LeafRouter">
|
||||||
|
<Hostname>ARISTA03T1</Hostname>
|
||||||
|
<HwSku>Arista</HwSku>
|
||||||
|
</Device>
|
||||||
|
<Device i:type="LeafRouter">
|
||||||
|
<Hostname>ARISTA04T1</Hostname>
|
||||||
|
<HwSku>Arista</HwSku>
|
||||||
|
</Device>
|
||||||
|
</Devices>
|
||||||
|
</PngDec>
|
||||||
|
<MetadataDeclaration>
|
||||||
|
<Devices xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
|
||||||
|
<a:DeviceMetadata>
|
||||||
|
<a:Name>switch-t0</a:Name>
|
||||||
|
<a:Properties>
|
||||||
|
<a:DeviceProperty>
|
||||||
|
<a:Name>DeploymentId</a:Name>
|
||||||
|
<a:Reference i:nil="true"/>
|
||||||
|
<a:Value>1</a:Value>
|
||||||
|
</a:DeviceProperty>
|
||||||
|
<a:DeviceProperty>
|
||||||
|
<a:Name>ErspanDestinationIpv4</a:Name>
|
||||||
|
<a:Reference i:nil="true"/>
|
||||||
|
<a:Value>10.0.100.1</a:Value>
|
||||||
|
</a:DeviceProperty>
|
||||||
|
<a:DeviceProperty>
|
||||||
|
<a:Name>NtpResources</a:Name>
|
||||||
|
<a:Value>
|
||||||
|
10.0.10.1;10.0.10.2
|
||||||
|
</a:Value>
|
||||||
|
</a:DeviceProperty>
|
||||||
|
<a:DeviceProperty>
|
||||||
|
<a:Name>SnmpResources</a:Name>
|
||||||
|
<a:Value>
|
||||||
|
10.0.10.3;10.0.10.4
|
||||||
|
</a:Value>
|
||||||
|
</a:DeviceProperty>
|
||||||
|
<a:DeviceProperty>
|
||||||
|
<a:Name>SyslogResources</a:Name>
|
||||||
|
<a:Value>
|
||||||
|
10.0.10.5;10.0.10.6;
|
||||||
|
</a:Value>
|
||||||
|
</a:DeviceProperty>
|
||||||
|
<a:DeviceProperty>
|
||||||
|
<a:Name>TacacsServer</a:Name>
|
||||||
|
<a:Reference i:nil="true"/>
|
||||||
|
<a:Value>10.0.10.7;10.0.10.8</a:Value>
|
||||||
|
</a:DeviceProperty>
|
||||||
|
</a:Properties>
|
||||||
|
</a:DeviceMetadata>
|
||||||
|
</Devices>
|
||||||
|
<Properties xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
|
||||||
|
</MetadataDeclaration>
|
||||||
|
<DeviceInfos>
|
||||||
|
<DeviceInfo>
|
||||||
|
<AutoNegotiation>true</AutoNegotiation>
|
||||||
|
<EthernetInterfaces xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
|
||||||
|
<a:EthernetInterface>
|
||||||
|
<ElementType>DeviceInterface</ElementType>
|
||||||
|
<AlternateSpeeds i:nil="true"/>
|
||||||
|
<EnableAutoNegotiation>true</EnableAutoNegotiation>
|
||||||
|
<EnableFlowControl>true</EnableFlowControl>
|
||||||
|
<Index>1</Index>
|
||||||
|
<InterfaceName>fortyGigE0/0</InterfaceName>
|
||||||
|
<InterfaceType i:nil="true"/>
|
||||||
|
<MultiPortsInterface>false</MultiPortsInterface>
|
||||||
|
<PortName>0</PortName>
|
||||||
|
<Priority>0</Priority>
|
||||||
|
<Speed>10000</Speed>
|
||||||
|
</a:EthernetInterface>
|
||||||
|
<a:EthernetInterface>
|
||||||
|
<ElementType>DeviceInterface</ElementType>
|
||||||
|
<AlternateSpeeds i:nil="true"/>
|
||||||
|
<EnableAutoNegotiation>true</EnableAutoNegotiation>
|
||||||
|
<EnableFlowControl>true</EnableFlowControl>
|
||||||
|
<Index>1</Index>
|
||||||
|
<InterfaceName>fortyGigE0/4</InterfaceName>
|
||||||
|
<InterfaceType i:nil="true"/>
|
||||||
|
<MultiPortsInterface>false</MultiPortsInterface>
|
||||||
|
<PortName>0</PortName>
|
||||||
|
<Priority>0</Priority>
|
||||||
|
<Speed>25000</Speed>
|
||||||
|
</a:EthernetInterface>
|
||||||
|
<a:EthernetInterface>
|
||||||
|
<ElementType>DeviceInterface</ElementType>
|
||||||
|
<AlternateSpeeds i:nil="true"/>
|
||||||
|
<EnableAutoNegotiation>true</EnableAutoNegotiation>
|
||||||
|
<EnableFlowControl>true</EnableFlowControl>
|
||||||
|
<Index>1</Index>
|
||||||
|
<InterfaceName>fortyGigE0/8</InterfaceName>
|
||||||
|
<InterfaceType i:nil="true"/>
|
||||||
|
<MultiPortsInterface>false</MultiPortsInterface>
|
||||||
|
<PortName>0</PortName>
|
||||||
|
<Priority>0</Priority>
|
||||||
|
<Speed>40000</Speed>
|
||||||
|
<Description>Interface description</Description>
|
||||||
|
</a:EthernetInterface>
|
||||||
|
<a:EthernetInterface>
|
||||||
|
<ElementType>DeviceInterface</ElementType>
|
||||||
|
<AlternateSpeeds i:nil="true"/>
|
||||||
|
<EnableAutoNegotiation>true</EnableAutoNegotiation>
|
||||||
|
<EnableFlowControl>true</EnableFlowControl>
|
||||||
|
<Index>1</Index>
|
||||||
|
<InterfaceName>fortyGigE0/12</InterfaceName>
|
||||||
|
<InterfaceType i:nil="true"/>
|
||||||
|
<MultiPortsInterface>false</MultiPortsInterface>
|
||||||
|
<PortName>0</PortName>
|
||||||
|
<Priority>0</Priority>
|
||||||
|
<Speed>100000</Speed>
|
||||||
|
<Description>Interface description</Description>
|
||||||
|
</a:EthernetInterface>
|
||||||
|
</EthernetInterfaces>
|
||||||
|
<FlowControl>true</FlowControl>
|
||||||
|
<Height>0</Height>
|
||||||
|
<HwSku>Force10-S6000</HwSku>
|
||||||
|
</DeviceInfo>
|
||||||
|
</DeviceInfos>
|
||||||
|
<Hostname>switch-T0</Hostname>
|
||||||
|
<HwSku>Force10-S6000</HwSku>
|
||||||
|
</DeviceMiniGraph>
|
111
src/sonic-config-engine/tests/test_minigraph_case.py
Normal file
111
src/sonic-config-engine/tests/test_minigraph_case.py
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
from unittest import TestCase
|
||||||
|
import subprocess
|
||||||
|
import os
|
||||||
|
|
||||||
|
class TestCfgGenCaseInsensitive(TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.test_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
self.script_file = os.path.join(self.test_dir, '..', 'sonic-cfggen')
|
||||||
|
self.sample_graph = os.path.join(self.test_dir, 'simple-sample-graph-case.xml')
|
||||||
|
self.port_config = os.path.join(self.test_dir, 't0-sample-port-config.ini')
|
||||||
|
|
||||||
|
def run_script(self, argument, check_stderr=False):
|
||||||
|
print '\n Running sonic-cfggen ' + argument
|
||||||
|
if check_stderr:
|
||||||
|
output = subprocess.check_output(self.script_file + ' ' + argument, stderr=subprocess.STDOUT, shell=True)
|
||||||
|
else:
|
||||||
|
output = subprocess.check_output(self.script_file + ' ' + argument, shell=True)
|
||||||
|
|
||||||
|
linecount = output.strip().count('\n')
|
||||||
|
if linecount <= 0:
|
||||||
|
print ' Output: ' + output.strip()
|
||||||
|
else:
|
||||||
|
print ' Output: ({0} lines, {1} bytes)'.format(linecount + 1, len(output))
|
||||||
|
return output
|
||||||
|
|
||||||
|
def test_dummy_run(self):
|
||||||
|
argument = ''
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output, '')
|
||||||
|
|
||||||
|
def test_minigraph_sku(self):
|
||||||
|
argument = '-v "DEVICE_METADATA[\'localhost\'][\'hwsku\']" -m "' + self.sample_graph + '"'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), 'Force10-S6000')
|
||||||
|
|
||||||
|
def test_print_data(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" --print-data'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertTrue(len(output.strip()) > 0)
|
||||||
|
|
||||||
|
def test_jinja_expression(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -v "DEVICE_METADATA[\'localhost\'][\'type\']"'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), 'ToRRouter')
|
||||||
|
|
||||||
|
def test_additional_json_data(self):
|
||||||
|
argument = '-a \'{"key1":"value1"}\' -v key1'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), 'value1')
|
||||||
|
|
||||||
|
def test_read_yaml(self):
|
||||||
|
argument = '-v yml_item -y ' + os.path.join(self.test_dir, 'test.yml')
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), '[\'value1\', \'value2\']')
|
||||||
|
|
||||||
|
def test_render_template(self):
|
||||||
|
argument = '-y ' + os.path.join(self.test_dir, 'test.yml') + ' -t ' + os.path.join(self.test_dir, 'test.j2')
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), 'value1\nvalue2')
|
||||||
|
|
||||||
|
def test_minigraph_everflow(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v MIRROR_SESSION'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "{'everflow0': {'src_ip': '10.1.0.32', 'dst_ip': '10.0.100.1'}}")
|
||||||
|
|
||||||
|
def test_minigraph_interfaces(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v \'INTERFACE.keys()\''
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "[('Ethernet0', '10.0.0.58/31'), ('Ethernet0', 'FC00::75/126')]")
|
||||||
|
|
||||||
|
def test_minigraph_vlans(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v VLAN'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "{'Vlan1000': {'alias': 'ab1', 'dhcp_servers': ['192.0.0.1', '192.0.0.2'], 'vlanid': '1000'}}")
|
||||||
|
|
||||||
|
def test_minigraph_vlan_members(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v VLAN_MEMBER'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "{'Vlan1000|Ethernet8': {'tagging_mode': 'untagged'}}")
|
||||||
|
|
||||||
|
def test_minigraph_vlan_interfaces(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "VLAN_INTERFACE.keys()"'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "[('Vlan1000', '192.168.0.1/27')]")
|
||||||
|
|
||||||
|
def test_minigraph_portchannels(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v PORTCHANNEL'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "{'PortChannel01': {'members': ['Ethernet4']}}")
|
||||||
|
|
||||||
|
def test_minigraph_deployment_id(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "DEVICE_METADATA[\'localhost\'][\'deployment_id\']"'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "1")
|
||||||
|
|
||||||
|
def test_metadata_everflow(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "MIRROR_SESSION"'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "{'everflow0': {'src_ip': '10.1.0.32', 'dst_ip': '10.0.100.1'}}")
|
||||||
|
|
||||||
|
def test_metadata_tacacs(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "TACPLUS_SERVER"'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "{'10.0.10.7': {'priority': '1', 'tcp_port': '49'}, '10.0.10.8': {'priority': '1', 'tcp_port': '49'}}")
|
||||||
|
|
||||||
|
def test_metadata_ntp(self):
|
||||||
|
argument = '-m "' + self.sample_graph + '" -p "' + self.port_config + '" -v "NTP_SERVER"'
|
||||||
|
output = self.run_script(argument)
|
||||||
|
self.assertEqual(output.strip(), "{'10.0.10.1': {}, '10.0.10.2': {}}")
|
||||||
|
|
Reference in New Issue
Block a user