From c1c6789c387d0c8a0219438ddae70a69771cc87e Mon Sep 17 00:00:00 2001 From: garciadeblas Date: Fri, 21 Feb 2025 10:15:49 +0100 Subject: [PATCH] Clean-up of resources created in OKA workflows Change-Id: I1a0ce2de88bd3e77036724a34c9423385c340b6d Signed-off-by: garciadeblas --- osm_lcm/k8s.py | 22 ++++++++++++++++++++ osm_lcm/odu_libs/ksu.py | 8 ++++++++ osm_lcm/odu_libs/oka.py | 43 ++++++++++++++++++++++++++++++++++++++++ osm_lcm/odu_workflows.py | 20 +++++++++++++++++++ 4 files changed, 93 insertions(+) diff --git a/osm_lcm/k8s.py b/osm_lcm/k8s.py index 816eb28a..3a0e2d0b 100644 --- a/osm_lcm/k8s.py +++ b/osm_lcm/k8s.py @@ -1799,6 +1799,14 @@ class OkaLcm(GitOpsLcm): "create_oka", op_id, op_params, db_content ) self.db.set_one(self.db_collection, {"_id": db_content["_id"]}, db_content) + + # Clean items used in the workflow, no matter if the workflow succeeded + clean_status, clean_msg = await self.odu.clean_items_workflow( + "create_oka", op_id, op_params, db_content + ) + self.logger.info( + f"clean_status is :{clean_status} and clean_msg is :{clean_msg}" + ) self.logger.info(f"OKA Create Exit with resource status: {resource_status}") return @@ -1822,6 +1830,13 @@ class OkaLcm(GitOpsLcm): "update_oka", op_id, op_params, db_content ) self.db.set_one(self.db_collection, {"_id": db_content["_id"]}, db_content) + # Clean items used in the workflow, no matter if the workflow succeeded + clean_status, clean_msg = await self.odu.clean_items_workflow( + "update_oka", op_id, op_params, db_content + ) + self.logger.info( + f"clean_status is :{clean_status} and clean_msg is :{clean_msg}" + ) self.logger.info(f"OKA Update Exit with resource status: {resource_status}") return @@ -1849,6 +1864,13 @@ class OkaLcm(GitOpsLcm): db_content["state"] == "DELETED" self.db.set_one(self.db_collection, {"_id": db_content["_id"]}, db_content) self.db.del_one(self.db_collection, {"_id": db_content["_id"]}) + # Clean items used in the workflow, no matter if the workflow succeeded + clean_status, clean_msg = await self.odu.clean_items_workflow( + "delete_oka", op_id, op_params, db_content + ) + self.logger.info( + f"clean_status is :{clean_status} and clean_msg is :{clean_msg}" + ) self.logger.info(f"OKA Delete Exit with resource status: {resource_status}") return diff --git a/osm_lcm/odu_libs/ksu.py b/osm_lcm/odu_libs/ksu.py index 8bd6e25a..abcae9da 100644 --- a/osm_lcm/odu_libs/ksu.py +++ b/osm_lcm/odu_libs/ksu.py @@ -427,3 +427,11 @@ async def clean_items_ksu_update(self, op_id, op_params_list, content_list): ) # self.logger.debug(f"Content: {content_list}") return await self.clean_items_ksu_create(op_id, op_params_list, content_list) + + +async def clean_items_ksu_delete(self, op_id, op_params_list, content_list): + self.logger.info( + f"clean_items_ksu_delete Enter. Operation {op_id}. Params: {op_params_list}" + ) + # self.logger.debug(f"Content: {content_list}") + return True, "OK" diff --git a/osm_lcm/odu_libs/oka.py b/osm_lcm/odu_libs/oka.py index ce07e963..6f204f2b 100644 --- a/osm_lcm/odu_libs/oka.py +++ b/osm_lcm/odu_libs/oka.py @@ -179,3 +179,46 @@ async def delete_oka(self, op_id, op_params, content): api_version="v1alpha1", ) return True, workflow_name + + +async def clean_items_oka_create(self, op_id, op_params_list, content_list): + self.logger.info( + f"clean_items_oka_create Enter. Operation {op_id}. Params: {op_params_list}" + ) + # self.logger.debug(f"Content: {content_list}") + volume_name = f"temp-pvc-oka-{op_id}" + try: + items = { + "pods": [ + { + "name": f"copy-pod-{volume_name}", + "namespace": "osm-workflows", + } + ], + "pvcs": [ + { + "name": volume_name, + "namespace": "osm-workflows", + } + ], + } + await self.clean_items(items) + return True, "OK" + except Exception as e: + return False, f"Error while cleaning items: {e}" + + +async def clean_items_oka_update(self, op_id, op_params_list, content_list): + self.logger.info( + f"clean_items_oka_update Enter. Operation {op_id}. Params: {op_params_list}" + ) + # self.logger.debug(f"Content: {content_list}") + return await self.clean_items_oka_create(op_id, op_params_list, content_list) + + +async def clean_items_oka_delete(self, op_id, op_params_list, content_list): + self.logger.info( + f"clean_items_oka_delete Enter. Operation {op_id}. Params: {op_params_list}" + ) + # self.logger.debug(f"Content: {content_list}") + return True, "OK" diff --git a/osm_lcm/odu_workflows.py b/osm_lcm/odu_workflows.py index faf33db7..92cfc435 100644 --- a/osm_lcm/odu_workflows.py +++ b/osm_lcm/odu_workflows.py @@ -76,12 +76,15 @@ class OduWorkflow(LcmBase): }, "create_oka": { "workflow_function": self.create_oka, + "clean_function": self.clean_items_oka_create, }, "update_oka": { "workflow_function": self.update_oka, + "clean_function": self.clean_items_oka_update, }, "delete_oka": { "workflow_function": self.delete_oka, + "clean_function": self.clean_items_oka_delete, }, "create_ksus": { "workflow_function": self.create_ksus, @@ -150,11 +153,15 @@ class OduWorkflow(LcmBase): move_ksu, clean_items_ksu_create, clean_items_ksu_update, + clean_items_ksu_delete, ) from osm_lcm.odu_libs.oka import ( create_oka, update_oka, delete_oka, + clean_items_oka_create, + clean_items_oka_update, + clean_items_oka_delete, ) from osm_lcm.odu_libs.profiles import ( create_profile, @@ -211,6 +218,19 @@ class OduWorkflow(LcmBase): return content["workflow_name"] async def clean_items(self, items): + # Delete pods + for pod in items.get("pods", []): + name = pod["name"] + namespace = pod["namespace"] + self.logger.info(f"Deleting pod {name} in namespace {namespace}") + self.logger.debug(f"Testing kubectl: {self._kubectl}") + self.logger.debug( + f"Testing kubectl configuration: {self._kubectl.configuration}" + ) + self.logger.debug( + f"Testing kubectl configuration Host: {self._kubectl.configuration.host}" + ) + await self._kubectl.delete_pod(name, namespace) # Delete secrets for secret in items.get("secrets", []): name = secret["name"] -- 2.25.1