diff --git a/inventory_provider/juniper.py b/inventory_provider/juniper.py index c0b0f87b138a090b5ad6981b88880a27bfcd8d96..468eef553af60b98d553a4c9b756b1db5069536f 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 96917adf34987378f6399ef0670e04ee9aaf1ff5..cf6d3e04cdf7c421d902ff27203eb578df75e2c4 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