X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=o2dms%2Fservice%2Fnfdeployment_handler.py;h=665e03e92d9c651ab9e6f9dd07e0addc67b6eefd;hb=5143e92a36bd2142e04d0d80dbc60d68c3da03d7;hp=e960792854db3d1d9609e47c24dbb664e11457f4;hpb=d14329a57d8d01d443e4158fa5030a5b5ada4060;p=pti%2Fo2.git diff --git a/o2dms/service/nfdeployment_handler.py b/o2dms/service/nfdeployment_handler.py index e960792..665e03e 100644 --- a/o2dms/service/nfdeployment_handler.py +++ b/o2dms/service/nfdeployment_handler.py @@ -20,6 +20,7 @@ from o2dms.domain.dms import NfDeployment, NfDeploymentDesc from o2dms.domain import commands from typing import Callable +from o2dms.domain.exceptions import NfdeploymentNotFoundError from o2dms.domain import events from o2common.service.unit_of_work import AbstractUnitOfWork from helm_sdk import Helm @@ -52,19 +53,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: @@ -74,15 +83,19 @@ def handle_nfdeployment_statechanged( # retry 10 seconds -@retry(tries=20, max_delay=10000) +@retry( + (NfdeploymentNotFoundError), + tries=100, + delay=2, max_delay=10000, backoff=1) def _retry_get_nfdeployment( cmd: commands.InstallNfDeployment, uow: AbstractUnitOfWork): nfdeployment: NfDeployment = uow.nfdeployments.get( cmd.NfDeploymentId) if nfdeployment is None: - raise Exception("Cannot find NfDeployment: {}".format( - cmd.NfDeploymentId)) + raise NfdeploymentNotFoundError( + "Cannot find NfDeployment: {}".format( + cmd.NfDeploymentId)) return nfdeployment @@ -105,6 +118,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 +168,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 +198,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 +216,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()