diff --git a/inventory_provider/routes/msr.py b/inventory_provider/routes/msr.py index 6f5087b2fdf6ff14fa2ddd40c298a0ba140c2733..ae0c98ab79e48a272256e67056f539ca40db9066 100644 --- a/inventory_provider/routes/msr.py +++ b/inventory_provider/routes/msr.py @@ -875,3 +875,48 @@ def bgp_all_peerings(): r = common.get_current_redis() response = r.get('juniper-peerings:all') return Response(response.decode('utf-8'), mimetype="application/json") + + +@routes.route('/mdvpn', methods=['GET', 'POST']) +@common.require_accepts_json +def mdvpn(): + def _make_bgplu_index(bgplu): + index = {} + for peering in bgplu: + asn = peering['remote-asn'] + if asn in index: + peering_list = index[asn] + peering_list.append(peering) + else: + index[asn] = [peering] + return index + + def _bgplu_peerings(asn, bgplu_index): + peerings = [] + if asn in bgplu_index: + for peering in bgplu_index[asn]: + formatted_peering = { + "name": peering['description'], + "v4": peering['address'], + "v6": '', + "hostname": peering['hostname'] + } + peerings.append(formatted_peering) + return peerings + + def _peerings_for_nren(asn, bgplu_index): + return { + "asn": asn, + "AP": _bgplu_peerings(asn, bgplu_index), + "VRR": [] + } + + r = common.get_current_redis() + bgplu = json.loads(r.get('juniper-peerings:group:BGPLU').decode('utf-8')) + bgplu_index = _make_bgplu_index(bgplu) + config = current_app.config['INVENTORY_PROVIDER_CONFIG'] + nren_asn_map = config['nren-asn-map'] + nren_details = [_peerings_for_nren(int(asn), bgplu_index) for asn in + nren_asn_map] + response = json.dumps(nren_details) + return Response(response, mimetype='application/json')