[sonic-utilities]: Final code-drop for interface-description and interface-status enhancements (#1207)

* Final code-drop for interface-description and interface-status enhancements.

Here i'm adding minor extensions to support "show interface description" command. Please refer to PR#158 for more details: https://github.com/Azure/sonic-utilities/pull/158

* Add interface-description UT and adjust logic to have 'description' field being optional

RB=
G=lnos-reviewers
R=ntrianta,rjonnadu,rmolina,sfardeen,zxu
A=

* Updating reference to sonic-utilities to collect latest changes
This commit is contained in:
Rodny Molina 2017-12-06 21:45:45 -08:00 committed by lguohan
parent 3d70b715d5
commit 4213b2dcc7
5 changed files with 16 additions and 6 deletions

View File

@ -5,6 +5,7 @@
{
"PORT_TABLE:{{ port }}": {
"speed": "{{ PORT[port]['speed'] }}"
"description": "{{ PORT[port]['description'] }}"
},
"OP": "SET"
}{% if not loop.last %},{% endif %}

16
src/sonic-config-engine/minigraph.py Normal file → Executable file
View File

@ -298,7 +298,8 @@ def parse_meta(meta, hname):
return syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst, deployment_id
def parse_deviceinfo(meta, hwsku):
ethernet_interfaces = {}
port_speeds = {}
port_descriptions = {}
for device_info in meta.findall(str(QName(ns, "DeviceInfo"))):
dev_sku = device_info.find(str(QName(ns, "HwSku"))).text
if dev_sku == hwsku:
@ -306,8 +307,11 @@ def parse_deviceinfo(meta, hwsku):
for interface in interfaces.findall(str(QName(ns1, "EthernetInterface"))):
alias = interface.find(str(QName(ns, "InterfaceName"))).text
speed = interface.find(str(QName(ns, "Speed"))).text
ethernet_interfaces[port_alias_map.get(alias, alias)] = speed
return ethernet_interfaces
desc = interface.find(str(QName(ns, "Description")))
if desc != None:
port_descriptions[port_alias_map.get(alias, alias)] = desc.text
port_speeds[port_alias_map.get(alias, alias)] = speed
return port_speeds, port_descriptions
def parse_xml(filename, platform=None, port_config_file=None):
root = ET.parse(filename).getroot()
@ -330,6 +334,7 @@ def parse_xml(filename, platform=None, port_config_file=None):
devices = None
hostname = None
port_speeds = {}
port_descriptions = {}
syslog_servers = []
dhcp_servers = []
ntp_servers = []
@ -360,7 +365,7 @@ def parse_xml(filename, platform=None, port_config_file=None):
elif child.tag == str(QName(ns, "MetadataDeclaration")):
(syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst, deployment_id) = parse_meta(child, hostname)
elif child.tag == str(QName(ns, "DeviceInfos")):
port_speeds = parse_deviceinfo(child, hwsku)
(port_speeds, port_descriptions) = parse_deviceinfo(child, hwsku)
results = {}
results['DEVICE_METADATA'] = {'localhost': {
@ -395,6 +400,9 @@ def parse_xml(filename, platform=None, port_config_file=None):
for port_name in port_speeds:
ports.setdefault(port_name, {})['speed'] = port_speeds[port_name]
for port_name in port_descriptions:
ports.setdefault(port_name, {})['description'] = port_descriptions[port_name]
results['PORT'] = ports
results['PORTCHANNEL'] = pcs
results['VLAN'] = vlans

View File

@ -243,6 +243,7 @@
<PortName>0</PortName>
<Priority>0</Priority>
<Speed>40000</Speed>
<Description>Interface description</Description>
</a:EthernetInterface>
<a:EthernetInterface>
<ElementType>DeviceInterface</ElementType>

View File

@ -138,4 +138,4 @@ class TestCfgGen(TestCase):
def test_minigraph_ethernet_interfaces(self):
argument = '-m "' + self.sample_graph_simple + '" -p "' + self.port_config + '" -v "PORT[\'Ethernet8\']"'
output = self.run_script(argument)
self.assertEqual(output.strip(), "{'alias': 'fortyGigE0/8', 'lanes': '37,38,39,40', 'speed': '40000'}")
self.assertEqual(output.strip(), "{'alias': 'fortyGigE0/8', 'lanes': '37,38,39,40', 'description': 'Interface description', 'speed': '40000'}")

@ -1 +1 @@
Subproject commit e87bb97760a4cf069da51b2a0da732f7a40f3215
Subproject commit 0c0a2f02c32a8cafb3020d8248ea829bbc959d4a