Skip to content
Snippets Groups Projects
Commit ac180cab authored by Sam Roberts's avatar Sam Roberts
Browse files

fix unhandled error when routers are unavailable and no cached entry exists

parent 4bc48953
Branches
Tags
No related merge requests found
......@@ -148,7 +148,10 @@ def refresh_juniper_interface_list(hostname, netconf, interface_info, lab=False)
interfaces_all_key,
json.dumps(list(juniper.interface_addresses(netconf))))
interface_speeds = juniper.get_interface_speeds(interface_info)
interface_speeds = []
if interface_info:
interface_speeds = juniper.get_interface_speeds(interface_info)
for ifc in juniper.list_interfaces(netconf):
ifc['speed'] = interface_speeds.get(ifc['name'], '')
......@@ -536,7 +539,10 @@ def reload_lab_router_config_chorded(self, hostname):
netconf_doc = etree.fromstring(netconf_str)
interface_info_str = retrieve_and_persist_interface_info(
hostname, update_callback=self.log_warning)
interface_info = etree.fromstring(interface_info_str)
if interface_info_str:
interface_info = etree.fromstring(interface_info_str)
else:
interface_info = None
refresh_juniper_interface_list(hostname, netconf_doc, interface_info, lab=True)
......@@ -574,7 +580,10 @@ def reload_router_config_chorded(self, hostname):
netconf_doc = etree.fromstring(netconf_str)
interface_info_str = retrieve_and_persist_interface_info(
hostname, update_callback=self.log_warning)
interface_info = etree.fromstring(interface_info_str)
if interface_info_str:
interface_info = etree.fromstring(interface_info_str)
else:
interface_info = None
# clear cached classifier responses for this router, and
# refresh peering data
......@@ -653,13 +662,13 @@ def retrieve_and_persist_interface_info(
r = get_current_redis(InventoryTask.config)
interface_info_str = r.get(redis_key)
if not interface_info_str:
if interface_info_str:
logger.info(f'Returning cached interface info data for {hostname}')
update_callback(f'Returning cached interface info data for {hostname}')
else:
update_callback(f'no cached interface info for {redis_key}')
raise InventoryTaskError(
f'interface-info error with {hostname}'
f' and no cached interface info data found')
logger.info(f'Returning cached interface info data for {hostname}')
update_callback(f'Returning cached interface info data for {hostname}')
logger.warning(f'interface-info could not be retrieved from {hostname}, ignoring this host')
return None
r = get_next_redis(InventoryTask.config)
r.set(redis_key, interface_info_str)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment