From 0a370496af29256deb3d6381218ef306db04757c Mon Sep 17 00:00:00 2001 From: Robert Latta <robert.latta@geant.org> Date: Wed, 29 Jul 2020 14:34:17 +0000 Subject: [PATCH] added population of equipment location data and testing route to call it --- inventory_provider/routes/testing.py | 5 +++++ inventory_provider/tasks/ims_worker.py | 29 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/inventory_provider/routes/testing.py b/inventory_provider/routes/testing.py index 6f9ce50e..668d7b10 100644 --- a/inventory_provider/routes/testing.py +++ b/inventory_provider/routes/testing.py @@ -21,6 +21,11 @@ def flushdb(): # IMS routes +@routes.route("update-equipment-locations-ims", methods=['GET', 'POST']) +def update_equipment_locations_ims(): + ims_worker.update_equipment_locations_ims.delay(use_current=True) + return Response('OK') + @routes.route("update-lg-routers-ims", methods=['GET', 'POST']) def update_lg_routers_ims(): ims_worker.update_lg_routers_ims.delay(use_current=True) diff --git a/inventory_provider/tasks/ims_worker.py b/inventory_provider/tasks/ims_worker.py index b7c2e85c..e966d228 100644 --- a/inventory_provider/tasks/ims_worker.py +++ b/inventory_provider/tasks/ims_worker.py @@ -21,6 +21,35 @@ environment.setup_logging() logger = logging.getLogger(__name__) +@app.task(base=InventoryTask, bind=True, name='update_equipment_locations_ims') +@log_task_entry_and_exit +def update_equipment_locations_ims(self, use_current=False): + r = get_current_redis(InventoryTask.config) + + if use_current: + r = get_current_redis(InventoryTask.config) + rp = r.pipeline() + # scan with bigger batches, to mitigate network latency effects + for k in r.scan_iter('ims:location:*', count=1000): + rp.delete(k) + rp.execute() + else: + r = get_next_redis(InventoryTask.config) + + c = InventoryTask.config["ims"] + ds = IMS(c['api'], c['username'], c['password']) + + rp = r.pipeline() + hostnames_found = set() + for h, d in ims_data.get_node_locations(ds): + # put into a list to match non-IMS version + rp.set(f'ims:location:{h}', json.dumps([d])) + if h in hostnames_found: + print(f'Multiple entries for {h}') + hostnames_found.add(h) + rp.execute() + + @app.task(base=InventoryTask, bind=True, name='update_lg_routers_ims') @log_task_entry_and_exit def update_lg_routers_ims(self, use_current=False): -- GitLab