Merge "Fix INF-344 resourceType fields on alarmDictionary"
[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(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
40         },
41         mask='{oCloudId,globalcloudId,name,description,serviceUri}'
42     )
43
44
45 class ResourceTypeDTO:
46     alarm_definition = api_ims_inventory_v1.model(
47         "AlarmDefinitionDto",
48         {
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,
59         }
60
61     )
62     alarm_dictionary = api_ims_inventory_v1.model(
63         "AlarmDictionaryDto",
64         {
65             'id': fields.String,
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'),
75         }
76     )
77
78     resource_type_get = api_ims_inventory_v1.model(
79         "ResourceTypeGetDto",
80         {
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
92         },
93         mask='{resourceTypeId,name,description,model,vendor,version}'
94     )
95
96
97 class ResourcePoolDTO:
98
99     resource_pool_get = api_ims_inventory_v1.model(
100         "ResourcePoolGetDto",
101         {
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
111         },
112         mask='{resourcePoolId,oCloudId,globalLocationId,name,description}'
113     )
114
115
116 class ResourceDTO:
117     resource_list = api_ims_inventory_v1.model(
118         "ResourceListDto",
119         {
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')
132         },
133         mask='{resourceId,resourcePoolId,resourceTypeId,description,parentId}'
134     )
135
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')
150         }
151         if iteration_number:
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,' +
158             'parentId}')
159
160
161 class DeploymentManagerDTO:
162
163     deployment_manager_list = api_ims_inventory_v1.model(
164         "DeploymentManagerListDto",
165         {
166             'deploymentManagerId': fields.String(
167                 required=True,
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(
179                 fields.String,
180                 description='Profile support list, use default for the return \
181                      endpoint'),
182             'extensions': fields.String
183         },
184         mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' + \
185         'profileSupportList}'
186     )
187
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'),
201     })
202
203     extensions = api_ims_inventory_v1.model("DeploymentManagerExtensions", {
204         'profileName': fields.String,
205         'profileData': fields.Nested(profile, False, True),
206     })
207
208     deployment_manager_get = api_ims_inventory_v1.model(
209         "DeploymentManagerGetDto",
210         {
211             'deploymentManagerId': fields.String(
212                 required=True,
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)
224         },
225         mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' +\
226         'extensions/profileName,extensions/profileData}'
227     )
228
229
230 class SubscriptionDTO:
231
232     subscription_get = api_ims_inventory_v1.model(
233         "SubscriptionGetDto",
234         {
235             'subscriptionId': fields.String(required=True,
236                                             description='Subscription ID'),
237             'callback': fields.String,
238             'consumerSubscriptionId': fields.String,
239             'filter': fields.String,
240         },
241         mask='{subscriptionId,callback}'
242     )
243
244     subscription_create = api_ims_inventory_v1.model(
245         "SubscriptionCreateDto",
246         {
247             'callback': fields.String(
248                 required=True, description='Subscription callback address'),
249             'consumerSubscriptionId': fields.String,
250             'filter': fields.String,
251         }
252     )