diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py index d86b158c60d6946dfdb4daae7c76cd4daf68be8e..64687058b114e69ccc13e6424e16080b70014df9 100644 --- a/inventory_provider/db/ims_data.py +++ b/inventory_provider/db/ims_data.py @@ -20,7 +20,7 @@ IMS_OPSDB_STATUS_MAP = { InventoryStatus.IN_SERVICE: 'operational', InventoryStatus.MIGRATION: 'planned', InventoryStatus.OUT_OF_SERVICE: 'terminated', - InventoryStatus.READY_FOR_CEASURE: 'disposed' + InventoryStatus.READY_FOR_CEASURE: 'operational' } STATUSES_TO_IGNORE = \ [InventoryStatus.OUT_OF_SERVICE.value, @@ -220,32 +220,37 @@ def get_port_details(ds: IMS): ims.INTERNAL_PORT_PROPERTIES['Node'], ims.PORT_PROPERTIES['Shelf'] } - for p in chain( - ds.get_all_entities('port', port_nav_props, step_count=2000), - ds.get_all_entities( - 'internalport', internal_port_nav_props, step_count=2000) - ): - vendor = None - interface_name = None - try: - vendor = p['node']['equipmentdefinition']['vendor']['name'].lower() - except (TypeError, KeyError): - pass - # if there become more exceptions we will need to abstract this - if vendor == 'infinera' and p.get('shelf', None): + + # this is here instead of chaining to make debugging easier + def _process_ports(ports, p_type): + for p in ports: + vendor = None + interface_name = None try: - interface_name = f"{p['shelf']['sequencenumber']}-{p['name']}" - except KeyError: + vendor = p['node']['equipmentdefinition']['vendor']['name'].lower() + except (TypeError, KeyError): pass + # if there become more exceptions we will need to abstract this + if vendor == 'infinera' and p.get('shelf', None): + try: + interface_name = f"{p['shelf']['sequencenumber']}-{p['name']}" + except KeyError: + pass + + if not interface_name: + interface_name = p['name'] + data = { + 'port_id': p['id'], + 'equipment_name': p['node']['name'], + 'interface_name': interface_name + } + yield data + + yield from _process_ports(ds.get_all_entities( + 'port', port_nav_props, step_count=2000), 'external') + yield from _process_ports(ds.get_all_entities( + 'internalport', internal_port_nav_props, step_count=2000), 'internal') - if not interface_name: - interface_name = p['name'] - data = { - 'port_id': p['id'], - 'equipment_name': p['node']['name'], - 'interface_name': interface_name - } - yield data def get_circuit_hierarchy(ds: IMS):