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,
28 'globalcloudId': fields.String(attribute='globalCloudId'),
29 'name': fields.String,
30 'description': fields.String,
31 'serviceUri': fields.String(attribute='serviceUri'),
32 # 'infrastructureManagementServiceEndpoint': fields.String(
33 # attribute='serviceUri'),
34 # 'infrastructureMangementServiceEndPoint': fields.String(
35 # attribute='serviceUri'),
36 # 'resourceTypes': fields.String,
37 # 'resourcePools': fields.String,
38 # 'deploymentManagers': fields.String,
39 # 'smoRegistrationService': fields.String
40 'extensions': fields.String
42 mask='{oCloudId,globalCloudId,globalcloudId,name,description,' +\
47 class ResourceTypeDTO:
48 alarm_definition = api_ims_inventory_v1.model(
51 'alarmDefinitionId': fields.String,
52 'alarmName': fields.String,
53 'alarmLastChange': fields.String,
54 'alarmChangeType': fields.String,
55 'alarmDescription': fields.String,
56 'proposedRepairActions': fields.String,
57 'clearingType': fields.String,
58 'managementInterfaceId': fields.String,
59 'pkNotificationField': fields.String,
60 'alarmAdditionalFields': fields.String,
64 alarm_dictionary = api_ims_inventory_v1.model(
68 'alarmDictionaryVersion': fields.String,
69 'alarmDictionarySchemaVersion': fields.String,
70 'entityType': fields.String,
71 'vendor': fields.String,
72 'managementInterfaceId': fields.String,
73 'pkNotificationField': fields.String,
74 # 'alarmDefinition': fields.String,
75 'alarmDefinition': fields.List(fields.Nested(alarm_definition),
76 attribute='alarmDefinition'),
80 resource_type_get = api_ims_inventory_v1.model(
83 'resourceTypeId': fields.String(required=True,
84 description='Resource type ID'),
85 'name': fields.String,
86 'description': fields.String,
87 'vendor': fields.String,
88 'model': fields.String,
89 'version': fields.String,
90 'alarmDictionary': fields.Nested(alarm_dictionary, False, True),
91 # 'resourceKind': fields.String,
92 # 'resourceClass': fields.String,
93 'extensions': fields.String
95 mask='{resourceTypeId,name,description,model,vendor,version}'
99 class ResourcePoolDTO:
101 resource_pool_get = api_ims_inventory_v1.model(
102 "ResourcePoolGetDto",
104 'resourcePoolId': fields.String(required=True,
105 description='Resource pool ID'),
106 'globalLocationId': fields.String,
107 'name': fields.String,
108 'description': fields.String,
109 'oCloudId': fields.String,
110 'location': fields.String,
111 # 'resources': fields.String,
112 'extensions': fields.String
114 mask='{resourcePoolId,oCloudId,globalLocationId,name,description}'
119 resource_list = api_ims_inventory_v1.model(
122 'resourceId': fields.String(required=True,
123 description='Resource ID'),
124 'resourceTypeId': fields.String,
125 'resourcePoolId': fields.String,
126 'globalAssetId': fields.String,
127 # 'name': fields.String,
128 'parentId': fields.String,
129 'description': fields.String,
130 # 'elements': fields.String,
131 # 'extensions': fields.String
132 'extensions': Json2Dict(attribute='extensions')
133 # 'extensions': fields.Raw(attribute='extensions')
135 mask='{resourceId,resourcePoolId,resourceTypeId,description,parentId}'
138 def recursive_resource_mapping(iteration_number=2):
139 resource_json_mapping = {
140 'resourceId': fields.String(required=True,
141 description='Resource ID'),
142 'resourceTypeId': fields.String,
143 'resourcePoolId': fields.String,
144 'globalAssetId': fields.String,
145 # 'name': fields.String,
146 'parentId': fields.String,
147 'description': fields.String,
148 # 'elements': fields.String,
149 # 'extensions': fields.String
150 'extensions': Json2Dict(attribute='extensions')
151 # 'extensions': fields.Raw(attribute='extensions')
154 resource_json_mapping['elements'] = fields.List(
155 fields.Nested(ResourceDTO.recursive_resource_mapping(
156 iteration_number-1)), attribute='children')
157 return api_ims_inventory_v1.model(
158 'ResourceGetDto' + str(iteration_number), resource_json_mapping,
159 mask='{resourceId,resourcePoolId,resourceTypeId,description,' +
163 class DeploymentManagerDTO:
165 deployment_manager_list = api_ims_inventory_v1.model(
166 "DeploymentManagerListDto",
168 'deploymentManagerId': fields.String(
170 description='Deployment manager ID'),
171 'name': fields.String,
172 'description': fields.String,
173 'oCloudId': fields.String,
174 'serviceUri': fields.String(attribute='serviceUri'),
175 # 'deploymentManagementServiceEndpoint': fields.String(
176 # attribute='serviceUri'),
177 # 'supportedLocations': fields.String,
178 # 'capabilities': fields.String,
179 # 'capacity': fields.String,
180 'profileSupportList': fields.List(
182 description='Profile support list, use default for the return \
184 'extensions': fields.String
186 mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' + \
187 'profileSupportList}'
190 profile = api_ims_inventory_v1.model("DeploymentManagerGetDtoProfile", {
191 'cluster_api_endpoint': fields.String(
192 attribute='cluster_api_endpoint'),
193 'cluster_ca_cert': fields.String(attribute='cluster_ca_cert'),
194 'admin_user': fields.String(attribute='admin_user'),
195 'admin_client_cert': fields.String(attribute='admin_client_cert'),
196 'admin_client_key': fields.String(attribute='admin_client_key'),
197 # 'kube_config_file': fields.String(attribute='kube_config_file')
198 'helmcli_host_with_port': fields.String(
199 attribute='helmcli_host_with_port'),
200 'helmcli_username': fields.String(attribute='helmcli_username'),
201 'helmcli_password': fields.String(attribute='helmcli_password'),
202 'helmcli_kubeconfig': fields.String(attribute='helmcli_kubeconfig'),
205 extensions = api_ims_inventory_v1.model("DeploymentManagerExtensions", {
206 'profileName': fields.String,
207 'profileData': fields.Nested(profile, False, True),
210 deployment_manager_get = api_ims_inventory_v1.model(
211 "DeploymentManagerGetDto",
213 'deploymentManagerId': fields.String(
215 description='Deployment manager ID'),
216 'name': fields.String,
217 'description': fields.String,
218 'oCloudId': fields.String,
219 'serviceUri': fields.String(attribute='serviceUri'),
220 # 'deploymentManagementServiceEndpoint': fields.String(
221 # attribute='serviceUri'),
222 # 'supportedLocations': fields.String,
223 # 'capabilities': fields.String,
224 # 'capacity': fields.String,
225 'extensions': fields.Nested(extensions, True, True)
227 mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' +\
228 'extensions/profileName,extensions/profileData}'
232 class SubscriptionDTO:
234 subscription_get = api_ims_inventory_v1.model(
235 "SubscriptionGetDto",
237 'subscriptionId': fields.String(required=True,
238 description='Subscription ID'),
239 'callback': fields.String,
240 'consumerSubscriptionId': fields.String,
241 'filter': fields.String,
243 mask='{subscriptionId,callback}'
246 subscription_create = api_ims_inventory_v1.model(
247 "SubscriptionCreateDto",
249 'callback': fields.String(
250 required=True, description='Subscription callback address'),
251 'consumerSubscriptionId': fields.String,
252 'filter': fields.String,