X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=o2dms%2Fservice%2Fnfdeployment_handler.py;h=0fdd00a6cf90d9a28a124905ed5e76cf93819276;hb=2ec12b6c645d9537c0aa4e508ea6885752a55580;hp=e960792854db3d1d9609e47c24dbb664e11457f4;hpb=d14329a57d8d01d443e4158fa5030a5b5ada4060;p=pti%2Fo2.git diff --git a/o2dms/service/nfdeployment_handler.py b/o2dms/service/nfdeployment_handler.py index e960792..0fdd00a 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,28 @@ 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) + elif cmd.ToState == NfDeploymentState.Deleting: + cmd2 = commands.DeleteNfDeployment(cmd.NfDeploymentId) + delete_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.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 +84,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 +119,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 +169,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 +199,12 @@ def uninstall_nfdeployment( nfdeployment.descriptorId, nfdeployment.id )) + with uow: + entity: NfDeployment = uow.nfdeployments.get(cmd.NfDeploymentId) + if entity: + entity.set_state(NfDeploymentState.Uninstalling) + uow.commit() + helm = Helm(logger, LOCAL_HELM_BIN, environment_variables={}) logger.debug('Try to helm del {}'.format( @@ -198,7 +222,9 @@ def uninstall_nfdeployment( with uow: entity: NfDeployment = uow.nfdeployments.get(cmd.NfDeploymentId) - entity.transit_state(NfDeploymentState.Initial) + if entity: + entity.set_state(NfDeploymentState.Initial) + entity.transit_state(NfDeploymentState.Deleting) # uow.nfdeployments.update( # cmd.NfDeploymentId, status=NfDeploymentState.Initial) uow.commit()