df8385a3fc58bc8793aeccd4d93a15dc03a50283
[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_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,
27             'name': fields.String,
28             'description': fields.String,
29             'infrastructureManagementServiceEndpoint': fields.String,
30         }
31     )
32
33
34 class ResourceTypeDTO:
35
36     resource_type_get = api_ims_inventory_v1.model(
37         "ResourceTypeGetDto",
38         {
39             'resourceTypeId': fields.String(required=True,
40                                             description='Resource type ID'),
41             'name': fields.String,
42             'vendor': fields.String,
43             'version': fields.String,
44             'description': fields.String,
45         }
46     )
47
48
49 class ResourcePoolDTO:
50
51     resource_pool_get = api_ims_inventory_v1.model(
52         "ResourcePoolGetDto",
53         {
54             'resourcePoolId': fields.String(required=True,
55                                             description='Resource pool ID'),
56             'name': fields.String,
57             'globalLocationId': fields.String,
58             'location': fields.String,
59             'description': fields.String,
60         }
61     )
62
63
64 class ResourceDTO:
65     resource_list = api_ims_inventory_v1.model(
66         "ResourceListDto",
67         {
68             'resourceId': fields.String(required=True,
69                                         description='Resource ID'),
70             'resourceTypeId': fields.String,
71             'resourcePoolId': fields.String,
72             'name': fields.String,
73             'parentId': fields.String,
74             'description': fields.String,
75         }
76     )
77
78     def recursive_resource_mapping(iteration_number=2):
79         resource_json_mapping = {
80             'resourceId': fields.String(required=True,
81                                         description='Resource ID'),
82             'resourceTypeId': fields.String,
83             'resourcePoolId': fields.String,
84             'name': fields.String,
85             'parentId': fields.String,
86             'description': fields.String,
87             'elements': fields.String,
88         }
89         if iteration_number:
90             resource_json_mapping['children'] = fields.List(
91                 fields.Nested(ResourceDTO.recursive_resource_mapping(
92                     iteration_number-1)))
93         return api_ims_inventory_v1.model(
94             'ResourceGetDto' + str(iteration_number), resource_json_mapping)
95
96     # def _recursive_resource_mapping(self, iteration_number=2):
97     #     resource_json_mapping = {
98     #         'resourceId': fields.String(required=True,
99     #                                     description='Resource ID'),
100     #         'resourceTypeId': fields.String,
101     #         'resourcePoolId': fields.String,
102     #         'name': fields.String,
103     #         'parentId': fields.String,
104     #         'description': fields.String,
105     #     }
106     #     if iteration_number:
107     #         resource_json_mapping['children'] = fields.List(
108     #             fields.Nested(self._recursive_resource_mapping(
109     #                 iteration_number-1)))
110     #         # print(type(resource_json_mapping['children']))
111     #         if resource_json_mapping['children'] is None:
112     #             del resource_json_mapping['children']
113     #     return resource_json_mapping
114
115     # def get_resource_get(self):
116     #     return api_ims_inventory_v1.model(
117     #         'ResourceGetDto',
118     #         {
119     #             'resourceId': fields.String(required=True,
120     #                                         description='Resource ID'),
121     #             'resourceTypeId': fields.String,
122     #             'resourcePoolId': fields.String,
123     #             'name': fields.String,
124     #             'parentId': fields.String,
125     #             'description': fields.String,
126     #             'children': fields.List(fields.Nested(
127     #                 self._recursive_resource_mapping()))
128     #         }
129     #     )
130
131
132 class DeploymentManagerDTO:
133
134     deployment_manager_list = api_ims_inventory_v1.model(
135         "DeploymentManagerListDto",
136         {
137             'deploymentManagerId': fields.String(
138                 required=True,
139                 description='Deployment manager ID'),
140             'name': fields.String,
141             'description': fields.String,
142             'deploymentManagementServiceEndpoint': fields.String,
143             'supportedLocations': fields.String,
144             'capabilities': fields.String,
145             'capacity': fields.String,
146             'profileSupportList': fields.List(
147                 fields.String,
148                 description='Profile support list, use default for the return \
149                      endpoint'),
150         }
151     )
152
153     profile = api_ims_inventory_v1.model("DeploymentManagerGetDtoProfile", {
154         'cluster_api_endpoint': fields.String(
155             attributes='cluster_api_endpoint'),
156         'cluster_ca_cert': fields.String(attributes='cluster_ca_cert'),
157         'admin_user': fields.String(attributes='admin_user'),
158         'admin_client_cert': fields.String(attributes='admin_client_cert'),
159         'admin_client_key': fields.String(attributes='admin_client_key'),
160         # 'kube_config_file': fields.String(attributes='kube_config_file')
161         'helmcli_host_with_port': fields.String(
162             attributes='helmcli_host_with_port'),
163         'helmcli_username': fields.String(attributes='helmcli_username'),
164         'helmcli_password': fields.String(attributes='helmcli_password'),
165         'helmcli_kubeconfig': fields.String(attributes='helmcli_kubeconfig'),
166     })
167
168     deployment_manager_get = api_ims_inventory_v1.model(
169         "DeploymentManagerGetDto",
170         {
171             'deploymentManagerId': fields.String(
172                 required=True,
173                 description='Deployment manager ID'),
174             'name': fields.String,
175             'description': fields.String,
176             'deploymentManagementServiceEndpoint': fields.String,
177             'supportedLocations': fields.String,
178             'capabilities': fields.String,
179             'capacity': fields.String,
180             'profileName': fields.String,
181             'profileData': fields.Nested(profile, False, True),
182         }
183     )
184
185
186 class SubscriptionDTO:
187
188     subscription_get = api_ims_inventory_v1.model(
189         "SubscriptionGetDto",
190         {
191             'subscriptionId': fields.String(required=True,
192                                             description='Subscription ID'),
193             'callback': fields.String,
194             'consumerSubscriptionId': fields.String,
195             'filter': fields.String,
196         }
197     )
198
199     subscription = api_ims_inventory_v1.model(
200         "SubscriptionCreateDto",
201         {
202             'callback': fields.String(
203                 required=True, description='Subscription callback address'),
204             'consumerSubscriptionId': fields.String,
205             'filter': fields.String,
206         }
207     )
208
209     subscription_post_resp = api_ims_inventory_v1.model(
210         "SubscriptionCreatedRespDto",
211         {
212             'subscriptionId': fields.String(required=True,
213                                             description='Subscription ID'),
214         }
215     )