From 52623546409c523be1931e4ea010907387f55984 Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Sat, 23 Jan 2021 12:03:15 +0100
Subject: [PATCH] save peerings pivoted by remote asn

---
 inventory_provider/tasks/worker.py | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 93efc5ea..64a94703 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -741,6 +741,7 @@ def _build_juniper_peering_db(update_callback=lambda s: None):
     update_callback('loading all juniper network peerings')
     peerings_per_address = {}
     ix_peerings = []
+    peerings_per_asn = {}
 
     # scan with bigger batches, to mitigate network latency effects
     key_prefix = 'juniper-peerings:hosts:'
@@ -754,6 +755,9 @@ def _build_juniper_peering_db(update_callback=lambda s: None):
             peerings_per_address.setdefault(p['address'], []).append(p)
             if _is_ix(p):
                 ix_peerings.append(p)
+            asn = p.get('remote-asn', None)
+            if asn:
+                peerings_per_asn.setdefault(asn, []).append(p)
 
 
     # sort ix peerings by group
@@ -770,12 +774,17 @@ def _build_juniper_peering_db(update_callback=lambda s: None):
     for k, v in peerings_per_address.items():
         rp.set(f'juniper-peerings:remote:{k}', json.dumps(v))
 
-    # create ix group lists, keyed by group name
+    # create pivoted ix group name lists
     update_callback(f'saving {len(ix_groups)} remote ix peering groups')
     for k, v in ix_groups.items():
         group_addresses = list(v)
         rp.set(f'juniper-peerings:ix-groups:{k}', json.dumps(group_addresses))
 
+    # create pivoted asn peering lists
+    update_callback(f'saving {len(peerings_per_asn)} asn peering lists')
+    for k, v in peerings_per_asn.items():
+        rp.set(f'juniper-peerings:peer-asn:{k}', json.dumps(v))
+
     rp.execute()
 
 
-- 
GitLab