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

load lab silently, where appropriate

parent 2f95bc50
No related branches found
No related tags found
No related merge requests found
......@@ -134,28 +134,30 @@ def _load_snmp_indexes(hostname=None):
return result
def _load_interface_bundles(hostname=None, lab=False):
def _load_interface_bundles(hostname=None):
result = dict()
base_key = 'netconf-interface-bundles'
if lab:
base_key = f'lab:{base_key}'
def _load_docs(key_pattern):
for doc in common.load_json_docs(
config_params=current_app.config['INVENTORY_PROVIDER_CONFIG'],
key_pattern=key_pattern,
num_threads=20):
key_pattern = f'{base_key}:{hostname}:*' \
if hostname else '{base_key}:*'
m = re.match(
r'.*netconf-interface-bundles:([^:]+):(.+)', doc['key'])
assert m
for doc in common.load_json_docs(
config_params=current_app.config['INVENTORY_PROVIDER_CONFIG'],
key_pattern=key_pattern,
num_threads=20):
router = m.group(1)
interface = m.group(2)
result.setdefault(router, dict())
result[router][interface] = doc['value']
m = re.match(r'.*netconf-interface-bundles:([^:]+):(.+)', doc['key'])
assert m
base_key = 'netconf-interface-bundles'
base_key_pattern = f'{base_key}:{hostname}:*' \
if hostname else f'{base_key}:*'
router = m.group(1)
interface = m.group(2)
result.setdefault(router, dict())
result[router][interface] = doc['value']
_load_docs(base_key_pattern)
_load_docs(f'lab:{base_key_pattern}')
return result
......@@ -193,26 +195,42 @@ def _load_services(hostname=None):
def _load_interfaces(hostname):
key_pattern = f'netconf:{hostname}*' if hostname else 'netconf:*'
for doc in common.load_xml_docs(
config_params=current_app.config['INVENTORY_PROVIDER_CONFIG'],
key_pattern=key_pattern,
num_threads=10):
router = doc['key'][len('netconf:'):]
"""
loads basic interface data for production & lab routers
for ifc in juniper.list_interfaces(doc['value']):
if not ifc['description']:
continue
:param hostname:
:return:
"""
def _load_docs(key_pattern):
m = re.match(r'^(.*netconf:).+', key_pattern)
assert m # sanity
key_prefix_len = len(m.group(1))
assert key_prefix_len >= len('netconf:') # sanity
for doc in common.load_xml_docs(
config_params=current_app.config['INVENTORY_PROVIDER_CONFIG'],
key_pattern=key_pattern,
num_threads=10):
router = doc['key'][key_prefix_len:]
for ifc in juniper.list_interfaces(doc['value']):
if not ifc['description']:
continue
yield {
'router': router,
'name': ifc['name'],
'bundle': ifc['bundle'],
'bundle-parents': [],
'description': ifc['description'],
'circuits': []
}
yield {
'router': router,
'name': ifc['name'],
'bundle': ifc['bundle'],
'bundle-parents': [],
'description': ifc['description'],
'circuits': []
}
base_key_pattern = f'netconf:{hostname}*' if hostname else 'netconf:*'
yield from _load_docs(base_key_pattern)
yield from _load_docs(f'lab:{base_key_pattern}')
def _add_bundle_parents(interfaces, hostname=None):
......@@ -224,7 +242,6 @@ def _add_bundle_parents(interfaces, hostname=None):
:return: generator with bundle-parents populated in each element
"""
bundles = _load_interface_bundles(hostname)
bundles.update(_load_interface_bundles(hostname, lab=True))
for ifc in interfaces:
router_bundle = bundles.get(ifc['router'], None)
......
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