Update accelerator resource
[pti/o2.git] / o2ims / domain / ocloud.py
index 0c5d232..b7c82b5 100644 (file)
-# Copyright (C) 2021 Wind River Systems, Inc.\r
-#\r
-#  Licensed under the Apache License, Version 2.0 (the "License");\r
-#  you may not use this file except in compliance with the License.\r
-#  You may obtain a copy of the License at\r
-#\r
-#      http://www.apache.org/licenses/LICENSE-2.0\r
-#\r
-#  Unless required by applicable law or agreed to in writing, software\r
-#  distributed under the License is distributed on an "AS IS" BASIS,\r
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-#  See the License for the specific language governing permissions and\r
-#  limitations under the License.\r
-\r
-from __future__ import annotations\r
-\r
-from o2ims.domain.base import AgRoot\r
-# from dataclasses import dataclass\r
-# from datetime import date\r
-# from typing import Optional, List, Set\r
-from .resource_type import ResourceTypeEnum\r
-# from uuid import UUID\r
-\r
-\r
-class Subscription(AgRoot):\r
-    def __init__(self, id: str, callback: str, consumersubid: str = '',\r
-                 filter: str = '') -> None:\r
-        super().__init__()\r
-        self.subscriptionId = id\r
-        self.version_number = 0\r
-        self.callback = callback\r
-        self.consumerSubscriptionId = consumersubid\r
-        self.filter = filter\r
-\r
-\r
-class DeploymentManager(AgRoot):\r
-    def __init__(self, id: str, name: str, ocloudid: str,\r
-                 dmsendpoint: str, description: str = '',\r
-                 supportedLocations: str = '', capabilities: str = '',\r
-                 capacity: str = '') -> None:\r
-        super().__init__()\r
-        self.deploymentManagerId = id\r
-        self.version_number = 0\r
-        self.oCloudId = ocloudid\r
-        self.name = name\r
-        self.description = description\r
-        self.deploymentManagementServiceEndpoint = dmsendpoint\r
-        self.supportedLocations = supportedLocations\r
-        self.capabilities = capabilities\r
-        self.capacity = capacity\r
-        self.extensions = []\r
-\r
-\r
-class ResourcePool(AgRoot):\r
-    def __init__(self, id: str, name: str, location: str,\r
-                 ocloudid: str, gLocationId: str = '',\r
-                 description: str = '') -> None:\r
-        super().__init__()\r
-        self.resourcePoolId = id\r
-        self.version_number = 0\r
-        self.oCloudId = ocloudid\r
-        self.globalLocationId = gLocationId\r
-        self.name = name\r
-        self.location = location\r
-        self.description = description\r
-        self.extensions = []\r
-\r
-\r
-class ResourceType(AgRoot):\r
-    def __init__(self, typeid: str, name: str, typeEnum: ResourceTypeEnum,\r
-                 ocloudid: str, vender: str = '', model: str = '',\r
-                 version: str = '',\r
-                 description: str = '') -> None:\r
-        super().__init__()\r
-        self.resourceTypeId = typeid\r
-        self.oCloudId = ocloudid\r
-        self.resourceTypeEnum = typeEnum.value\r
-        self.name = name\r
-        self.vender = vender\r
-        self.model = model\r
-        self.version = version\r
-        self.description = description\r
-        self.extensions = []\r
-\r
-\r
-class Resource(AgRoot):\r
-    def __init__(self, resourceId: str, resourceTypeId: str,\r
-                 resourcePoolId: str, oCloudId: str = '',\r
-                 parentId: str = '', elements: list = [],\r
-                 description: str = '') -> None:\r
-        super().__init__()\r
-        self.resourceId = resourceId\r
-        self.version_number = 0\r
-        self.oCloudId = oCloudId\r
-        self.resourceTypeId = resourceTypeId\r
-        self.resourcePoolId = resourcePoolId\r
-        self.parentId = parentId\r
-        self.path = str()\r
-        self.elements = elements\r
-        self.description = description\r
-        self.extensions = []\r
-\r
-\r
-class Ocloud(AgRoot):\r
-    def __init__(self, ocloudid: str, name: str, imsendpoint: str,\r
-                 globalcloudId: str = '',\r
-                 description: str = '', version_number: int = 0) -> None:\r
-        super().__init__()\r
-        self.oCloudId = ocloudid\r
-        self.globalcloudId = globalcloudId\r
-        self.version_number = version_number\r
-        self.name = name\r
-        self.description = description\r
-        self.infrastructureManagementServiceEndpoint = imsendpoint\r
-        self.resourcePools = []\r
-        self.deploymentManagers = []\r
-        self.resourceTypes = []\r
-        self.extensions = []\r
-        # self.events = []\r
-\r
-    # def addDeploymentManager(self,\r
-    #                          deploymentManager: DeploymentManager):\r
-\r
-    #     deploymentManager.oCloudId = self.oCloudId\r
-    #     old = filter(\r
-    #         lambda x: x.deploymentManagerId ==\r
-    #         deploymentManager.deploymentManagerId,\r
-    #         self.deploymentManagers)\r
-    #     for o in old or []:\r
-    #         self.deploymentManagers.remove(o)\r
-    #     self.deploymentManagers.append(deploymentManager)\r
+# Copyright (C) 2021 Wind River Systems, Inc.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+from __future__ import annotations
+import json
+
+from o2common.domain.base import AgRoot, Serializer
+from o2common.config import config, conf as CONF
+# from dataclasses import dataclass
+# from datetime import date
+# from typing import Optional, List, Set
+from .resource_type import ResourceKindEnum, ResourceTypeEnum
+
+
+DeploymentManagerProfileDefault = 'native_k8sapi'
+DeploymentManagerProfileSOL018 = 'sol018'
+DeploymentManagerProfileSOL018HelmCLI = 'sol018_helmcli'
+
+
+class DeploymentManager(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.name = name
+        self.description = description
+        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'] = [
+            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)
+
+        return d
+
+
+class ResourcePool(AgRoot, Serializer):
+    def __init__(self, id: str, name: str, location: str,
+                 ocloudid: str, gLocationId: str = '',
+                 description: str = '') -> None:
+        super().__init__()
+        self.resourcePoolId = id
+        self.globalLocationId = gLocationId
+        self.name = name
+        self.description = description
+        self.oCloudId = ocloudid
+        self.location = location
+        self.resources = ''
+        self.extensions = []
+
+        self.version_number = 0
+
+
+class ResourceType(AgRoot, Serializer):
+    def __init__(self, typeid: str, name: str, typeEnum: ResourceTypeEnum,
+                 ocloudid: str, vendor: str = '', model: str = '',
+                 version: str = '',
+                 description: str = '') -> None:
+        super().__init__()
+        self.resourceTypeId = typeid
+        self.resourceTypeEnum = typeEnum
+        self.name = name
+        self.description = description
+        self.vendor = vendor
+        self.model = model
+        self.version = version
+        self.alarmDictionary = {}
+        self.resourceKind = ResourceKindEnum.UNDEFINED
+        self.resourceClass = ResourceTypeEnum.UNDEFINED
+        self.extensions = []
+
+        self.version_number = 0
+
+    def serialize(self):
+        d = Serializer.serialize(self)
+
+        if CONF.alarm_dictionaries.get(d['name']) is not None:
+            d["alarmDictionary"] = CONF.alarm_dictionaries.get(
+                d['name']).serialize()
+
+        return d
+
+
+class Resource(AgRoot, Serializer):
+    def __init__(self, resourceId: str, resourceTypeId: str,
+                 resourcePoolId: str, name: str, parentId: str = '',
+                 gAssetId: str = '', elements: str = '',
+                 description: str = '', extensions: str = '') -> None:
+        super().__init__()
+        self.resourceId = resourceId
+        self.description = description
+        self.resourceTypeId = resourceTypeId
+        self.globalAssetId = gAssetId
+        self.resourcePoolId = resourcePoolId
+        self.elements = elements
+        self.extensions = extensions
+
+        self.name = name
+        self.parentId = parentId
+        self.children = []
+
+        self.version_number = 0
+
+    def set_children(self, children: list):
+        self.children = children
+
+    def set_resource_type_name(self, resource_type_name: str):
+        self.resourceTypeName = resource_type_name
+
+    def serialize(self):
+        d = Serializer.serialize(self)
+
+        if 'elements' in d and d['elements'] != '':
+            d['elements'] = json.loads(d['elements'])
+
+        if not hasattr(self, 'children') or len(self.children) == 0:
+            return d
+        else:
+            d['children'] = []
+
+        for child in self.children:
+            d['children'].append(child.serialize())
+        return d
+
+
+class Ocloud(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.name = name
+        self.description = description
+        self.serviceUri = imsendpoint
+        self.resourceTypes = []
+        self.resourcePools = []
+        self.deploymentManagers = []
+        self.smoRegistrationService = ''
+        self.extensions = []
+
+        self.version_number = version_number
+
+    # def addDeploymentManager(self,
+    #                          deploymentManager: DeploymentManager):
+
+    #     deploymentManager.oCloudId = self.oCloudId
+    #     old = filter(
+    #         lambda x: x.deploymentManagerId ==
+    #         deploymentManager.deploymentManagerId,
+    #         self.deploymentManagers)
+    #     for o in old or []:
+    #         self.deploymentManagers.remove(o)
+    #     self.deploymentManagers.append(deploymentManager)