From 5a24f5f1630ba013b952193a43520d7299abc36d Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Fri, 1 Mar 2019 16:21:06 +0100 Subject: [PATCH] added service info to bgp peer info response --- inventory_provider/routes/classifier.py | 26 ++++++++++++++++++++++++- test/test_classifier_routes.py | 15 +++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/inventory_provider/routes/classifier.py b/inventory_provider/routes/classifier.py index a39f7a0d..5a0cf4d5 100644 --- a/inventory_provider/routes/classifier.py +++ b/inventory_provider/routes/classifier.py @@ -88,6 +88,30 @@ def find_interfaces(address): yield info +def find_interfaces_and_services(address): + """ + + :param address: an ipaddress object + :return: + """ + r = common.get_redis() + for interface in find_interfaces(address): + + services = r.get( + 'opsdb:interface_services:%s:%s' % ( + interface['router'], + interface['interface name'])) + if not services: + services = [] + else: + services = json.loads(services.decode('utf=8')) + + yield { + 'interface': interface, + 'services': services + } + + @routes.route("/peer-info/<address>", methods=['GET', 'POST']) @common.require_accepts_json def peer_info(address): @@ -124,7 +148,7 @@ def peer_info(address): info = info.decode('utf-8') result['vpn-rr-peer-info'] = json.loads(info) - interfaces = list(find_interfaces(address_obj)) + interfaces = list(find_interfaces_and_services(address_obj)) if interfaces: result['interfaces'] = interfaces diff --git a/test/test_classifier_routes.py b/test/test_classifier_routes.py index e4ec2b5d..2382d76f 100644 --- a/test/test_classifier_routes.py +++ b/test/test_classifier_routes.py @@ -101,6 +101,19 @@ def test_peer_info( "required": [ "name", "interface address", "interface name", "router"], "additionalProperties": False + }, + "service-info": { + "type": "object" + }, + "interface-lookup-info": { + "type": "object", + "properties": { + "interface": {"$ref": "#/definitions/interface-info"}, + "services": { + "type": "array", + "items": {"$ref": "#/definitions/service-info"} + } + } } }, @@ -112,7 +125,7 @@ def test_peer_info( "vpn-rr-peer-info": {"$ref": "#/definitions/vpn-rr-peer"}, "interfaces": { "type": "array", - "items": {"$ref": "#/definitions/interface-info"} + "items": {"$ref": "#/definitions/interface-lookup-info"} } }, "additionalProperties": False -- GitLab