Skip to content
Snippets Groups Projects
Commit d393a8f2 authored by Erik Reid's avatar Erik Reid
Browse files

Finished feature add-bgp-interface-service-info.

parents 88aea809 0eb2d0c3
Branches
Tags
No related merge requests found
...@@ -444,6 +444,19 @@ Any non-empty responses are JSON formatted messages. ...@@ -444,6 +444,19 @@ Any non-empty responses are JSON formatted messages.
"required": [ "required": [
"name", "interface address", "interface name", "router"], "name", "interface address", "interface name", "router"],
"additionalProperties": False "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"}
}
}
} }
}, },
...@@ -455,7 +468,7 @@ Any non-empty responses are JSON formatted messages. ...@@ -455,7 +468,7 @@ Any non-empty responses are JSON formatted messages.
"vpn-rr-peer-info": {"$ref": "#/definitions/vpn-rr-peer"}, "vpn-rr-peer-info": {"$ref": "#/definitions/vpn-rr-peer"},
"interfaces": { "interfaces": {
"type": "array", "type": "array",
"items": {"$ref": "#/definitions/interface-info"} "items": {"$ref": "#/definitions/interface-lookup-info"}
} }
}, },
"additionalProperties": False "additionalProperties": False
......
...@@ -88,6 +88,30 @@ def find_interfaces(address): ...@@ -88,6 +88,30 @@ def find_interfaces(address):
yield info 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']) @routes.route("/peer-info/<address>", methods=['GET', 'POST'])
@common.require_accepts_json @common.require_accepts_json
def peer_info(address): def peer_info(address):
...@@ -124,7 +148,7 @@ def peer_info(address): ...@@ -124,7 +148,7 @@ def peer_info(address):
info = info.decode('utf-8') info = info.decode('utf-8')
result['vpn-rr-peer-info'] = json.loads(info) result['vpn-rr-peer-info'] = json.loads(info)
interfaces = list(find_interfaces(address_obj)) interfaces = list(find_interfaces_and_services(address_obj))
if interfaces: if interfaces:
result['interfaces'] = interfaces result['interfaces'] = interfaces
......
...@@ -101,6 +101,19 @@ def test_peer_info( ...@@ -101,6 +101,19 @@ def test_peer_info(
"required": [ "required": [
"name", "interface address", "interface name", "router"], "name", "interface address", "interface name", "router"],
"additionalProperties": False "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( ...@@ -112,7 +125,7 @@ def test_peer_info(
"vpn-rr-peer-info": {"$ref": "#/definitions/vpn-rr-peer"}, "vpn-rr-peer-info": {"$ref": "#/definitions/vpn-rr-peer"},
"interfaces": { "interfaces": {
"type": "array", "type": "array",
"items": {"$ref": "#/definitions/interface-info"} "items": {"$ref": "#/definitions/interface-lookup-info"}
} }
}, },
"additionalProperties": False "additionalProperties": False
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment