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