Check force delete option and delete from DB 03/15003/2
authoryshah <shahithya.y@tataelxsi.co.in>
Fri, 28 Feb 2025 09:01:51 +0000 (09:01 +0000)
committeryshah <shahithya.y@tataelxsi.co.in>
Thu, 6 Mar 2025 15:03:21 +0000 (15:03 +0000)
Change-Id: I74fb2d7bf600b732900f6757862595e49b4ee023
Signed-off-by: yshah <shahithya.y@tataelxsi.co.in>
osm_lcm/k8s.py

index 58337ac..104515b 100644 (file)
@@ -267,6 +267,17 @@ class GitOpsLcm(LcmBase):
         else:
             return await self.check_dummy_operation(op_id, op_params, content)
 
+    def check_force_delete_and_delete_from_db(
+        self, _id, workflow_status, resource_status, force
+    ):
+        self.logger.info(
+            f" Force: {force} Workflow status: {workflow_status} Resource Status: {resource_status}"
+        )
+        if force and (not workflow_status or not resource_status):
+            self.db.del_one(self.db_collection, {"_id": _id})
+            return True
+        return False
+
     def decrypted_copy(self, content, fields=["age_pubkey", "age_privkey"]):
         # This deep copy is intended to be passed to ODU workflows.
         content_copy = copy.deepcopy(content)
@@ -658,6 +669,14 @@ class ClusterLcm(GitOpsLcm):
         db_cluster["current_operation"] = None
         self.db.set_one("clusters", {"_id": db_cluster["_id"]}, db_cluster)
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                cluster_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         # To delete it from DB
         if db_cluster["state"] == "DELETED":
             self.delete_cluster(db_cluster)
@@ -1533,6 +1552,15 @@ class K8sAppLcm(GitOpsLcm):
                 "delete_profile", op_id, op_params, content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                profile_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
+        self.logger.info(f"Resource status: {resource_status}")
         if resource_status:
             content["state"] = "DELETED"
             profile_type = self.profile_type_mapping[content["profile_type"]]
@@ -1613,6 +1641,14 @@ class K8sResourceLcm(GitOpsLcm):
                 "delete_profile", op_id, op_params, content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                profile_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         if resource_status:
             content["state"] = "DELETED"
             profile_type = self.profile_type_mapping[content["profile_type"]]
@@ -1695,6 +1731,14 @@ class K8sInfraControllerLcm(GitOpsLcm):
                 "delete_profile", op_id, op_params, content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                profile_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         if resource_status:
             content["state"] = "DELETED"
             profile_type = self.profile_type_mapping[content["profile_type"]]
@@ -1777,6 +1821,14 @@ class K8sInfraConfigLcm(GitOpsLcm):
                 "delete_profile", op_id, op_params, content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                profile_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         if resource_status:
             content["state"] = "DELETED"
             profile_type = self.profile_type_mapping[content["profile_type"]]
@@ -1883,6 +1935,14 @@ class OkaLcm(GitOpsLcm):
                 "delete_oka", op_id, op_params, db_content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                oka_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         if resource_status:
             db_content["state"] == "DELETED"
             self.db.set_one(self.db_collection, {"_id": db_content["_id"]}, db_content)
@@ -2098,6 +2158,14 @@ class KsuLcm(GitOpsLcm):
                     "delete_ksus", op_id, ksu_params, db_ksu
                 )
 
+            force = params.get("force", False)
+            if force:
+                force_delete_status = self.check_force_delete_and_delete_from_db(
+                    db_ksu["_id"], workflow_status, resource_status, force
+                )
+                if force_delete_status:
+                    return
+
             if resource_status:
                 db_ksu["state"] == "DELETED"
                 self.db.set_one(self.db_collection, {"_id": db_ksu["_id"]}, db_ksu)