Fix cluster-deregistration: update workflowtemplate and functions

Change-Id: Ibd4c2195d6b56a002daaf81f3ce9f93e69af446b
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
diff --git a/docker/osm-krm-functions/scripts/library/helper-functions.rc b/docker/osm-krm-functions/scripts/library/helper-functions.rc
index 29e00ff..be3601a 100644
--- a/docker/osm-krm-functions/scripts/library/helper-functions.rc
+++ b/docker/osm-krm-functions/scripts/library/helper-functions.rc
@@ -403,7 +403,7 @@
   local TARGET_NAME="$2"
   local OPERATION="$3"
   local PATCH_PATH="$4"
-  # Gathers all optional parameters for transformer funcion (if any) and puts them into an array for further use
+  # Gathers all optional parameters for transformer function (if any) and puts them into an array for further use
   local ALL_PARAMS=( "${@}" )
   local VALUES=( "${ALL_PARAMS[@]:4}" )
 
diff --git a/docker/osm-krm-functions/scripts/library/krm-functions.rc b/docker/osm-krm-functions/scripts/library/krm-functions.rc
index 07a47f8..61f6b69 100644
--- a/docker/osm-krm-functions/scripts/library/krm-functions.rc
+++ b/docker/osm-krm-functions/scripts/library/krm-functions.rc
@@ -577,12 +577,12 @@
 
   # Calculates key folders
   ## Base folder with Kustomizations for the new cluster
-  local CLUSTER_FOLDER="${FLEET_REPO_DIR}/clusters/${CLUSTER_KUSTOMIZATION_NAME}"
+  # local CLUSTER_FOLDER="${FLEET_REPO_DIR}/clusters/${CLUSTER_KUSTOMIZATION_NAME}"
   ## Folder where managed resources are defined in the management cluster
   local MGMT_RESOURCES_CLUSTER_DIR="${FLEET_REPO_DIR}/${MGMT_PROJECT_NAME}/managed-resources/_management/${CLUSTER_KUSTOMIZATION_NAME}"
 
-  # Delete Flux resources syncronized directly from remote cluster
-  rm -rf "${CLUSTER_FOLDER}/flux-system"
+  # Delete Flux resources synchronized directly from remote cluster
+  # rm -rf "${CLUSTER_FOLDER}/flux-system"
 
   # Delete Flux resources bootstraped remotely
   rm -rf "${MGMT_RESOURCES_CLUSTER_DIR}/cluster-bootstrap-${CLUSTER_KUSTOMIZATION_NAME}.yaml"
@@ -719,6 +719,18 @@
   local APPS_DIR="${8:-"${FLEET_REPO_DIR}/${PROJECT_NAME}/app-profiles/${CLUSTER_KUSTOMIZATION_NAME}"}"
   local CLUSTER_DIR="${9:-"${FLEET_REPO_DIR}/clusters/${CLUSTER_KUSTOMIZATION_NAME}"}"
 
+  # Optional input: Do I need a purge operation first?
+  local PURGE="${10:-"false"}"
+
+
+  # Perform the purge if needed
+  if [[ "${PURGE,,}" == "true" ]]; then
+    echo "Purging the remote Flux instalation..."
+    flux uninstall -s --namespace=flux-system
+  fi
+
+  echo "Deleting cluster profiles and (when applicable) its cloud resources..."
+
   # Delete profile folders
   rm -rf "${INFRA_CONTROLLERS_DIR}"
   rm -rf "${INFRA_CONFIGS_DIR}"
@@ -728,7 +740,7 @@
   # Delete base cluster Kustomizations
   rm -rf "${CLUSTER_DIR}"
 
-  # Delete cluster resources
+  # Delete cluster resources if managed by OSM (otherwise, this will be ignored)
   rm -rf "${MGMT_RESOURCES_DIR}/${CLUSTER_KUSTOMIZATION_NAME}"
 }
 
diff --git a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/building-blocks/cluster-management-wft.yaml b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/building-blocks/cluster-management-wft.yaml
index 78fbc46..9140b0b 100644
--- a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/building-blocks/cluster-management-wft.yaml
+++ b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/building-blocks/cluster-management-wft.yaml
@@ -235,80 +235,6 @@
     #   fsGroup: 10000
 
 
-  # TODO: Deprecated - To be removed
-  # Create a PaaS cluster in Azure
-  - name: create-cluster-aks
-    inputs:
-      parameters:
-      # Volumes with cloned repos
-      - name: fleet_volume_name
-      - name: fleet_mount_path
-        value: "/fleet"
-      - name: sw_catalogs_volume_name
-      - name: sw_catalogs_mount_path
-        value: "/sw-catalogs"
-
-      # Specific parameters
-      - name: cluster_name
-      - name: vm_size
-      - name: node_count
-      - name: cluster_location
-      - name: rg_name
-      - name: k8s_version
-      - name: providerconfig_name
-      - name: cluster_kustomization_name
-      - name: mgmt_project_name
-        value: "osm_admin"
-
-      # Other parameters - Recommended to keep defaults
-      - name: fleet_repo_dir
-        value: "/fleet/fleet-osm/"
-      - name: sw_catalogs_repo_dir
-        value: "/sw-catalogs/sw-catalogs-osm/"
-      - name: target_folder
-        value: "{{inputs.parameters.fleet_repo_dir}}/{{inputs.parameters.mgmt_project_name}}/managed-resources/_management"
-      - name: manifest_filename
-        value: "{{inputs.parameters.cluster_name}}.yaml"
-      - name: templates
-        value: "{{inputs.parameters.sw_catalogs_repo_dir}}/cloud-resources/aks/templates/"
-      - name: template_manifest_filename
-        value: "aks01.yaml"
-    volumes:
-      - name: fleet-repo-volume
-        persistentVolumeClaim:
-          claimName: '{{inputs.parameters.fleet_volume_name}}'
-      - name: sw-catalogs-repo-volume
-        persistentVolumeClaim:
-          claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
-    container:
-      image: opensourcemano/osm-krm-functions:testing-daily
-      # imagePullPolicy: Always
-      # securityContext:
-      #   runAsUser: 10000
-      #   runAsGroup: 10000
-      #   fsGroup: 10000
-      volumeMounts:
-      - name: fleet-repo-volume
-        mountPath: '{{inputs.parameters.fleet_mount_path}}'
-      - name: sw-catalogs-repo-volume
-        mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
-      command: ["/app/scripts/entrypoint.sh"]
-      args:
-      - create_cluster_aks
-      - "{{inputs.parameters.cluster_name}}"
-      - "{{inputs.parameters.vm_size}}"
-      - "{{inputs.parameters.node_count}}"
-      - "{{inputs.parameters.cluster_location}}"
-      - "{{inputs.parameters.rg_name}}"
-      - "{{inputs.parameters.k8s_version}}"
-      - "{{inputs.parameters.providerconfig_name}}"
-      - "{{inputs.parameters.cluster_kustomization_name}}"
-      - "{{inputs.parameters.target_folder}}"
-      - "{{inputs.parameters.manifest_filename}}"
-      - "{{inputs.parameters.templates}}"
-      - "{{inputs.parameters.template_manifest_filename}}"
-
-
   # Bootstrap remote cluster running in **ANY cloud**
   - name: bootstrap-remote-cluster
     inputs:
@@ -478,3 +404,72 @@
       runAsUser: 10000
     #   runAsGroup: 10000
     #   fsGroup: 10000
+
+
+  # Purge and delete cluster from **ANY** cloud
+  - name: purge-delete-cluster
+    inputs:
+      parameters:
+      # Volumes with cloned repos
+      - name: fleet_volume_name
+      - name: fleet_mount_path
+        value: "/fleet"
+
+      # Specific parameters
+      - name: cluster_kustomization_name
+      - name: project_name
+        value: "osm_admin"
+
+      # Is a purge needed before deleting?
+      - name: purge
+        value: "true"
+      ## Secret where the kubeconfig is stored (may not exist)
+      - name: temp_kubeconfig_secret_name
+        valueFrom:
+          expression: "kubeconfig-{{inputs.parameters.cluster_kustomization_name}}"
+
+      # Other parameters - Recommended to keep defaults
+      - name: temp_kubeconfig_secret_key
+        value: "kubeconfig"
+      - name: fleet_repo_dir
+        value: "/fleet/fleet-osm/"
+      - name: mgmt_resources_dir
+        value: "{{inputs.parameters.fleet_repo_dir}}/{{inputs.parameters.project_name}}/managed-resources/_management"
+
+    container:
+      image: ttl.sh/osm-krm-functions:24h
+      # imagePullPolicy: Always
+      command: ["/app/scripts/entrypoint.sh"]
+      args:
+      - delete_remote_cluster
+      - "{{inputs.parameters.cluster_kustomization_name}}"
+      - "{{inputs.parameters.project_name}}"
+      - "{{inputs.parameters.fleet_repo_dir}}"
+      - "{{inputs.parameters.mgmt_resources_dir}}"
+      - ''
+      - ''
+      - ''
+      - ''
+      - ''
+      - "{{inputs.parameters.purge}}"
+
+      volumeMounts:
+      - name: fleet-repo-volume
+        mountPath: '{{inputs.parameters.fleet_mount_path}}'
+      - name: kubeconfig-volume
+        mountPath: '/app/.kube'
+    volumes:
+      - name: fleet-repo-volume
+        persistentVolumeClaim:
+          claimName: '{{inputs.parameters.fleet_volume_name}}'
+      - name: kubeconfig-volume
+        secret:
+          secretName: '{{inputs.parameters.temp_kubeconfig_secret_name}}'
+          optional: true
+          items:
+            - key: '{{inputs.parameters.temp_kubeconfig_secret_key}}'
+              path: 'config'
+    securityContext:
+      fsGroup: 10000
+      # runAsUser: 10000
+      # runAsGroup: 10000
diff --git a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-uninstall-flux-remote-cluster-wft.yaml b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-purge-delete-cluster-wft.yaml
similarity index 89%
rename from installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-uninstall-flux-remote-cluster-wft.yaml
rename to installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-purge-delete-cluster-wft.yaml
index b3ef1d7..e2cb443 100644
--- a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-uninstall-flux-remote-cluster-wft.yaml
+++ b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-purge-delete-cluster-wft.yaml
@@ -18,7 +18,7 @@
 apiVersion: argoproj.io/v1alpha1
 kind: WorkflowTemplate
 metadata:
-  name: full-uninstall-flux-remote-cluster-wft
+  name: full-purge-delete-cluster-wft
   namespace: osm-workflows
 
 spec:
@@ -34,6 +34,9 @@
     - name: cluster_kustomization_name
     - name: project_name
       value: "osm_admin"
+    - name: temp_kubeconfig_secret_name
+    - name: purge
+      value: "true"
 
     # Debugging
     - name: dry_run
@@ -46,12 +49,12 @@
   #   secondsAfterSuccess: 50     # Time to live after workflow is successful
   #   secondsAfterFailure: 50     # Time to live after workflow fails
 
-  entrypoint: uninstall-flux
+  entrypoint: delete-cluster
 
   templates:
 
   # Main template
-  - name: uninstall-flux
+  - name: delete-cluster
     inputs:
       parameters:
       # Git repos
@@ -62,6 +65,8 @@
       # Specific parameters
       - name: cluster_kustomization_name
       - name: project_name
+      - name: purge
+      - name: temp_kubeconfig_secret_name
 
       # Debugging
       - name: dry_run
@@ -96,10 +101,10 @@
     # ------ end of preparations for transaction
 
     # ------ Transformations
-    - - name: delete-cluster
+    - - name: purge-delete-cluster
         templateRef:
           name: cluster-management-wft
-          template: delete-cluster
+          template: purge-delete-cluster
         arguments:
           parameters:
           # Volumes with cloned repos
@@ -112,6 +117,10 @@
             value: "{{inputs.parameters.cluster_kustomization_name}}"
           - name: project_name
             value: "{{inputs.parameters.project_name}}"
+          - name: purge
+            value: "{{inputs.parameters.purge}}"
+          - name: temp_kubeconfig_secret_name
+            value: "{{inputs.parameters.temp_kubeconfig_secret_name}}"
     # ------ end of transformations
 
     # ------ Commit transaction