diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index 93efc5ea61eb72bf96a6953b52e7bddcb238055c..64a947034ad11afb30d92a0e9903f71105801d43 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()