Clean-up of resources created in ODU workflows

Change-Id: Ib2051d5844841d6469a4dc3e854ff2ef88a36a87
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
diff --git a/osm_lcm/odu_workflows.py b/osm_lcm/odu_workflows.py
index c992f17..cb59d6b 100644
--- a/osm_lcm/odu_workflows.py
+++ b/osm_lcm/odu_workflows.py
@@ -45,10 +45,12 @@
         self._workflows = {
             "create_cluster": {
                 "workflow_function": self.create_cluster,
+                "clean_function": self.clean_items_cluster_create,
                 "check_resource_function": self.check_create_cluster,
             },
             "update_cluster": {
                 "workflow_function": self.update_cluster,
+                "clean_function": self.clean_items_cluster_update,
                 "check_resource_function": self.check_update_cluster,
             },
             "delete_cluster": {
@@ -113,10 +115,12 @@
             },
             "create_cloud_credentials": {
                 "workflow_function": self.create_cloud_credentials,
+                "clean_function": self.clean_items_cloud_credentials_create,
                 "check_resource_function": self.check_create_cloud_credentials,
             },
             "update_cloud_credentials": {
                 "workflow_function": self.update_cloud_credentials,
+                "clean_function": self.clean_items_cloud_credentials_update,
                 "check_resource_function": self.check_update_cloud_credentials,
             },
             "delete_cloud_credentials": {
@@ -140,6 +144,8 @@
         create_cloud_credentials,
         update_cloud_credentials,
         delete_cloud_credentials,
+        clean_items_cloud_credentials_create,
+        clean_items_cloud_credentials_update,
         check_create_cloud_credentials,
         check_update_cloud_credentials,
         check_delete_cloud_credentials,
@@ -150,6 +156,8 @@
         delete_cluster,
         register_cluster,
         deregister_cluster,
+        clean_items_cluster_create,
+        clean_items_cluster_update,
         check_create_cluster,
         check_update_cluster,
         check_delete_cluster,
@@ -194,7 +202,10 @@
         render_jinja_template,
         render_yaml_template,
     )
-    from osm_lcm.odu_libs.common import create_secret
+    from osm_lcm.odu_libs.common import (
+        create_secret,
+        delete_secret,
+    )
 
     async def launch_workflow(self, key, op_id, op_params, content):
         self.logger.info(
@@ -204,6 +215,14 @@
         self.logger.info("workflow function : {}".format(workflow_function))
         return await workflow_function(op_id, op_params, content)
 
+    async def clean_items_workflow(self, key, op_id, op_params, content):
+        self.logger.info(
+            f"Cleaning items created during workflow launch. Key: {key}. Operation: {op_id}. Params: {op_params}. Content: {content}"
+        )
+        clean_items_function = self._workflows[key]["clean_function"]
+        self.logger.info("clean items function : {}".format(clean_items_function))
+        return await clean_items_function(op_id, op_params, content)
+
     async def dummy_operation(self, op_id, op_params, content):
         self.logger.info("Empty operation status Enter")
         self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
@@ -220,3 +239,17 @@
     async def check_dummy_operation(self, op_id, op_params, content):
         self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
         return True, "OK"
+
+    async def clean_items(self, items):
+        # Delete secrets
+        for secret in items.get("secrets", []):
+            name = secret["name"]
+            namespace = secret["namespace"]
+            self.logger.info(f"Deleting secret {name} in namespace {namespace}")
+            self.delete_secret(name, namespace)
+        # Delete pvcs
+        for pvc in items.get("pvcs", []):
+            name = pvc["name"]
+            namespace = pvc["namespace"]
+            self.logger.info(f"Deleting pvc {name} in namespace {namespace}")
+            await self._kubectl.delete_pvc(name, namespace)