From 864e0f163d1863d39fd078616cffa0407ded7dd4 Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Tue, 1 Oct 2019 16:16:50 +0200 Subject: [PATCH] always return a skeleton structure for any interface name --- inventory_provider/juniper.py | 2 ++ inventory_provider/routes/classifier.py | 24 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/inventory_provider/juniper.py b/inventory_provider/juniper.py index 2925b707..d7eca477 100644 --- a/inventory_provider/juniper.py +++ b/inventory_provider/juniper.py @@ -209,6 +209,8 @@ def list_interfaces(netconf_config): """ def _ifc_info(e): + # warning: this structure should match the default + # returned from routes.classifier.juniper_link_info name = e.find('name') assert name is not None, "expected interface 'name' child element" ifc = { diff --git a/inventory_provider/routes/classifier.py b/inventory_provider/routes/classifier.py index c8c36c5e..c29d2d8e 100644 --- a/inventory_provider/routes/classifier.py +++ b/inventory_provider/routes/classifier.py @@ -107,6 +107,16 @@ def get_juniper_link_info(source_equipment, interface): 'netconf-interfaces:%s:%s' % (source_equipment, interface)) if ifc_info: result['interface'] = json.loads(ifc_info.decode('utf-8')) + else: + # warning: this should match the structure returned by + # juniper:list_interfaces:_ifc_info + result['interface'] = { + 'name': interface, + 'description': '', + 'bundle': [], + 'ipv4': [], + 'ipv6': [] + } def _related_services(): for related in related_interfaces(source_equipment, interface): @@ -123,12 +133,14 @@ def get_juniper_link_info(source_equipment, interface): related_services.extend(top_level_services) result['related-services'] = related_services - if not result: - return Response( - response="no available info for {} {}".format( - source_equipment, interface), - status=404, - mimetype="text/html") + # 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 -- GitLab