diff --git a/inventory_provider/routes/testing.py b/inventory_provider/routes/testing.py index 6f9ce50e67bdb58aec172e2276b64fcd883e77f1..668d7b10ab453ca0431a4274c97f7bd8d5c8bee7 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 b7c2e85c468acbd25891d7d5704c3552612d902d..e966d228ae15c05101624e79f5a448935fc3d75c 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):