Skip to content
Snippets Groups Projects
Commit 363d1a0a authored by Robert Latta's avatar Robert Latta
Browse files

Changed to use the function for getting top level services; stoped relating...

Changed to use the function for getting top level services; stoped relating interfaces on different vlans; only reported related services that are services; updated test to reflect changes
parent ec2d064d
No related branches found
No related tags found
No related merge requests found
......@@ -43,16 +43,10 @@ def after_request(resp):
return common.after_request(resp)
def base_interface_name(interface):
m = re.match(r'(.*?)(\.\d+)?$', interface)
assert m # sanity: anything should match
return m.group(1)
def related_interfaces(hostname, interface):
r = common.get_current_redis()
prefix = 'netconf-interfaces:%s:' % hostname
for k in r.keys(prefix + base_interface_name(interface) + '.*'):
for k in r.keys(prefix + interface + '.*'):
k = k.decode('utf-8')
assert k.startswith(prefix) # sanity
assert len(k) > len(prefix) # sanity (contains at least an interface)
......@@ -93,33 +87,12 @@ def get_juniper_link_info(source_equipment, interface):
result = {}
top_level_services = []
def _get_top_level_services(circuit_id):
tls = []
results = r.get("opsdb:services:children:{}".format(circuit_id))
if results:
results = json.loads(results.decode('utf-8'))
for c in results:
if circuit_id == c['child_circuit_id']:
tls.append(
{'name': c['parent_circuit'],
'status': c['parent_circuit_status']})
else:
temp_parents = \
_get_top_level_services(c['child_circuit_id'])
if not temp_parents:
tls.append(
{'name': c['parent_circuit'],
'status': c['parent_circuit_status']})
tls.extend(temp_parents)
return tls
services = r.get(
'opsdb:interface_services:%s:%s' % (source_equipment, interface))
if services:
result['services'] = json.loads(services.decode('utf=8'))
for s in result['services']:
top_level_services.extend(_get_top_level_services(s['id']))
top_level_services.extend(get_top_level_services(s['id'], r))
ifc_info = r.get(
'netconf-interfaces:%s:%s' % (source_equipment, interface))
......@@ -140,26 +113,21 @@ def get_juniper_link_info(source_equipment, interface):
for related in related_interfaces(source_equipment, interface):
rs = r.get('opsdb:interface_services:%s:%s'
% (source_equipment, related))
all_rs = []
if rs:
for s in json.loads(rs.decode('utf-8')):
top_level_services.extend(
_get_top_level_services(s['id']))
yield {'name': s['name'], 'status': s['status']}
get_top_level_services(s['id'], r))
if s['circuit_type'].lower() == 'service':
all_rs.append(
{'name': s['name'], 'status': s['status']})
return all_rs
related_services = list(_related_services())
related_services = _related_services()
if related_services:
related_services.extend(top_level_services)
result['related-services'] = related_services
# no longer possible, now that at least 'interface' is
# returned for unknown interfaces
# if not result:
# return Response(
# response="no available info for {} {}".format(
# source_equipment, interface),
# status=404,
# mimetype="text/html")
result = json.dumps(result)
# cache this data for the next call
r.set(cache_key, result.encode('utf-8'))
......@@ -290,12 +258,6 @@ def peer_info(address):
if interfaces:
result['interfaces'] = interfaces
# if not result:
# return Response(
# response='no peering info found for %s' % address,
# status=404,
# mimetype="text/html")
result = json.dumps(result)
# cache this data for the next call
r.set(cache_key, result.encode('utf-8'))
......
import pytest
from inventory_provider.routes import classifier
from inventory_provider.routes.classifier import get_top_level_services
from inventory_provider.tasks import common
@pytest.mark.parametrize('interface_name,base_name', [
('ae0', 'ae0'),
('ae0.0', 'ae0'),
('ae1.0', 'ae1'),
('ae10.2603', 'ae10'),
('et-3/1/2', 'et-3/1/2'),
('et-3/1/2.100', 'et-3/1/2'),
('xe-2/1/0', 'xe-2/1/0'),
('xe-2/1/0.933', 'xe-2/1/0'),
# degenerate cases ... check expected regex behavior
('xe-2/1/0.933.933', 'xe-2/1/0.933'),
(' sss.333.aaa ', ' sss.333.aaa '),
(' sss.333.aaa .999', ' sss.333.aaa ')
]
)
def test_base_interface_name(interface_name, base_name):
assert classifier.base_interface_name(interface_name) == base_name
# todo - not too keen on this as it relies on the extracted opsdb data, which
# could change and lead to this test failing
def test_get_top_level_circuits(mocked_redis):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment