From 255582848b7d02a5dcb8f15074eee0caa986cea9 Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Fri, 17 Apr 2020 10:56:12 +0200 Subject: [PATCH] added import_unmanaged_interfaces task --- inventory_provider/tasks/worker.py | 37 +++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index 246b532b..2afb2e47 100644 --- a/inventory_provider/tasks/worker.py +++ b/inventory_provider/tasks/worker.py @@ -117,6 +117,40 @@ def update_interfaces_to_services(self): logger.debug('<<< update_interfaces_to_services') +@app.task(base=InventoryTask, bind=True) +def import_unmanaged_interfaces(self): + logger.debug('>>> import_unmanaged_interfaces') + + def _convert(d): + # the config file keys are more readable than + # the keys used in redis + return { + 'name': d['address'], + 'interface address': d['network'], + 'interface name': d['interface'], + 'router': d['router'] + } + + interfaces = [ + _convert(ifc) for ifc + in InventoryTask.config.get('unmanaged-interfaces', []) + ] + + if interfaces: + r = get_next_redis(InventoryTask.config) + rp = r.pipeline() + for ifc in interfaces: + rp.set( + f'reverse_interface_addresses:{ifc["name"]}', + json.dumps(ifc)) + rp.set( + f'subnets:{ifc["interface address"]}', + json.dumps([ifc])) + rp.execute() + + logger.debug('<<< import_unmanaged_interfaces') + + @app.task(base=InventoryTask, bind=True) def update_access_services(self): logger.debug('>>> update_access_services') @@ -533,7 +567,8 @@ def launch_refresh_cache_all(config): subtasks = [ update_equipment_locations.apply_async(), update_lg_routers.apply_async(), - update_access_services.apply_async() + update_access_services.apply_async(), + import_unmanaged_interfaces.apply_async() ] for hostname in _derive_router_hostnames(config): logger.debug('queueing router refresh jobs for %r' % hostname) -- GitLab