From 73e3cbb3b7acbe6499ee84ab0042ebcb6fce0f33 Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Thu, 4 Mar 2021 12:55:44 +0100
Subject: [PATCH] save logical-system with interface details

---
 inventory_provider/juniper.py        | 17 ++++++++++-------
 test/per_router/test_juniper_data.py |  1 +
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/inventory_provider/juniper.py b/inventory_provider/juniper.py
index e76463ee..19761764 100644
--- a/inventory_provider/juniper.py
+++ b/inventory_provider/juniper.py
@@ -215,7 +215,7 @@ def list_interfaces(netconf_config):
             if _inactive(u):
                 continue
             unit_info = _ifc_info(u)
-            unit_info['name'] = "%s.%s" % (base_name, unit_info['name'])
+            unit_info['name'] = f'{base_name}.{unit_info["name"]}'
             yield unit_info
 
     for i in netconf_config.xpath('//configuration/interfaces/interface'):
@@ -225,12 +225,15 @@ def list_interfaces(netconf_config):
         yield info
         yield from _units(info['name'], i)
 
-    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
+    for ls_node in netconf_config.xpath('//configuration/logical-systems'):
+        logical_system = ls_node.xpath('./name/text()')
+        assert logical_system, 'no logical-system name found'
+        for i in ls_node.xpath('.//interfaces/interface'):
+            name = i.xpath('./name/text()')
+            assert name, "expected interface 'name' child element"
+            for u in _units(name[0], i):
+                u['logical-system'] = logical_system[0]
+                yield u
 
 
 def _system_bgp_peers(system_node):
diff --git a/test/per_router/test_juniper_data.py b/test/per_router/test_juniper_data.py
index 34f1b35b..afc9f600 100644
--- a/test/per_router/test_juniper_data.py
+++ b/test/per_router/test_juniper_data.py
@@ -14,6 +14,7 @@ def test_interface_list(netconf_doc):
         "items": {
             "type": "object",
             "properties": {
+                "logical-system": {"type": "string"},
                 "name": {"type": "string"},
                 "description": {"type": "string"},
                 "bundle": {
-- 
GitLab