Fix nfdeployment uninstall issue 99/7599/1
authorBin Yang <bin.yang@windriver.com>
Sat, 22 Jan 2022 10:35:12 +0000 (18:35 +0800)
committerBin Yang <bin.yang@windriver.com>
Sat, 22 Jan 2022 11:19:16 +0000 (19:19 +0800)
Signed-off-by: Bin Yang <bin.yang@windriver.com>
Change-Id: I2c4f459566eea539c8f011d490dec68217bd446f

o2dms/api/dms_lcm_nfdeployment.py
o2dms/domain/dms.py
o2dms/domain/states.py
o2dms/service/nfdeployment_handler.py
o2ims/domain/subscription_obj.py

index 97eb12a..ef6cb8c 100644 (file)
@@ -56,7 +56,7 @@ def lcm_nfdeployment_create(
             id, input['name'], deploymentManagerId, input['description'],\r
             input['descriptorId'], input['parentDeploymentId'])\r
         uow.nfdeployments.add(entity)\r
-        entity.transit_state(NfDeploymentState.NotInstalled)\r
+        entity.transit_state(NfDeploymentState.NotInstalled)\r
 \r
         # to be refactor later according to O2 DMS API design\r
         entity.transit_state(NfDeploymentState.Installing)\r
@@ -98,8 +98,20 @@ def lcm_nfdeployment_uninstall(
     uow = bus.uow\r
     with uow:\r
         entity: NfDeployment = uow.nfdeployments.get(nfdeploymentid)\r
-        if entity.status == NfDeploymentState.Installed:\r
+        if not entity:\r
+            pass\r
+        elif entity.status == NfDeploymentState.Initial:\r
+            bus.uow.nfdeployments.delete(nfdeploymentid)\r
+        # elif entity.status == NfDeploymentState.NotInstalled:\r
+        #     bus.uow.nfdeployments.delete(nfdeploymentid)\r
+        elif entity.status == NfDeploymentState.Installing:\r
+            entity.transit_state(NfDeploymentState.Uninstalling)\r
+        elif entity.status == NfDeploymentState.Installed:\r
+            entity.transit_state(NfDeploymentState.Uninstalling)\r
+        elif entity.status == NfDeploymentState.Updating:\r
             entity.transit_state(NfDeploymentState.Uninstalling)\r
+        elif entity.status == NfDeploymentState.Uninstalling:\r
+            pass\r
         elif entity.status == NfDeploymentState.Abnormal:\r
             bus.uow.nfdeployments.delete(nfdeploymentid)\r
         else:\r
@@ -121,7 +133,7 @@ def lcm_nfdeployment_uninstall(
 #                 "NfDeployment {} is not in status to delete".format(\r
 #                     nfdeploymentid))\r
 #         uow.nfdeployments.delete(nfdeploymentid)\r
-#         entity.transit_state(NfDeploymentState.Deleted)\r
+#         entity.transit_state(NfDeploymentState.Deleting)\r
 #         uow.commit()\r
 #     return True\r
 \r
index 3555e1c..949f06c 100644 (file)
@@ -13,6 +13,7 @@
 #  limitations under the License.\r
 \r
 from __future__ import annotations\r
+# from os import stat\r
 from o2dms.domain import events\r
 from o2dms.domain.states import NfDeploymentState\r
 \r
@@ -53,6 +54,10 @@ class NfDeployment(AgRoot, Serializer):
     def transit_state(self, state: NfDeploymentState):\r
         if (self.status != state):\r
             self._append_event(self.status, state)\r
+            # self.status = state\r
+\r
+    def set_state(self, state: NfDeploymentState):\r
+        if (self.status != state):\r
             self.status = state\r
 \r
     def _append_event(self, fromState, toState):\r
index 3f16832..1c98d49 100644 (file)
@@ -20,10 +20,11 @@ from dataclasses import dataclass
 @dataclass\r
 class NfDeploymentState():\r
     Initial = 0\r
-    NotInstalled = 1\r
+    NotInstalled = 1\r
     Installing = 2\r
     Installed = 3\r
     Updating = 4\r
     Uninstalling = 5\r
     Abnormal = 6\r
     Deleted = 7\r
+    # Aborting = 8\r
index e960792..c6a40ff 100644 (file)
@@ -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()
index 1746ad9..8a3a607 100644 (file)
@@ -54,7 +54,7 @@ class RegistrationMessage(Serializer):
 @dataclass
 class EventState():
     Initial = 0
-    NotInstalled = 1
+    NotInstalled = 1
     Installing = 2
     Installed = 3
     Updating = 4