ff1cd27b54f4f44a074e34281aa12c2d95da0930
[pti/o2.git] / o2ims / adapter / ocloud_repository.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 typing import List
16
17 from o2ims.domain import ocloud, subscription_obj, configuration_obj
18 from o2ims.domain.ocloud_repo import OcloudRepository, ResourceTypeRepository,\
19     ResourcePoolRepository, ResourceRepository, DeploymentManagerRepository
20 from o2ims.domain.subscription_repo import SubscriptionRepository
21 from o2ims.domain.configuration_repo import ConfigurationRepository
22 from o2common.helper import o2logging
23 logger = o2logging.get_logger(__name__)
24
25
26 class OcloudSqlAlchemyRepository(OcloudRepository):
27     def __init__(self, session):
28         super().__init__()
29         self.session = session
30
31     def _add(self, ocloud: ocloud.Ocloud):
32         self.session.add(ocloud)
33         # self.session.add_all(ocloud.deploymentManagers)
34
35     def _get(self, ocloud_id) -> ocloud.Ocloud:
36         return self.session.query(ocloud.Ocloud).filter_by(
37             oCloudId=ocloud_id).first()
38
39     def _list(self) -> List[ocloud.Ocloud]:
40         return self.session.query(ocloud.Ocloud)
41
42     def _update(self, ocloud: ocloud.Ocloud):
43         self.session.add(ocloud)
44
45
46 class ResouceTypeSqlAlchemyRepository(ResourceTypeRepository):
47     def __init__(self, session):
48         super().__init__()
49         self.session = session
50
51     def _add(self, resourceType: ocloud.ResourceType):
52         self.session.add(resourceType)
53
54     def _get(self, resource_type_id) -> ocloud.ResourceType:
55         return self.session.query(ocloud.ResourceType).filter_by(
56             resourceTypeId=resource_type_id).first()
57
58     def _get_by_name(self, resource_type_name) -> ocloud.ResourceType:
59         return self.session.query(ocloud.ResourceType).filter_by(
60             name=resource_type_name).first()
61
62     def _list(self) -> List[ocloud.ResourceType]:
63         return self.session.query(ocloud.ResourceType)
64
65     def _update(self, resourceType: ocloud.ResourceType):
66         self.session.add(resourceType)
67
68
69 class ResourcePoolSqlAlchemyRepository(ResourcePoolRepository):
70     def __init__(self, session):
71         super().__init__()
72         self.session = session
73
74     def _add(self, resourcePool: ocloud.ResourcePool):
75         self.session.add(resourcePool)
76
77     def _get(self, resource_pool_id) -> ocloud.ResourcePool:
78         return self.session.query(ocloud.ResourcePool).filter_by(
79             resourcePoolId=resource_pool_id).first()
80
81     def _list(self) -> List[ocloud.ResourcePool]:
82         return self.session.query(ocloud.ResourcePool)
83
84     def _update(self, resourcePool: ocloud.ResourcePool):
85         self.session.add(resourcePool)
86
87
88 class ResourceSqlAlchemyRepository(ResourceRepository):
89     def __init__(self, session):
90         super().__init__()
91         self.session = session
92
93     def _add(self, resource: ocloud.Resource):
94         self.session.add(resource)
95
96     def _get(self, resource_id) -> ocloud.Resource:
97         # return self.session.query(ocloud.Resource).filter_by(
98         #     resourceId=resource_id).first()
99         # topq = uow.session.query(orm.resource).filter(
100         #     orm.resource.c.resourceId == resourceId).\
101         #     cte('cte', recursive=True)
102         # bootomq = uow.session.query(orm.resource).join(
103         #     topq, orm.resource.c.parentId == topq.c.resourceId)
104         # res = uow.session.query(topq.union(bootomq))
105         def recursive(id):
106             res = self.session.query(ocloud.Resource).filter_by(
107                 resourceId=id).first()
108             if res is not None:
109                 query = self.session.query(ocloud.Resource).filter_by(
110                     parentId=res.resourceId)
111                 children = []
112                 for r in query:
113                     child = recursive(r.resourceId)
114                     children.append(child)
115                 res.set_children(children)
116             return res
117         return recursive(resource_id)
118
119     def _list(self, resourcepool_id, **kwargs) -> List[ocloud.Resource]:
120         return self.session.query(ocloud.Resource).filter_by(
121             resourcePoolId=resourcepool_id, **kwargs)
122
123     def _update(self, resource: ocloud.Resource):
124         self.session.add(resource)
125
126
127 class DeploymentManagerSqlAlchemyRepository(DeploymentManagerRepository):
128     def __init__(self, session):
129         super().__init__()
130         self.session = session
131
132     def _add(self, deployment_manager: ocloud.DeploymentManager):
133         self.session.add(deployment_manager)
134
135     def _get(self, deployment_manager_id) -> ocloud.DeploymentManager:
136         return self.session.query(ocloud.DeploymentManager).filter_by(
137             deploymentManagerId=deployment_manager_id).first()
138
139     def _list(self) -> List[ocloud.DeploymentManager]:
140         return self.session.query(ocloud.DeploymentManager)
141
142     def _update(self, deployment_manager: ocloud.DeploymentManager):
143         self.session.add(deployment_manager)
144
145
146 class SubscriptionSqlAlchemyRepository(SubscriptionRepository):
147     def __init__(self, session):
148         super().__init__()
149         self.session = session
150
151     def _add(self, subscription: subscription_obj.Subscription):
152         self.session.add(subscription)
153
154     def _get(self, subscription_id) -> subscription_obj.Subscription:
155         return self.session.query(subscription_obj.Subscription).filter_by(
156             subscriptionId=subscription_id).first()
157
158     def _list(self) -> List[subscription_obj.Subscription]:
159         return self.session.query(subscription_obj.Subscription)
160
161     def _update(self, subscription: subscription_obj.Subscription):
162         self.session.add(subscription)
163
164     def _delete(self, subscription_id):
165         self.session.query(subscription_obj.Subscription).filter_by(
166             subscriptionId=subscription_id).delete()
167
168
169 class ConfigurationSqlAlchemyRepository(ConfigurationRepository):
170     def __init__(self, session):
171         super().__init__()
172         self.session = session
173
174     def _add(self, configuration: configuration_obj.Configuration):
175         self.session.add(configuration)
176
177     def _get(self, configuration_id) -> configuration_obj.Configuration:
178         return self.session.query(configuration_obj.Configuration).filter_by(
179             configurationId=configuration_id).first()
180
181     def _list(self) -> List[configuration_obj.Configuration]:
182         return self.session.query(configuration_obj.Configuration)
183
184     def _update(self, configuration: configuration_obj.Configuration):
185         self.session.add(configuration)
186
187     def _delete(self, configuration_id):
188         self.session.query(configuration_obj.Configuration).filter_by(
189             configurationId=configuration_id).delete()