From 408de8196c78200c53e8973982054fe281f9f6b4 Mon Sep 17 00:00:00 2001 From: yshah Date: Fri, 28 Feb 2025 09:01:51 +0000 Subject: [PATCH] Check force delete option and delete from DB Change-Id: I74fb2d7bf600b732900f6757862595e49b4ee023 Signed-off-by: yshah Signed-off-by: garciadeblas --- osm_lcm/k8s.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/osm_lcm/k8s.py b/osm_lcm/k8s.py index 58337ac0..104515b7 100644 --- a/osm_lcm/k8s.py +++ b/osm_lcm/k8s.py @@ -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) -- 2.25.1