Commit f69da29d authored by Pablo Armingol's avatar Pablo Armingol
Browse files

add attributes to Inventory NBI

parent 0762893a
Loading
Loading
Loading
Loading
+28 −24
Original line number Diff line number Diff line
@@ -12,13 +12,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.

import libyang, os
from common.proto.context_pb2 import Device
from typing import Dict, Optional
import datetime
import json
import logging
import libyang
import os
import re
import datetime

LOGGER = logging.getLogger(__name__)
YANG_DIR = os.path.join(os.path.dirname(__file__), 'yang')
@@ -88,9 +89,6 @@ class YangHandler:

            if component_type == "FRU" :
                component_type = "slack"
                component_new.create_path('is-fru', True)
            else :
                component_new.create_path('is-fru', False)
                
            component_type = component_type.replace("_", "-").lower()
            component_type = 'iana-hardware:' + component_type
@@ -101,13 +99,14 @@ class YangHandler:

            physical_index += 1

            component_new.create_path('description', attributes["description"])
            component_new.create_path('description', attributes["description"].replace('/"',""))
            
            if "CHASSIS" not in component.type:
                parent_component_references = component_new.create_path('parent-component-references')
                parent = parent_component_references.create_path('component-reference[index="{:d}"]'.format(physical_index))
            for component2 in device.components:
                if component.parent == component2.name : 
                    parent.create_path('uuid', component2.component_uuid.uuid)
                for component_parent in device.components:
                    if component.parent == component_parent.name : 
                      parent.create_path('uuid', component_parent.component_uuid.uuid)
                      break

            if attributes["mfg-date"] != "":
@@ -119,11 +118,22 @@ class YangHandler:
            component_new.create_path('firmware-rev', attributes["firmware-version"])
            component_new.create_path('serial-num', attributes["serial-num"])
            component_new.create_path('mfg-name', attributes["mfg-name"])
            if attributes["removable"]:
                removable = attributes["removable"].lower()
                if 'true' in removable:
                    component_new.create_path('is-fru', True)
                elif 'false' in removable:
                    component_new.create_path('is-fru', False)
                
            if attributes["id"]:
                try:
                    if  "CHASSIS" in component.type :  
                        component_new.create_path('parent-rel-pos', 0)
                    else:                        
                        parent_rel_pos = int(attributes["id"].replace("\"", ""))
                        component_new.create_path('parent-rel-pos', parent_rel_pos)
                except ValueError:
                    LOGGER.info('ERROR:{:s} '.format(component.name ))
                    continue

            component_new.create_path('uri', component.name)
@@ -131,15 +141,9 @@ class YangHandler:

            component_new.create_path('uuid', component.component_uuid.uuid)

            contained_child = []
            for component2 in device.components:
                if component.name == component2.parent : 
                    child_uuid = component2.component_uuid.uuid.strip("'")
                    contained_child.append(child_uuid)
                    LOGGER.info('parent: {:s}'.format(str(component)))
                    LOGGER.info('child: {:s}'.format(str(component2)))
            
            component_new.create_path('contained-child', contained_child)
            for child in device.components:
                if component.name == child.parent : 
                    component_new.create_path('contained-child', child.component_uuid.uuid)

        return json.loads(hardware.print_mem('json'))