From 91572be9e7116d3eff293c0f46b0163807c259a3 Mon Sep 17 00:00:00 2001
From: Robert Latta <robert.latta@geant.org>
Date: Thu, 20 Jun 2019 12:50:13 +0000
Subject: [PATCH] added bundle(e.g. ae10) interface is a member of

---
 inventory_provider/juniper.py      |  6 +++++-
 inventory_provider/tasks/worker.py | 13 +++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/inventory_provider/juniper.py b/inventory_provider/juniper.py
index 468eef55..57538889 100644
--- a/inventory_provider/juniper.py
+++ b/inventory_provider/juniper.py
@@ -213,12 +213,16 @@ def list_interfaces(netconf_config):
         assert name is not None, "expected interface 'name' child element"
         ifc = {
             'name': name.text,
-            'description': ''
+            'description': '',
+            'bundle': []
         }
         description = e.find('description')
         if description is not None:
             ifc['description'] = description.text
 
+        for b in i.iterfind(".//bundle"):
+            ifc['bundle'].append(b.text)
+
         ifc['ipv4'] = e.xpath('./family/inet/address/name/text()')
         ifc['ipv6'] = e.xpath('./family/inet6/address/name/text()')
 
diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 13d394e5..ab2974a1 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -337,10 +337,23 @@ def refresh_juniper_interface_list(hostname, netconf):
     for k in r.keys('netconf-interfaces:%s:*' % hostname):
         r.delete(k)
 
+    for k in r.keys('netconf-interface-bundles:%s:*' % hostname):
+        r.delete(k)
+
+    all_bundles = defaultdict(list)
     for ifc in juniper.list_interfaces(netconf):
+        bundles = ifc.get('bundle', None)
+        for bundle in bundles:
+            if bundle:
+                all_bundles[bundle].append(ifc['name'])
+
         r.set(
             'netconf-interfaces:%s:%s' % (hostname, ifc['name']),
             json.dumps(ifc))
+    for k, v in all_bundles.items():
+        r.set(
+            'netconf-interface-bundles:%s:%s' % (hostname, k),
+            json.dumps(v))
 
 
 @app.task(base=InventoryTask, bind=True)
-- 
GitLab