Convert file endlines to Unix (LF)
[pti/o2.git] / o2dms / api / dms_lcm_nfdeployment.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 sqlalchemy import select
16 import uuid
17 from o2dms.domain.states import NfDeploymentState
18 from o2common.service import messagebus
19 from o2common.service import unit_of_work
20 from o2dms.adapter.orm import nfDeployment
21 from o2dms.api.dms_dto import DmsLcmNfDeploymentDTO
22 from o2dms.domain.dms import NfDeployment
23 from o2common.helper import o2logging
24 logger = o2logging.get_logger(__name__)
25
26
27 def lcm_nfdeployment_list(
28         deploymentManagerID: str, uow: unit_of_work.AbstractUnitOfWork):
29     with uow:
30         res = uow.session.execute(select(nfDeployment).where(
31             nfDeployment.c.deploymentManagerId == deploymentManagerID))
32     return [dict(r) for r in res]
33
34
35 def lcm_nfdeployment_one(
36         nfdeploymentid: str, uow: unit_of_work.AbstractUnitOfWork):
37     with uow:
38         res = uow.session.execute(select(nfDeployment).where(
39             nfDeployment.c.id == nfdeploymentid))
40         first = res.first()
41     return None if first is None else dict(first)
42
43
44 def lcm_nfdeployment_create(
45         deploymentManagerId: str,
46         input: DmsLcmNfDeploymentDTO.
47         NfDeployment_create,
48         bus: messagebus.MessageBus):
49
50     uow = bus.uow
51     id = str(uuid.uuid4())
52     with uow:
53         _check_duplication(input, uow)
54         _check_dependencies(input, uow)
55         entity = NfDeployment(
56             id, input['name'], deploymentManagerId, input['description'],
57             input['descriptorId'], input['parentDeploymentId'])
58         uow.nfdeployments.add(entity)
59         # entity.transit_state(NfDeploymentState.NotInstalled)
60
61         # to be refactor later according to O2 DMS API design
62         entity.transit_state(NfDeploymentState.Installing)
63         uow.commit()
64     _handle_events(bus)
65
66     return id
67
68
69 def lcm_nfdeployment_update(
70         nfdeploymentid: str,
71         input: DmsLcmNfDeploymentDTO.NfDeployment_update,
72         bus: messagebus.MessageBus):
73
74     uow = bus.uow
75     with uow:
76         entity: NfDeployment = uow.nfdeployments.get(nfdeploymentid)
77         entity.name = input['name']
78         entity.description = input['description']
79         entity.outputParams = input['parentDeploymentId']
80         entity.transit_state(NfDeploymentState.Updating)
81         uow.commit()
82     _handle_events(bus)
83     return True
84
85
86 def _handle_events(bus: messagebus.MessageBus):
87     # handle events
88     events = bus.uow.collect_new_events()
89     for event in events:
90         bus.handle(event)
91     return True
92
93
94 def lcm_nfdeployment_uninstall(
95         nfdeploymentid: str,
96         bus: messagebus.MessageBus):
97
98     uow = bus.uow
99     with uow:
100         entity: NfDeployment = uow.nfdeployments.get(nfdeploymentid)
101         if not entity:
102             pass
103         elif entity.status == NfDeploymentState.Initial:
104             bus.uow.nfdeployments.delete(nfdeploymentid)
105         # elif entity.status == NfDeploymentState.NotInstalled:
106         #     bus.uow.nfdeployments.delete(nfdeploymentid)
107         elif entity.status == NfDeploymentState.Installing:
108             entity.transit_state(NfDeploymentState.Uninstalling)
109         elif entity.status == NfDeploymentState.Installed:
110             entity.transit_state(NfDeploymentState.Uninstalling)
111         elif entity.status == NfDeploymentState.Updating:
112             entity.transit_state(NfDeploymentState.Uninstalling)
113         elif entity.status == NfDeploymentState.Uninstalling:
114             pass
115         elif entity.status == NfDeploymentState.Abnormal:
116             bus.uow.nfdeployments.delete(nfdeploymentid)
117         else:
118             entity.transit_state(NfDeploymentState.Abnormal)
119         uow.commit()
120     _handle_events(bus)
121     return True
122
123
124 # def lcm_nfdeployment_delete(
125 #         nfdeploymentid: str,
126 #         bus: messagebus.MessageBus):
127
128 #     uow = bus.uow
129 #     with uow:
130 #         entity = uow.nfdeployments.get(nfdeploymentid)
131 #         if entity.status != NfDeploymentState.Initial:
132 #             raise Exception(
133 #                 "NfDeployment {} is not in status to delete".format(
134 #                     nfdeploymentid))
135 #         uow.nfdeployments.delete(nfdeploymentid)
136 #         entity.transit_state(NfDeploymentState.Deleting)
137 #         uow.commit()
138 #     return True
139
140
141 def _check_duplication(
142         input: DmsLcmNfDeploymentDTO,
143         uow: unit_of_work.AbstractUnitOfWork):
144     name = input['name']
145     descriptorId = input['descriptorId']
146     if uow.nfdeployments.count(name=name) > 0:
147         raise Exception(
148             "NfDeployment with name {} exists already".format(name))
149     if uow.nfdeployments.count(descriptorId=descriptorId) > 0:
150         raise Exception(
151             "NfDeployment with descriptorId {} exists already".format(
152                 descriptorId))
153
154
155 def _check_dependencies(
156         input: DmsLcmNfDeploymentDTO,
157         uow: unit_of_work.AbstractUnitOfWork):
158     descriptorId = input['descriptorId']
159     if uow.nfdeployment_descs.count(id=descriptorId) == 0:
160         raise Exception(
161             "NfDeploymentDescriptor with id {} does not exist".format(
162                 descriptorId))