Clean-up of resources created in OKA workflows
Change-Id: I1a0ce2de88bd3e77036724a34c9423385c340b6d
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
diff --git a/osm_lcm/k8s.py b/osm_lcm/k8s.py
index 816eb28..3a0e2d0 100644
--- a/osm_lcm/k8s.py
+++ b/osm_lcm/k8s.py
@@ -1799,6 +1799,14 @@
"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 @@
"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 @@
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 8bd6e25..abcae9d 100644
--- a/osm_lcm/odu_libs/ksu.py
+++ b/osm_lcm/odu_libs/ksu.py
@@ -427,3 +427,11 @@
)
# 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 ce07e96..6f204f2 100644
--- a/osm_lcm/odu_libs/oka.py
+++ b/osm_lcm/odu_libs/oka.py
@@ -179,3 +179,46 @@
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 faf33db..92cfc43 100644
--- a/osm_lcm/odu_workflows.py
+++ b/osm_lcm/odu_workflows.py
@@ -76,12 +76,15 @@
},
"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 @@
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 @@
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"]