From c43dc66b43192f2b59e572fcbdb9b071501f634d Mon Sep 17 00:00:00 2001 From: Robert Latta <robert.latta@geant.org> Date: Wed, 12 Feb 2025 11:02:01 +0000 Subject: [PATCH] added epipe sap extraction and mapping. RE.DBOARD3-1104 --- inventory_provider/nokia.py | 13 +++++++++++++ inventory_provider/tasks/worker.py | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/inventory_provider/nokia.py b/inventory_provider/nokia.py index 6cb7a3b..43a078d 100644 --- a/inventory_provider/nokia.py +++ b/inventory_provider/nokia.py @@ -255,6 +255,19 @@ def get_epipes_state(state_doc): } +def get_epipe_sap_details(netconf_config): + for epipe in netconf_config.xpath('configure/service/epipe'): + service_id = epipe.find('service-id').text + vpn_id = epipe.find('vpn-id').text + sap = epipe.find('sap') + if sap is not None: + yield { + 'service-id': service_id, + 'vpn-id': vpn_id, + 'sap-id': sap.find('sap-id').text, + } + + @lru_cache def get_pxc_ports(netconf_config): # these ports will be ignored for the purposes of the update diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index f4f3642..90a1cb8 100644 --- a/inventory_provider/tasks/worker.py +++ b/inventory_provider/tasks/worker.py @@ -618,12 +618,32 @@ def _reload_router_config_nokia( return r = get_next_redis(InventoryTask.config) refresh_nokia_interface_list(hostname, netconf_doc, r, lab) + refresh_epipe_to_sap_mappings(hostname, netconf_doc, r) communities = _nokia_community_strings(InventoryTask.config) snmp_refresh_interfaces_nokia(hostname, state_doc, communities, r, info_callback) refresh_nokia_bgp_peers(hostname, netconf_doc) snmp_refresh_peerings_nokia(hostname, communities) +def refresh_epipe_to_sap_mappings(hostname, netconf, redis): + epipe_to_saps_key_base = f'ims:epipe-sapid_mappings:{hostname}' + + # clear cached epipe to sap mappings + logger.debug(f'removing cached epipe to sap mappings for {hostname}') + rp = redis.pipeline() + for k in redis.scan_iter(f'{epipe_to_saps_key_base}:*', count=1000): + rp.delete(k) + rp.execute() + epipe_saps = nokia.get_epipe_sap_details(netconf) + rp = redis.pipeline() + for details in epipe_saps: + key = f'{details["service-id"]}:{details["vpn-id"]}' + rp.set( + f'{epipe_to_saps_key_base}:{key}', + details['sap-id']) + rp.execute() + + def snmp_refresh_peerings_nokia(hostname, communities, update_callback=lambda S: None): get_peerings_func = functools.partial( snmp.get_peer_state_info_nokia, -- GitLab