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
19
20 class OcloudDTO:
21
22     ocloud = api_ims_inventory_v1.model(
23         "OcloudDto",
24         {
25             'oCloudId': fields.String(required=True),
26             'globalcloudId': fields.String(attribute='globalCloudId'),
27             'name': fields.String,
28             'description': fields.String,
29             'serviceUri': fields.String(attribute='serviceUri'),
30             # 'infrastructureManagementServiceEndpoint': fields.String(
31             # attribute='serviceUri'),
32             # 'infrastructureMangementServiceEndPoint': fields.String(
33             # attribute='serviceUri'),
34             # 'resourceTypes': fields.String,
35             # 'resourcePools': fields.String,
36             # 'deploymentManagers': fields.String,
37             # 'smoRegistrationService': fields.String
38             'extensions': fields.String
39         },
40         mask='{oCloudId,globalcloudId,name,description,serviceUri}'
41     )
42
43
44 class ResourceTypeDTO:
45     alarm_definition = api_ims_inventory_v1.model(
46         "AlarmDefinitionDto",
47         {
48             'alarmDefinitionId': fields.String,
49             'alarmName': fields.String,
50             'alarmLastChange': fields.String,
51             'alarmChangeType': fields.String,
52             'alarmDescription': fields.String,
53             'proposedRepairActions': fields.String,
54             'clearingType': fields.String,
55             'managementInterfaceId': fields.String,
56             'pkNotificationField': fields.String,
57             'alarmAdditionalFields': fields.String,
58         }
59
60     )
61     alarm_dictionary = api_ims_inventory_v1.model(
62         "AlarmDictionaryDto",
63         {
64             'id': fields.String,
65             'alarmDictionaryVersion': fields.String,
66             'alarmDictionarySchemaVersion': fields.String,
67             'entityType': fields.String,
68             'vendor': fields.String,
69             'managementInterfaceId': fields.String,
70             'pkNotificationField': fields.String,
71             # 'alarmDefinition': fields.String,
72             'alarmDefinition': fields.List(fields.Nested(alarm_definition),
73                                            attribute='alarmDefinition'),
74         }
75     )
76
77     resource_type_get = api_ims_inventory_v1.model(
78         "ResourceTypeGetDto",
79         {
80             'resourceTypeId': fields.String(required=True,
81                                             description='Resource type ID'),
82             'name': fields.String,
83             'description': fields.String,
84             'vendor': fields.String,
85             'model': fields.String,
86             'version': fields.String,
87             'alarmDictionary': fields.Nested(alarm_dictionary, False, True),
88             # 'resourceKind': fields.String,
89             # 'resourceClass': fields.String,
90             'extensions': fields.String
91         },
92         mask='{resourceTypeId,name,description,model,vendor,version}'
93     )
94
95
96 class ResourcePoolDTO:
97
98     resource_pool_get = api_ims_inventory_v1.model(
99         "ResourcePoolGetDto",
100         {
101             'resourcePoolId': fields.String(required=True,
102                                             description='Resource pool ID'),
103             'globalLocationId': fields.String,
104             'name': fields.String,
105             'description': fields.String,
106             'oCloudId': fields.String,
107             'location': fields.String,
108             # 'resources': fields.String,
109             'extensions': fields.String
110         },
111         mask='{resourcePoolId,oCloudId,globalLocationId,name,description}'
112     )
113
114
115 class ResourceDTO:
116     resource_list = api_ims_inventory_v1.model(
117         "ResourceListDto",
118         {
119             'resourceId': fields.String(required=True,
120                                         description='Resource ID'),
121             'resourceTypeId': fields.String,
122             'resourcePoolId': fields.String,
123             'globalAssetId': fields.String,
124             # 'name': fields.String,
125             'parentId': fields.String,
126             'description': fields.String,
127             # 'elements': fields.String,
128             'extensions': fields.String
129         },
130         mask='{resourceId,resourcePoolId,resourceTypeId,description,parentId}'
131     )
132
133     def recursive_resource_mapping(iteration_number=2):
134         resource_json_mapping = {
135             'resourceId': fields.String(required=True,
136                                         description='Resource ID'),
137             'resourceTypeId': fields.String,
138             'resourcePoolId': fields.String,
139             'globalAssetId': fields.String,
140             # 'name': fields.String,
141             'parentId': fields.String,
142             'description': fields.String,
143             # 'elements': fields.String,
144             'extensions': fields.String
145         }
146         if iteration_number:
147             resource_json_mapping['elements'] = fields.List(
148                 fields.Nested(ResourceDTO.recursive_resource_mapping(
149                     iteration_number-1)), attribute='children')
150         return api_ims_inventory_v1.model(
151             'ResourceGetDto' + str(iteration_number), resource_json_mapping,
152             mask='{resourceId,resourcePoolId,resourceTypeId,description,' +
153             'parentId}')
154
155
156 class DeploymentManagerDTO:
157
158     deployment_manager_list = api_ims_inventory_v1.model(
159         "DeploymentManagerListDto",
160         {
161             'deploymentManagerId': fields.String(
162                 required=True,
163                 description='Deployment manager ID'),
164             'name': fields.String,
165             'description': fields.String,
166             'oCloudId': fields.String,
167             'serviceUri': fields.String(attribute='serviceUri'),
168             # 'deploymentManagementServiceEndpoint': fields.String(
169             # attribute='serviceUri'),
170             # 'supportedLocations': fields.String,
171             # 'capabilities': fields.String,
172             # 'capacity': fields.String,
173             'profileSupportList': fields.List(
174                 fields.String,
175                 description='Profile support list, use default for the return \
176                      endpoint'),
177             'extensions': fields.String
178         },
179         mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' + \
180         'profileSupportList}'
181     )
182
183     profile = api_ims_inventory_v1.model("DeploymentManagerGetDtoProfile", {
184         'cluster_api_endpoint': fields.String(
185             attribute='cluster_api_endpoint'),
186         'cluster_ca_cert': fields.String(attribute='cluster_ca_cert'),
187         'admin_user': fields.String(attribute='admin_user'),
188         'admin_client_cert': fields.String(attribute='admin_client_cert'),
189         'admin_client_key': fields.String(attribute='admin_client_key'),
190         # 'kube_config_file': fields.String(attribute='kube_config_file')
191         'helmcli_host_with_port': fields.String(
192             attribute='helmcli_host_with_port'),
193         'helmcli_username': fields.String(attribute='helmcli_username'),
194         'helmcli_password': fields.String(attribute='helmcli_password'),
195         'helmcli_kubeconfig': fields.String(attribute='helmcli_kubeconfig'),
196     })
197
198     extensions = api_ims_inventory_v1.model("DeploymentManagerExtensions", {
199         'profileName': fields.String,
200         'profileData': fields.Nested(profile, False, True),
201     })
202
203     deployment_manager_get = api_ims_inventory_v1.model(
204         "DeploymentManagerGetDto",
205         {
206             'deploymentManagerId': fields.String(
207                 required=True,
208                 description='Deployment manager ID'),
209             'name': fields.String,
210             'description': fields.String,
211             'oCloudId': fields.String,
212             'serviceUri': fields.String(attribute='serviceUri'),
213             # 'deploymentManagementServiceEndpoint': fields.String(
214             # attribute='serviceUri'),
215             # 'supportedLocations': fields.String,
216             # 'capabilities': fields.String,
217             # 'capacity': fields.String,
218             'extensions': fields.Nested(extensions, True, True)
219         },
220         mask='{deploymentManagerId,name,description,oCloudId,serviceUri,' +\
221         'extensions/profileName,extensions/profileData}'
222     )
223
224
225 class SubscriptionDTO:
226
227     subscription_get = api_ims_inventory_v1.model(
228         "SubscriptionGetDto",
229         {
230             'subscriptionId': fields.String(required=True,
231                                             description='Subscription ID'),
232             'callback': fields.String,
233             'consumerSubscriptionId': fields.String,
234             'filter': fields.String,
235         },
236         mask='{subscriptionId,callback}'
237     )
238
239     subscription_create = api_ims_inventory_v1.model(
240         "SubscriptionCreateDto",
241         {
242             'callback': fields.String(
243                 required=True, description='Subscription callback address'),
244             'consumerSubscriptionId': fields.String,
245             'filter': fields.String,
246         }
247     )