From 530dbd6ecd7c209d8609e3c0d0304a0a0f74065b Mon Sep 17 00:00:00 2001
From: Robert Latta <robert.latta@geant.org>
Date: Wed, 29 Jul 2020 14:32:49 +0000
Subject: [PATCH] added get_node_locations

---
 inventory_provider/db/ims_data.py | 63 ++++++++++++++++++-------------
 1 file changed, 36 insertions(+), 27 deletions(-)

diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py
index 22ee4a0c..2e6a59f7 100644
--- a/inventory_provider/db/ims_data.py
+++ b/inventory_provider/db/ims_data.py
@@ -10,37 +10,46 @@ logger = logging.getLogger(__name__)
 
 # Dashboard V3
 
+IMS_OPSDB_STATUS_MAP = {
+    InventoryStatus.PLANNED: 'Planned',
+    InventoryStatus.READY_FOR_SERVICE: 'Installed',
+    InventoryStatus.IN_SERVICE: 'Operational',
+    InventoryStatus.MIGRATION: 'Planned',
+    InventoryStatus.OUT_OF_SERVICE: 'Terminated',
+    InventoryStatus.READY_FOR_CEASURE: 'Disposed'
+}
+
 
-def lookup_pop_info(ds, hostname):
+def get_node_locations(ds):
     site_nav_props = [
         ims.SITE_PROPERTIES['City'],
         ims.SITE_PROPERTIES['SiteAliases'],
-        ims.SITE_PROPERTIES['Country']
+        ims.SITE_PROPERTIES['Country'],
+        ims.SITE_PROPERTIES['Nodes']
     ]
-
-    node = ds.get_entity_by_name('Node', hostname)
-    if not node:
-        return None
-    site = ds.get_entity_by_id('Site', node['SiteId'], site_nav_props, True)
-    city = site['City']
-    abbreviation = ''
-    try:
-        abbreviation = site['SiteAliases'][0]['AliasName']
-    except IndexError:
-        pass  # no alias - ignore silently
-    eq = {
-            'equipment-name': node['Name'],
-            'status': InventoryStatus(node['InventoryStatusId']).name,
-            'pop': {
-                'name': site['Name'],
-                'city': city['Name'],
-                'country': city['Country']['Name'],
-                'abbreviation': abbreviation,
-                'longitude': site['Longitude'],
-                'latitude': site['Latitude'],
-            }
-        }
-    return eq
+    sites = ds.get_all_entities('Site', site_nav_props, step_count=500)
+    for site in sites:
+        city = site['city']
+        abbreviation = ''
+        try:
+            abbreviation = site['sitealiases'][0]['aliasname']
+        except IndexError:
+            pass  # no alias - ignore silently
+
+        for node in site['nodes']:
+            yield (node['name'], {
+                'equipment-name': node['name'],
+                'status': IMS_OPSDB_STATUS_MAP.get(
+                    InventoryStatus(node['inventorystatusid']), 'unknown'),
+                'pop': {
+                    'name': site['name'],
+                    'city': city['name'],
+                    'country': city['country']['name'],
+                    'abbreviation': abbreviation,
+                    'longitude': site['longitude'],
+                    'latitude': site['latitude'],
+                }
+            })
 
 
 # End of Dashboard V3 stuff
@@ -114,7 +123,7 @@ def lookup_lg_routers(ds):
                         'latitude': site['latitude'],
                     }
                 }
-            yield(eq)
+            yield eq
 
 
 def otrs_get_customer_company_rows(ds):
-- 
GitLab