diff --git a/inventory_provider/juniper.py b/inventory_provider/juniper.py index 575388892d6fd24292436ab21e8624c2a52adc2d..2925b7075cc6055e1c21b81e8429a2fa47030450 100644 --- a/inventory_provider/juniper.py +++ b/inventory_provider/juniper.py @@ -228,13 +228,24 @@ def list_interfaces(netconf_config): return ifc + def _units(base_name, node): + for u in node.xpath('./unit'): + unit_info = _ifc_info(u) + unit_info['name'] = "%s.%s" % (base_name, unit_info['name']) + yield unit_info + for i in netconf_config.xpath('//configuration/interfaces/interface'): info = _ifc_info(i) yield info - for u in i.xpath('./unit'): - unit_info = _ifc_info(u) - unit_info['name'] = "%s.%s" % (info['name'], unit_info['name']) - yield unit_info + for u in _units(info['name'], i): + yield u + + for i in netconf_config.xpath( + '//configuration/logical-systems/interfaces/interface'): + name = i.find('name') + assert name is not None, 'expected interface ''name'' child element' + for u in _units(name.text, i): + yield u def list_bgp_routes(netconf_config):