Fix cluster deregistration to use two workflows: disconnect and purge

Change-Id: I1c3ef019363384e7a5b68c4e7929506a92efd6fe
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
diff --git a/osm_lcm/odu_libs/cluster_mgmt.py b/osm_lcm/odu_libs/cluster_mgmt.py
index 9c0cbaf..b4a24d6 100644
--- a/osm_lcm/odu_libs/cluster_mgmt.py
+++ b/osm_lcm/odu_libs/cluster_mgmt.py
@@ -159,7 +159,7 @@
         workflow_debug=self._workflow_debug,
         workflow_dry_run=self._workflow_dry_run,
     )
-    self.logger.debug(f"Workflow manifest: {manifest}")
+    # self.logger.debug(f"Workflow manifest: {manifest}")
 
     # Submit workflow
     self.logger.debug(f"Testing kubectl: {self._kubectl}")
@@ -259,7 +259,7 @@
         workflow_debug=self._workflow_debug,
         workflow_dry_run=self._workflow_dry_run,
     )
-    self.logger.info(manifest)
+    # self.logger.info(manifest)
 
     # Submit workflow
     self.logger.debug(f"Testing kubectl: {self._kubectl}")
@@ -305,7 +305,7 @@
         workflow_debug=self._workflow_debug,
         workflow_dry_run=self._workflow_dry_run,
     )
-    self.logger.info(manifest)
+    # self.logger.info(manifest)
 
     # Submit workflow
     self.logger.debug(f"Testing kubectl: {self._kubectl}")
@@ -428,7 +428,7 @@
         workflow_debug=self._workflow_debug,
         workflow_dry_run=self._workflow_dry_run,
     )
-    self.logger.debug(f"Workflow manifest: {manifest}")
+    # self.logger.debug(f"Workflow manifest: {manifest}")
 
     # Submit workflow
     self.logger.debug(f"Testing kubectl: {self._kubectl}")
@@ -458,6 +458,37 @@
     workflow_template = "launcher-disconnect-flux-remote-cluster.j2"
     workflow_name = f"deregister-cluster-{db_cluster['_id']}"
 
+    # Create secret with kubeconfig
+    secret_name = f"kubeconfig-{cluster_name}"
+    secret_namespace = "osm-workflows"
+    secret_key = "kubeconfig"
+    secret_value = yaml.safe_dump(
+        db_cluster["credentials"], indent=2, default_flow_style=False, sort_keys=False
+    )
+    try:
+        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.create_secret(
+            secret_name,
+            secret_namespace,
+            secret_key,
+            secret_value,
+        )
+    except Exception as e:
+        self.logger.info(
+            f"Cannot create secret {secret_name} in namespace {secret_namespace}: {e}"
+        )
+        return (
+            False,
+            f"Cannot create secret {secret_name} in namespace {secret_namespace}: {e}",
+            None,
+        )
+
     # Additional params for the workflow
     cluster_kustomization_name = cluster_name
     osm_project_name = "osm_admin"  # TODO: get project name from DB
@@ -473,7 +504,54 @@
         workflow_debug=self._workflow_debug,
         workflow_dry_run=self._workflow_dry_run,
     )
-    self.logger.info(manifest)
+    # self.logger.info(manifest)
+
+    # Submit workflow
+    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}"
+    )
+    self._kubectl.create_generic_object(
+        namespace="osm-workflows",
+        manifest_dict=yaml.safe_load(manifest),
+        api_group="argoproj.io",
+        api_plural="workflows",
+        api_version="v1alpha1",
+    )
+    return True, workflow_name, None
+
+
+async def purge_cluster(self, op_id, op_params, content):
+    self.logger.info(f"purge_cluster Enter. Operation {op_id}. Params: {op_params}")
+    # self.logger.debug(f"Content: {content}")
+
+    db_cluster = content["cluster"]
+    cluster_name = db_cluster["git_name"].lower()
+
+    workflow_template = "launcher-purge-delete-cluster.yaml.j2"
+    workflow_name = f"purge-cluster-{db_cluster['_id']}"
+
+    # Create secret with kubeconfig
+    temp_kubeconfig_secret_name = f"kubeconfig-{cluster_name}"
+
+    # Additional params for the workflow
+    cluster_kustomization_name = cluster_name
+    osm_project_name = "osm_admin"  # TODO: get project name from DB
+
+    # Render workflow
+    manifest = self.render_jinja_template(
+        workflow_template,
+        output_file=None,
+        workflow_name=workflow_name,
+        git_fleet_url=self._repo_fleet_url,
+        cluster_kustomization_name=cluster_kustomization_name,
+        osm_project_name=osm_project_name,
+        temp_kubeconfig_secret_name=temp_kubeconfig_secret_name,
+        workflow_debug=self._workflow_debug,
+        workflow_dry_run=self._workflow_dry_run,
+    )
+    # self.logger.info(manifest)
 
     # Submit workflow
     self.logger.debug(f"Testing kubectl: {self._kubectl}")
@@ -575,9 +653,9 @@
         return False, f"Error while cleaning items: {e}"
 
 
-async def clean_items_cluster_deregister(self, op_id, op_params, content):
+async def clean_items_cluster_purge(self, op_id, op_params, content):
     self.logger.info(
-        f"clean_items_cluster_deregister Enter. Operation {op_id}. Params: {op_params}"
+        f"clean_items_cluster_purge Enter. Operation {op_id}. Params: {op_params}"
     )
     # self.logger.debug(f"Content: {content}")
     # Clean secrets
@@ -587,6 +665,10 @@
         "secrets": [
             {
                 "name": f"kubeconfig-{cluster_name}",
+                "namespace": "osm-workflows",
+            },
+            {
+                "name": f"kubeconfig-{cluster_name}",
                 "namespace": "managed-resources",
             },
         ]