INF-417 InfrastructureInventoryObject implemented
[pti/o2.git] / o2ims / domain / ocloud.py
index 996d82d..ce46e96 100644 (file)
 from __future__ import annotations
 import json
 
-from o2common.domain.base import AgRoot, Serializer
+from o2common.config import config
+from o2common.domain.base import AgRoot, Serializer, \
+    InfrastructureInventoryObject
 # from dataclasses import dataclass
 # from datetime import date
 # from typing import Optional, List, Set
-from .resource_type import ResourceTypeEnum
-# from uuid import UUID
+from .resource_type import ResourceKindEnum, ResourceTypeEnum
+from .alarm_obj import AlarmDictionary
 
 
-class DeploymentManager(AgRoot, Serializer):
+DeploymentManagerProfileDefault = 'native_k8sapi'
+DeploymentManagerProfileSOL018 = 'sol018'
+DeploymentManagerProfileSOL018HelmCLI = 'sol018_helmcli'
+
+
+class DeploymentManager(InfrastructureInventoryObject, AgRoot, Serializer):
     def __init__(self, id: str, name: str, ocloudid: str,
                  dmsendpoint: str, description: str = '',
                  supportedLocations: str = '', capabilities: str = '',
                  capacity: str = '', profile: str = '') -> None:
         super().__init__()
         self.deploymentManagerId = id
-        self.version_number = 0
-        self.oCloudId = ocloudid
         self.name = name
         self.description = description
-        self.deploymentManagementServiceEndpoint = dmsendpoint
+        self.oCloudId = ocloudid
+        self.serviceUri = dmsendpoint
         self.supportedLocations = supportedLocations
         self.capabilities = capabilities
         self.capacity = capacity
         self.profile = profile
         self.extensions = []
 
+        self.version_number = 0
+
     def serialize(self):
         d = Serializer.serialize(self)
 
         if 'profile' in d and d['profile'] != '':
             d['profile'] = json.loads(d['profile'])
-        d['profileSupportList'] = ['default', 'sol0018']
-
+        d['profileSupportList'] = [
+            DeploymentManagerProfileDefault,
+        ]
+        profiles = config.get_dms_support_profiles()
+        for profile in profiles:
+            if profile == DeploymentManagerProfileSOL018:
+                d['profileSupportList'].append(profile)
+            elif profile == DeploymentManagerProfileSOL018HelmCLI:
+                d['profileSupportList'].append(profile)
+
+        if 'capabilities' in d and d['capabilities'] != '':
+            d['capabilities'] = json.loads(d['capabilities'])
         return d
 
+    def get_notification_dict(self):
+        return self.get_fields_as_dict(
+            ['deploymentManagerId', 'name', 'oCloudId', 'serviceUri',
+             'description'])
+
 
-class ResourcePool(AgRoot, Serializer):
+class ResourcePool(InfrastructureInventoryObject, AgRoot, Serializer):
     def __init__(self, id: str, name: str, location: str,
                  ocloudid: str, gLocationId: str = '',
                  description: str = '') -> None:
         super().__init__()
         self.resourcePoolId = id
-        self.version_number = 0
-        self.oCloudId = ocloudid
         self.globalLocationId = gLocationId
         self.name = name
-        self.location = location
         self.description = description
+        self.oCloudId = ocloudid
+        self.location = location
+        self.resources = ''
         self.extensions = []
 
+        self.version_number = 0
+
+    def get_notification_dict(self):
+        return self.get_fields_as_dict(
+            ['resourcePoolId', 'oCloudId', 'globalLocationId', 'name',
+             'description'])
+
 
-class ResourceType(AgRoot, Serializer):
+class ResourceType(InfrastructureInventoryObject, AgRoot, Serializer):
     def __init__(self, typeid: str, name: str, typeEnum: ResourceTypeEnum,
-                 ocloudid: str, vender: str = '', model: str = '',
+                 vendor: str = '', model: str = '',
                  version: str = '',
                  description: str = '') -> None:
         super().__init__()
         self.resourceTypeId = typeid
-        self.version_number = 0
-        self.oCloudId = ocloudid
         self.resourceTypeEnum = typeEnum
         self.name = name
-        self.vender = vender
+        self.description = description
+        self.vendor = vendor
         self.model = model
         self.version = version
-        self.description = description
+        self.alarmDictionary = None
+        self.resourceKind = ResourceKindEnum.UNDEFINED
+        self.resourceClass = ResourceTypeEnum.UNDEFINED
         self.extensions = []
 
+        self.version_number = 0
 
-class Resource(AgRoot, Serializer):
+    def serialize(self):
+        d = Serializer.serialize(self)
+        if 'alarmDictionary' in d and \
+                type(d['alarmDictionary']) is AlarmDictionary:
+            d['alarmDictionary'] = d['alarmDictionary'].serialize()
+        return d
+
+    def get_notification_dict(self):
+        return self.get_fields_as_dict(
+            ['resourceTypeId', 'name', 'description', 'vendor', 'model',
+             'version'])
+
+
+class Resource(InfrastructureInventoryObject, AgRoot, Serializer):
     def __init__(self, resourceId: str, resourceTypeId: str,
-                 resourcePoolId: str, name: str, parentId: str = '',
+                 resourcePoolId: str, parentId: str = '',
                  gAssetId: str = '', elements: str = '',
-                 description: str = '') -> None:
+                 description: str = '', extensions: str = '') -> None:
         super().__init__()
         self.resourceId = resourceId
-        self.version_number = 0
+        self.description = description
         self.resourceTypeId = resourceTypeId
-        self.resourcePoolId = resourcePoolId
-        self.name = name
         self.globalAssetId = gAssetId
-        self.parentId = parentId
+        self.resourcePoolId = resourcePoolId
         self.elements = elements
-        self.description = description
+        self.extensions = extensions
+
+        self.parentId = parentId
         self.children = []
-        self.extensions = []
+
+        self.version_number = 0
 
     def set_children(self, children: list):
         self.children = children
@@ -123,23 +169,34 @@ class Resource(AgRoot, Serializer):
             d['children'].append(child.serialize())
         return d
 
+    def get_notification_dict(self):
+        return self.get_fields_as_dict(
+            ['resourceId', 'resourceTypeId', 'resourcePoolId', 'globalAssetId',
+             'description'])
+
 
-class Ocloud(AgRoot, Serializer):
+class Ocloud(InfrastructureInventoryObject, AgRoot, Serializer):
     def __init__(self, ocloudid: str, name: str, imsendpoint: str,
                  globalcloudId: str = '',
                  description: str = '', version_number: int = 0) -> None:
         super().__init__()
         self.oCloudId = ocloudid
-        self.globalcloudId = globalcloudId
-        self.version_number = version_number
+        self.globalCloudId = globalcloudId
         self.name = name
         self.description = description
-        self.infrastructureManagementServiceEndpoint = imsendpoint
+        self.serviceUri = imsendpoint
+        self.resourceTypes = []
         self.resourcePools = []
         self.deploymentManagers = []
-        self.resourceTypes = []
+        self.smoRegistrationService = ''
         self.extensions = []
 
+        self.version_number = version_number
+
+    def get_notification_dict(self):
+        return self.get_fields_as_dict(
+            ['oCloudId', 'globalcloudId', 'globalCloudId', 'name',
+             'description', 'serviceUri'])
     # def addDeploymentManager(self,
     #                          deploymentManager: DeploymentManager):