From: Bin Yang Date: Sat, 22 Jan 2022 10:35:12 +0000 (+0800) Subject: Fix nfdeployment uninstall issue X-Git-Tag: 2.0.0-rc1~59 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=a6392b46c7b808b8adeede97c4dd69c5032e0d11;p=pti%2Fo2.git Fix nfdeployment uninstall issue Signed-off-by: Bin Yang Change-Id: I2c4f459566eea539c8f011d490dec68217bd446f --- diff --git a/o2dms/api/dms_lcm_nfdeployment.py b/o2dms/api/dms_lcm_nfdeployment.py index 97eb12a..ef6cb8c 100644 --- a/o2dms/api/dms_lcm_nfdeployment.py +++ b/o2dms/api/dms_lcm_nfdeployment.py @@ -56,7 +56,7 @@ def lcm_nfdeployment_create( id, input['name'], deploymentManagerId, input['description'], input['descriptorId'], input['parentDeploymentId']) uow.nfdeployments.add(entity) - entity.transit_state(NfDeploymentState.NotInstalled) + # entity.transit_state(NfDeploymentState.NotInstalled) # to be refactor later according to O2 DMS API design entity.transit_state(NfDeploymentState.Installing) @@ -98,8 +98,20 @@ def lcm_nfdeployment_uninstall( uow = bus.uow with uow: entity: NfDeployment = uow.nfdeployments.get(nfdeploymentid) - if entity.status == NfDeploymentState.Installed: + if not entity: + pass + elif entity.status == NfDeploymentState.Initial: + bus.uow.nfdeployments.delete(nfdeploymentid) + # elif entity.status == NfDeploymentState.NotInstalled: + # bus.uow.nfdeployments.delete(nfdeploymentid) + elif entity.status == NfDeploymentState.Installing: + entity.transit_state(NfDeploymentState.Uninstalling) + elif entity.status == NfDeploymentState.Installed: + entity.transit_state(NfDeploymentState.Uninstalling) + elif entity.status == NfDeploymentState.Updating: entity.transit_state(NfDeploymentState.Uninstalling) + elif entity.status == NfDeploymentState.Uninstalling: + pass elif entity.status == NfDeploymentState.Abnormal: bus.uow.nfdeployments.delete(nfdeploymentid) else: @@ -121,7 +133,7 @@ def lcm_nfdeployment_uninstall( # "NfDeployment {} is not in status to delete".format( # nfdeploymentid)) # uow.nfdeployments.delete(nfdeploymentid) -# entity.transit_state(NfDeploymentState.Deleted) +# entity.transit_state(NfDeploymentState.Deleting) # uow.commit() # return True diff --git a/o2dms/domain/dms.py b/o2dms/domain/dms.py index 3555e1c..949f06c 100644 --- a/o2dms/domain/dms.py +++ b/o2dms/domain/dms.py @@ -13,6 +13,7 @@ # limitations under the License. from __future__ import annotations +# from os import stat from o2dms.domain import events from o2dms.domain.states import NfDeploymentState @@ -53,6 +54,10 @@ class NfDeployment(AgRoot, Serializer): def transit_state(self, state: NfDeploymentState): if (self.status != state): self._append_event(self.status, state) + # self.status = state + + def set_state(self, state: NfDeploymentState): + if (self.status != state): self.status = state def _append_event(self, fromState, toState): diff --git a/o2dms/domain/states.py b/o2dms/domain/states.py index 3f16832..1c98d49 100644 --- a/o2dms/domain/states.py +++ b/o2dms/domain/states.py @@ -20,10 +20,11 @@ from dataclasses import dataclass @dataclass class NfDeploymentState(): Initial = 0 - NotInstalled = 1 + # NotInstalled = 1 Installing = 2 Installed = 3 Updating = 4 Uninstalling = 5 Abnormal = 6 Deleted = 7 + # Aborting = 8 diff --git a/o2dms/service/nfdeployment_handler.py b/o2dms/service/nfdeployment_handler.py index e960792..c6a40ff 100644 --- a/o2dms/service/nfdeployment_handler.py +++ b/o2dms/service/nfdeployment_handler.py @@ -52,19 +52,27 @@ def handle_nfdeployment_statechanged( uow: AbstractUnitOfWork ): if cmd.FromState == NfDeploymentState.Initial: - if cmd.ToState == NfDeploymentState.NotInstalled: + if cmd.ToState == NfDeploymentState.Installing: cmd2 = commands.InstallNfDeployment(cmd.NfDeploymentId) install_nfdeployment(cmd2, uow) else: logger.debug("Not insterested state change: {}".format(cmd)) - elif cmd.FromState == NfDeploymentState.Installed: + elif cmd.FromState == NfDeploymentState.Installed \ + or cmd.FromState == NfDeploymentState.Installing \ + or cmd.FromState == NfDeploymentState.Updating \ + or cmd.FromState == NfDeploymentState.Abnormal: + if cmd.ToState == NfDeploymentState.Uninstalling: cmd2 = commands.UninstallNfDeployment(cmd.NfDeploymentId) uninstall_nfdeployment(cmd2, uow) else: logger.debug("Not insterested state change: {}".format(cmd)) - elif cmd.FromState == NfDeploymentState.NotInstalled: - if cmd.ToState == NfDeploymentState.Initial: + elif cmd.FromState == NfDeploymentState.Initial \ + or cmd.FromState == NfDeploymentState.Abnormal: + + if cmd.ToState == NfDeploymentState.Deleting: + cmd2 = commands.UninstallNfDeployment(cmd.NfDeploymentId) + uninstall_nfdeployment(cmd2, uow) cmd2 = commands.DeleteNfDeployment(cmd.NfDeploymentId) delete_nfdeployment(cmd2, uow) else: @@ -105,6 +113,8 @@ def install_nfdeployment( nfdeployment.descriptorId, nfdeployment.id )) + nfdeployment.set_state(NfDeploymentState.Installing) + # helm repo add repourl = desc.artifactRepoUrl helm = Helm(logger, LOCAL_HELM_BIN, environment_variables={}) @@ -153,7 +163,9 @@ def install_nfdeployment( # in case success with uow: entity: NfDeployment = uow.nfdeployments.get(cmd.NfDeploymentId) - entity.transit_state(NfDeploymentState.Installed) + if entity: + entity.set_state(NfDeploymentState.Installed) + entity.transit_state(NfDeploymentState.Installed) uow.commit() @@ -181,6 +193,7 @@ def uninstall_nfdeployment( nfdeployment.descriptorId, nfdeployment.id )) + nfdeployment.set_state(NfDeploymentState.Uninstalling) helm = Helm(logger, LOCAL_HELM_BIN, environment_variables={}) logger.debug('Try to helm del {}'.format( @@ -198,7 +211,8 @@ def uninstall_nfdeployment( with uow: entity: NfDeployment = uow.nfdeployments.get(cmd.NfDeploymentId) - entity.transit_state(NfDeploymentState.Initial) + if entity: + entity.transit_state(NfDeploymentState.Initial) # uow.nfdeployments.update( # cmd.NfDeploymentId, status=NfDeploymentState.Initial) uow.commit() diff --git a/o2ims/domain/subscription_obj.py b/o2ims/domain/subscription_obj.py index 1746ad9..8a3a607 100644 --- a/o2ims/domain/subscription_obj.py +++ b/o2ims/domain/subscription_obj.py @@ -54,7 +54,7 @@ class RegistrationMessage(Serializer): @dataclass class EventState(): Initial = 0 - NotInstalled = 1 + # NotInstalled = 1 Installing = 2 Installed = 3 Updating = 4