1 # Copyright (C) 2021 Wind River Systems, Inc.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 from flask_restx import fields
17 from o2ims.views.api_ns import api_ims_inventory as api_ims_inventory_v1
18 from o2common.views.flask_restx_fields import Json2Dict
23 ocloud = api_ims_inventory_v1.model(
26 'oCloudId': fields.String(required=True),
27 'globalcloudId': fields.String(attribute='globalCloudId'),
28 'name': fields.String,
29 'description': fields.String,
30 'serviceUri': fields.String(attribute='serviceUri'),
31 # 'infrastructureManagementServiceEndpoint': fields.String(
32 # attribute='serviceUri'),
33 # 'infrastructureMangementServiceEndPoint': fields.String(
34 # attribute='serviceUri'),
35 # 'resourceTypes': fields.String,
36 # 'resourcePools': fields.String,
37 # 'deploymentManagers': fields.String,
38 # 'smoRegistrationService': fields.String
39 'extensions': fields.String
41 mask='{oCloudId,globalcloudId,name,description,serviceUri}'
45 class ResourceTypeDTO:
46 alarm_definition = api_ims_inventory_v1.model(
49 'alarmDefinitionId': fields.String,
50 'alarmName': fields.String,
51 'alarmLastChange': fields.String,
52 'alarmChangeType': fields.String,
53 'alarmDescription': fields.String,
54 'proposedRepairActions': fields.String,
55 'clearingType': fields.String,
56 'managementInterfaceId': fields.String,
57 'pkNotificationField': fields.String,
58 'alarmAdditionalFields': fields.String,
62 alarm_dictionary = api_ims_inventory_v1.model(
66 'alarmDictionaryVersion': fields.String,
67 'alarmDictionarySchemaVersion': fields.String,
68 'entityType': fields.String,
69 'vendor': fields.String,
70 'managementInterfaceId': fields.String,
71 'pkNotificationField': fields.String,
72 # 'alarmDefinition': fields.String,
73 'alarmDefinition': fields.List(fields.Nested(alarm_definition),
74 attribute='alarmDefinition'),
78 resource_type_get = api_ims_inventory_v1.model(
81 'resourceTypeId': fields.String(required=True,
82 description='Resource type ID'),
83 'name': fields.String,
84 'description': fields.String,
85 'vendor': fields.String,
86 'model': fields.String,
87 'version': fields.String,
88 'alarmDictionary': fields.Nested(alarm_dictionary, False, True),
89 # 'resourceKind': fields.String,
90 # 'resourceClass': fields.String,
91 'extensions': fields.String
93 mask='{resourceTypeId,name,description,model,vendor,version}'
97 class ResourcePoolDTO:
99 resource_pool_get = api_ims_inventory_v1.model(
100 "ResourcePoolGetDto",
102 'resourcePoolId': fields.String(required=True,
103 description='Resource pool ID'),
104 'globalLocationId': fields.String,
105 'name': fields.String,
106 'description': fields.String,
107 'oCloudId': fields.String,
108 'location': fields.String,
109 # 'resources': fields.String,
110 'extensions': fields.String
112 mask='{resourcePoolId,oCloudId,globalLocationId,name,description}'
117 resource_list = api_ims_inventory_v1.model(
120 'resourceId': fields.String(required=True,
121 description='Resource ID'),
122 'resourceTypeId': fields.String,
123 'resourcePoolId': fields.String,
124 'globalAssetId': fields.String,
125 # 'name': fields.String,
126 'parentId': fields.String,
127 'description': fields.String,
128 # 'elements': fields.String,
129 # 'extensions': fields.String
130 'extensions': Json2Dict(attribute='extensions')
131 # 'extensions': fields.Raw(attribute='extensions')
133 mask='{resourceId,resourcePoolId,resourceTypeId,description,parentId}'
136 def recursive_resource_mapping(iteration_number=2):
137 resource_json_mapping = {
138 'resourceId': fields.String(required=True,
139 description='Resource ID'),
140 'resourceTypeId': fields.String,
141 'resourcePoolId': fields.String,
142 'globalAssetId': fields.String,
143 # 'name': fields.String,
144 'parentId': fields.String,
145 'description': fields.String,
146 # 'elements': fields.String,
147 # 'extensions': fields.String
148 'extensions': Json2Dict(attribute='extensions')
149 # 'extensions': fields.Raw(attribute='extensions')
152 resource_json_mapping['elements'] = fields.List(
153 fields.Nested(ResourceDTO.recursive_resource_mapping(
154 iteration_number-1)), attribute='children')
155 return api_ims_inventory_v1.model(
156 'ResourceGetDto' + str(iteration_number), resource_json_mapping,
157 mask='{resourceId,resourcePoolId,resourceTypeId,description,' +
161 class DeploymentManagerDTO:
163 deployment_manager_list = api_ims_inventory_v1.model(
164 "DeploymentManagerListDto",
166 'deploymentManagerId': fields.String(
168 description='Deployment manager ID'),
169 'name': fields.String,
170 'description': fields.String,
171 'oCloudId': fields.String,
172 'serviceUri': fields.String(attribute='serviceUri'),
173 # 'deploymentManagementServiceEndpoint': fields.String(
174 # attribute='serviceUri'),
175 # 'supportedLocations': fields.String,
176 # 'capabilities': fields.String,
177 # 'capacity': fields.String,
178 'profileSupportList': fields.List(
180 description='Profile support list, use default for the return \
182 'extensions': fields.String
184 mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' + \
185 'profileSupportList}'
188 profile = api_ims_inventory_v1.model("DeploymentManagerGetDtoProfile", {
189 'cluster_api_endpoint': fields.String(
190 attribute='cluster_api_endpoint'),
191 'cluster_ca_cert': fields.String(attribute='cluster_ca_cert'),
192 'admin_user': fields.String(attribute='admin_user'),
193 'admin_client_cert': fields.String(attribute='admin_client_cert'),
194 'admin_client_key': fields.String(attribute='admin_client_key'),
195 # 'kube_config_file': fields.String(attribute='kube_config_file')
196 'helmcli_host_with_port': fields.String(
197 attribute='helmcli_host_with_port'),
198 'helmcli_username': fields.String(attribute='helmcli_username'),
199 'helmcli_password': fields.String(attribute='helmcli_password'),
200 'helmcli_kubeconfig': fields.String(attribute='helmcli_kubeconfig'),
203 extensions = api_ims_inventory_v1.model("DeploymentManagerExtensions", {
204 'profileName': fields.String,
205 'profileData': fields.Nested(profile, False, True),
208 deployment_manager_get = api_ims_inventory_v1.model(
209 "DeploymentManagerGetDto",
211 'deploymentManagerId': fields.String(
213 description='Deployment manager ID'),
214 'name': fields.String,
215 'description': fields.String,
216 'oCloudId': fields.String,
217 'serviceUri': fields.String(attribute='serviceUri'),
218 # 'deploymentManagementServiceEndpoint': fields.String(
219 # attribute='serviceUri'),
220 # 'supportedLocations': fields.String,
221 # 'capabilities': fields.String,
222 # 'capacity': fields.String,
223 'extensions': fields.Nested(extensions, True, True)
225 mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' +\
226 'extensions/profileName,extensions/profileData}'
230 class SubscriptionDTO:
232 subscription_get = api_ims_inventory_v1.model(
233 "SubscriptionGetDto",
235 'subscriptionId': fields.String(required=True,
236 description='Subscription ID'),
237 'callback': fields.String,
238 'consumerSubscriptionId': fields.String,
239 'filter': fields.String,
241 mask='{subscriptionId,callback}'
244 subscription_create = api_ims_inventory_v1.model(
245 "SubscriptionCreateDto",
247 'callback': fields.String(
248 required=True, description='Subscription callback address'),
249 'consumerSubscriptionId': fields.String,
250 'filter': fields.String,