Fix INF-375 get default mask strip failed
[pti/o2.git] / o2ims / views / ocloud_dto.py
1 # Copyright (C) 2021 Wind River Systems, Inc.
2 #
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
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14
15 from flask_restx import fields
16
17 from o2ims.views.api_ns import api_ims_inventory as api_ims_inventory_v1
18 from o2common.views.flask_restx_fields import Json2Dict
19
20
21 class OcloudDTO:
22
23     ocloud = api_ims_inventory_v1.model(
24         "OcloudDto",
25         {
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
41         },
42         mask='{oCloudId,globalCloudId,globalcloudId,name,description,' +\
43         'serviceUri}'
44     )
45
46
47 class ResourceTypeDTO:
48     alarm_definition = api_ims_inventory_v1.model(
49         "AlarmDefinitionDto",
50         {
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,
61         }
62
63     )
64     alarm_dictionary = api_ims_inventory_v1.model(
65         "AlarmDictionaryDto",
66         {
67             'id': fields.String,
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'),
77         }
78     )
79
80     resource_type_get = api_ims_inventory_v1.model(
81         "ResourceTypeGetDto",
82         {
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
94         },
95         mask='{resourceTypeId,name,description,model,vendor,version}'
96     )
97
98
99 class ResourcePoolDTO:
100
101     resource_pool_get = api_ims_inventory_v1.model(
102         "ResourcePoolGetDto",
103         {
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
113         },
114         mask='{resourcePoolId,oCloudId,globalLocationId,name,description}'
115     )
116
117
118 class ResourceDTO:
119     resource_list = api_ims_inventory_v1.model(
120         "ResourceListDto",
121         {
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')
134         },
135         mask='{resourceId,resourcePoolId,resourceTypeId,description,parentId}'
136     )
137
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')
152         }
153         if iteration_number:
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,' +
160             'parentId}')
161
162
163 class DeploymentManagerDTO:
164
165     deployment_manager_list = api_ims_inventory_v1.model(
166         "DeploymentManagerListDto",
167         {
168             'deploymentManagerId': fields.String(
169                 required=True,
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(
181                 fields.String,
182                 description='Profile support list, use default for the return \
183                      endpoint'),
184             'extensions': fields.String
185         },
186         mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' + \
187         'profileSupportList}'
188     )
189
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'),
203     })
204
205     extensions = api_ims_inventory_v1.model("DeploymentManagerExtensions", {
206         'profileName': fields.String,
207         'profileData': fields.Nested(profile, False, True),
208     })
209
210     deployment_manager_get = api_ims_inventory_v1.model(
211         "DeploymentManagerGetDto",
212         {
213             'deploymentManagerId': fields.String(
214                 required=True,
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)
226         },
227         mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' +\
228         'extensions/profileName,extensions/profileData}'
229     )
230
231
232 class SubscriptionDTO:
233
234     subscription_get = api_ims_inventory_v1.model(
235         "SubscriptionGetDto",
236         {
237             'subscriptionId': fields.String(required=True,
238                                             description='Subscription ID'),
239             'callback': fields.String,
240             'consumerSubscriptionId': fields.String,
241             'filter': fields.String,
242         },
243         mask='{subscriptionId,callback}'
244     )
245
246     subscription_create = api_ims_inventory_v1.model(
247         "SubscriptionCreateDto",
248         {
249             'callback': fields.String(
250                 required=True, description='Subscription callback address'),
251             'consumerSubscriptionId': fields.String,
252             'filter': fields.String,
253         }
254     )