From 5e06b8bd4e0faa82ee3bdf3190262ef13089cb23 Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Mon, 11 Feb 2019 13:19:33 +0100
Subject: [PATCH] add reverse ip lookups to cache

---
 inventory_provider/juniper.py      | 16 ++++++++++++++++
 inventory_provider/tasks/worker.py |  8 ++++++++
 2 files changed, 24 insertions(+)

diff --git a/inventory_provider/juniper.py b/inventory_provider/juniper.py
index c0b0f87b..468eef55 100644
--- a/inventory_provider/juniper.py
+++ b/inventory_provider/juniper.py
@@ -292,6 +292,22 @@ def vpn_rr_peers(netconf_config):
             neighbor['peer-as'] = int(r.find('peer-as').text)
         yield neighbor
 
+
+def interface_addresses(netconf_config):
+    """
+    yields a list of all distinct interface addresses
+    :param netconf_config:
+    :return:
+    """
+    for ifc in list_interfaces(netconf_config):
+        for address in ifc['ipv4'] + ifc['ipv6']:
+            yield {
+                "name": ipaddress.ip_interface(address).ip.exploded,
+                "interface address": address,
+                "interface name": ifc['name']
+            }
+
+
 # note for enabling vrr data parsing ...
 # def fetch_vrr_config(hostname, ssh_params):
 #
diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 96917adf..cf6d3e04 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -298,6 +298,13 @@ def refresh_vpn_rr_peers(hostname, netconf):
         juniper.vpn_rr_peers(netconf))
 
 
+def refresh_interface_address_lookups(hostname, netconf):
+    _refresh_peers(
+        hostname,
+        'reverse_interface_addresses',
+        juniper.interface_addresses(netconf))
+
+
 @app.task(base=InventoryTask, bind=True)
 def reload_router_config(self, hostname):
     logger = logging.getLogger(__name__)
@@ -351,6 +358,7 @@ def reload_router_config(self, hostname):
         })
     refresh_ix_public_peers(hostname, netconf_doc)
     refresh_vpn_rr_peers(hostname, netconf_doc)
+    refresh_interface_address_lookups(hostname, netconf_doc)
     clear_cached_classifier_responses(hostname)
 
     # load snmp indexes
-- 
GitLab