Feature 11057: Cluster management in Openshift-based infrastructures. Add ArgoWF... 38/15338/6
authormesaj <juanmanuel.mesamendez.ext@telefonica.com>
Sun, 10 Aug 2025 21:54:54 +0000 (23:54 +0200)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Thu, 14 Aug 2025 15:07:01 +0000 (17:07 +0200)
This reverts commit 1d8f7f820b988ca9fa280194492e0c36b910bc27.

Change-Id: I6ba89771a905e57aceb77fd49f05d65711825b37
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
Signed-off-by: mesaj <juanmanuel.mesamendez.ext@telefonica.com>
docker/osm-krm-functions/scripts/library/krm-functions.rc
installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/building-blocks/cluster-management-wft.yaml
installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-create-openshift-cluster-and-bootstrap-wft.yaml [new file with mode: 0644]
installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-delete-cluster-wft.yaml
installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-purge-delete-cluster-wft.yaml
installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-openshift-cluster-and-bootstrap-wft.yaml [new file with mode: 0644]

index 30f1b54..11c5fba 100644 (file)
@@ -1538,15 +1538,13 @@ function update_openshift_cluster {
   local FLEET_REPO_URL="${20:-"${FLEET_REPO_URL}"}"
   local SW_CATALOGS_REPO_DIR="${21:-"${SW_CATALOGS_REPO_DIR}"}"
   local SW_CATALOGS_REPO_URL="${22:-"${SW_CATALOGS_REPO_URL}"}"
-  local SKIP_BOOTSTRAP="${23:-"false"}"
-   # Only change if absolutely needeed
+  local SKIP_BOOTSTRAP="${23:-"true"}"
+  # Only change if absolutely needeed
   local MGMT_PROJECT_NAME="${24:-"osm_admin"}"
   
   # Determine key folders in Fleet
   local MGMT_RESOURCES_DIR="${FLEET_REPO_DIR}/${MGMT_PROJECT_NAME}/managed-resources/${MGMT_CLUSTER_NAME}"
 
-  # Updating no new cluster
-  local SKIP_BOOTSTRAP="true"
 
   create_openshift_cluster \
     "${CLUSTER_KUSTOMIZATION_NAME}" \
index 83d8ecb..8156659 100644 (file)
@@ -416,9 +416,6 @@ spec:
         value: ""
       - name: capo_resources_namespace
         value: "managed-resources"
-      ## Do we want to skip OSM's bootstrap?
-      - name: skip_bootstrap
-        value: "false"
       # Other parameters - Recommended to keep defaults
       - name: mgmt_cluster_name
         value: "_management"
@@ -493,6 +490,229 @@ spec:
     #   fsGroup: 10000
 
 
+  # Create a PaaS Openshift cluster using ACM
+  - name: create-openshift-cluster
+    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_kustomization_name
+      - name: cluster_name
+      - name: vm_size
+      - name: node_count
+      - name: k8s_version
+      - name: providerconfig_name
+      - name: public_key_mgmt
+      - name: public_key_new_cluster
+      - name: secret_name_private_age_key_for_new_cluster
+      - name: key_name_in_secret
+        value: "agekey"
+      - name: fleet_repo_url
+      - name: sw_catalogs_repo_url
+      - name: mgmt_project_name
+        value: "osm_admin"
+      ## Openshift specific parameters
+      - name: openshift_release
+      - name: infra_public_ssh_key
+      - name: control_plane_availability
+      - name: worker_cpu
+      - name: worker_memory
+      - name: worker_volume_size
+      - name: worker_storage_class
+      - name: base_domain
+      - name: mgmt_cluster_name
+      - name: hosted_clusters_project
+      - name: etcd_volume_size
+      ## Do we want to skip OSM's bootstrap?
+      - name: skip_bootstrap
+        value: "false"
+      # Other parameters - Recommended to keep defaults
+      - name: base_templates_path
+        value: "cloud-resources/capi"
+      - name: cloned_fleet_folder_name
+        value: "fleet-osm"
+      - name: cloned_sw_catalogs_folder_name
+        value: "sw-catalogs-osm"
+      # Debug?
+      - name: debug
+        value: "false"
+
+    container:
+      image: opensourcemano/osm-krm-functions:testing-daily
+      # imagePullPolicy: Always
+      env:
+      - name: PRIVATE_KEY_NEW_CLUSTER
+        valueFrom:
+          secretKeyRef:
+            name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
+            key: "{{inputs.parameters.key_name_in_secret}}"
+      - name: DEBUG
+        value: "{{inputs.parameters.debug}}"
+      command: ["/app/scripts/entrypoint.sh"]
+      args:
+      - create_openshift_cluster
+      - "{{inputs.parameters.cluster_kustomization_name}}"
+      - "{{inputs.parameters.cluster_name}}"
+      - "{{inputs.parameters.k8s_version}}"
+      - "{{inputs.parameters.public_key_mgmt}}"
+      - "{{inputs.parameters.public_key_new_cluster}}"
+      - ''
+      - "{{inputs.parameters.openshift_release}}"
+      - "{{inputs.parameters.infra_public_ssh_key}}"
+      - "{{inputs.parameters.control_plane_availability}}"
+      - "{{inputs.parameters.node_count}}"
+      - "{{inputs.parameters.worker_cpu}}"
+      - "{{inputs.parameters.worker_memory}}"
+      - "{{inputs.parameters.worker_volume_size}}"
+      - "{{inputs.parameters.worker.storage_class}}"
+      - "{{inputs.parameters.base_domain}}"
+      - "{{inputs.parameters.mgmt_cluster_name}}"
+      - "{{inputs.parameters.hosted_clusters_project}}"
+      - "{{inputs.parameters.etcd_volume_size}}"
+      - "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
+      - "{{inputs.parameters.fleet_repo_url}}"
+      - "{{inputs.parameters.sw_catalogs_mount_path}}/{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
+      - "{{inputs.parameters.sw_catalogs_repo_url}}"
+      - "{{inputs.parameters.skip_bootstrap}}"
+      - "{{inputs.parameters.mgmt_project_name}}"
+      - "{{inputs.parameters.base_templates_path}}"
+      - ''
+      - ''
+
+      volumeMounts:
+      - name: fleet-repo-volume
+        mountPath: '{{inputs.parameters.fleet_mount_path}}'
+      - name: sw-catalogs-repo-volume
+        mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
+    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}}'
+    securityContext:
+      runAsUser: 10000
+    #   runAsGroup: 10000
+    #   fsGroup: 10000
+
+
+  # Update a PaaS cluster created using CAPI (Openstack)
+  - name: update-openshift-cluster
+    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_kustomization_name
+      - name: cluster_name
+      - name: vm_size
+      - name: node_count
+      - name: k8s_version
+      - name: providerconfig_name
+      - name: public_key_mgmt
+      - name: public_key_new_cluster
+      - name: secret_name_private_age_key_for_new_cluster
+      - name: key_name_in_secret
+        value: "agekey"
+      - name: fleet_repo_url
+      - name: sw_catalogs_repo_url
+      - name: mgmt_project_name
+        value: "osm_admin"
+      ## Openshift specific parameters
+      - name: openshift_release
+      - name: infra_public_ssh_key
+      - name: control_plane_availability
+      - name: worker_cpu
+      - name: worker_memory
+      - name: worker_volume_size
+      - name: worker_storage_class
+      - name: base_domain
+      - name: mgmt_cluster_name
+      - name: hosted_clusters_project
+      - name: etcd_volume_size
+      # Other parameters - Recommended to keep defaults
+      - name: base_templates_path
+        value: "cloud-resources/capi"
+      - name: cloned_fleet_folder_name
+        value: "fleet-osm"
+      - name: cloned_sw_catalogs_folder_name
+        value: "sw-catalogs-osm"
+      # Debug?
+      - name: debug
+        value: "false"
+
+    container:
+      image: opensourcemano/osm-krm-functions:testing-daily
+      # imagePullPolicy: Always
+      env:
+      - name: PRIVATE_KEY_NEW_CLUSTER
+        valueFrom:
+          secretKeyRef:
+            name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
+            key: "{{inputs.parameters.key_name_in_secret}}"
+      - name: DEBUG
+        value: "{{inputs.parameters.debug}}"
+      command: ["/app/scripts/entrypoint.sh"]
+      args:
+      - update_openshift_cluster
+      - "{{inputs.parameters.cluster_kustomization_name}}"
+      - "{{inputs.parameters.cluster_name}}"
+      - "{{inputs.parameters.k8s_version}}"
+      - "{{inputs.parameters.public_key_mgmt}}"
+      - "{{inputs.parameters.public_key_new_cluster}}"
+      - ''
+      - "{{inputs.parameters.openshift_release}}"
+      - "{{inputs.parameters.infra_public_ssh_key}}"
+      - "{{inputs.parameters.control_plane_availability}}"
+      - "{{inputs.parameters.node_count}}"
+      - "{{inputs.parameters.worker_cpu}}"
+      - "{{inputs.parameters.worker_memory}}"
+      - "{{inputs.parameters.worker_volume_size}}"
+      - "{{inputs.parameters.worker.storage_class}}"
+      - "{{inputs.parameters.base_domain}}"
+      - "{{inputs.parameters.mgmt_cluster_name}}"
+      - "{{inputs.parameters.hosted_clusters_project}}"
+      - "{{inputs.parameters.etcd_volume_size}}"
+      - "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
+      - "{{inputs.parameters.fleet_repo_url}}"
+      - "{{inputs.parameters.sw_catalogs_mount_path}}/{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
+      - "{{inputs.parameters.sw_catalogs_repo_url}}"
+      ## Note that during upgrades, OSM's bootstrap is avoided:
+      - "true"
+      - "{{inputs.parameters.mgmt_project_name}}"
+      - "{{inputs.parameters.base_templates_path}}"
+      - ''
+      - ''
+      volumeMounts:
+      - name: fleet-repo-volume
+        mountPath: '{{inputs.parameters.fleet_mount_path}}'
+      - name: sw-catalogs-repo-volume
+        mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
+    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}}'
+    securityContext:
+      runAsUser: 10000
+    #   runAsGroup: 10000
+    #   fsGroup: 10000
+
+
   # Bootstrap remote cluster running in **ANY cloud**
   - name: bootstrap-remote-cluster
     inputs:
@@ -639,6 +859,8 @@ spec:
         value: "/fleet/fleet-osm/"
       - name: mgmt_resources_dir
         value: "{{inputs.parameters.fleet_repo_dir}}/{{inputs.parameters.project_name}}/managed-resources/_management"
+      - name: mgmt_cluster_name
+        value: "{{inputs.parameters.mgmt_cluster_name}}"
 
     container:
       image: opensourcemano/osm-krm-functions:testing-daily
@@ -650,6 +872,7 @@ spec:
       - "{{inputs.parameters.project_name}}"
       - "{{inputs.parameters.fleet_repo_dir}}"
       - "{{inputs.parameters.mgmt_resources_dir}}"
+      - "{{inputs.parameters.mgmt_cluster_name}}"
 
       volumeMounts:
       - name: fleet-repo-volume
@@ -677,6 +900,8 @@ spec:
       - name: cluster_kustomization_name
       - name: project_name
         value: "osm_admin"
+      - name: mgmt_cluster_name
+        value: "{{inputs.parameters.mgmt_cluster_name}}"
 
       # Is a purge needed before deleting?
       - name: purge
@@ -704,6 +929,7 @@ spec:
       - "{{inputs.parameters.project_name}}"
       - "{{inputs.parameters.fleet_repo_dir}}"
       - "{{inputs.parameters.mgmt_resources_dir}}"
+      - "{{inputs.parameters.mgmt_cluster_name}}"
       - ''
       - ''
       - ''
diff --git a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-create-openshift-cluster-and-bootstrap-wft.yaml b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-create-openshift-cluster-and-bootstrap-wft.yaml
new file mode 100644 (file)
index 0000000..0f1567e
--- /dev/null
@@ -0,0 +1,310 @@
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+
+apiVersion: argoproj.io/v1alpha1
+kind: WorkflowTemplate
+metadata:
+  name: full-create-openshift-cluster-and-bootstrap-wft
+  namespace: osm-workflows
+
+spec:
+  arguments:
+    parameters:
+
+    # Fleet repo
+    - name: git_fleet_url
+    - name: fleet_destination_folder
+    - name: git_fleet_cred_secret
+
+    # SW-Catalogs repo
+    - name: git_sw_catalogs_url
+    - name: sw_catalogs_destination_folder
+    - name: git_sw_catalogs_cred_secret
+
+    # Specific parameters - Generic cluster creation
+    - name: cluster_kustomization_name
+    - name: cluster_name
+    - name: providerconfig_name
+    - name: vm_size
+    - name: node_count
+    - name: k8s_version
+
+    ## Specific parameters - Openshift
+    - name: control_plane_vm_size
+    - name: control_plane_node_count
+    - name: openstack_dns_nameservers
+    - name: openstack_external_network_id
+    - name: openstack_failure_domain
+    - name: openstack_ssh_key_name
+    - name: cluster_cni
+    - name: openstack_worker_image_name
+    - name: openstack_control_plane_image_name
+    - name: capo_resources_namespace
+
+    # Specific parameters - Bootstrap and credentials
+    - name: public_key_mgmt
+    - name: public_key_new_cluster
+    - name: secret_name_private_age_key_for_new_cluster
+    - name: key_name_in_secret
+      value: "agekey"
+    # Using `git_fleet_url` instead:
+    # - name: fleet_repo_url
+    # Using `git_sw_catalogs_url` instead:
+    # - name: sw_catalogs_repo_url
+    - name: mgmt_project_name
+      value: "osm_admin"
+
+    # Advanced parameters - Recommended to keep defaults
+    - name: skip_bootstrap
+      value: "false"
+    - name: mgmt_cluster_name
+      value: "_management"
+    - name: base_templates_path
+      value: "cloud-resources/capi"
+    - name: cloned_fleet_folder_name
+      value: "fleet-osm"
+    - name: cloned_sw_catalogs_folder_name
+      value: "sw-catalogs-osm"
+
+    # Debug/dry run?
+    - name: debug
+      value: "false"
+    - name: dry_run
+      value: "false"
+
+
+  # # Cleanup policy
+  # ttlStrategy:
+  #   secondsAfterCompletion: 100 # Time to live after workflow is completed, replaces ttlSecondsAfterFinished
+  #   secondsAfterSuccess: 50     # Time to live after workflow is successful
+  #   secondsAfterFailure: 50     # Time to live after workflow fails
+
+  entrypoint: create-cluster-and-bootstrap
+
+  templates:
+  # Main template
+  - name: create-cluster-and-bootstrap
+    inputs:
+      parameters:
+      # Fleet repo
+      - name: git_fleet_url
+      - name: fleet_destination_folder
+      - name: git_fleet_cred_secret
+      # SW-Catalogs repo
+      - name: git_sw_catalogs_url
+      - name: sw_catalogs_destination_folder
+      - name: git_sw_catalogs_cred_secret
+      # Specific parameters
+      - name: cluster_kustomization_name
+      - name: cluster_name
+      - name: providerconfig_name
+      - name: vm_size
+      - name: node_count
+      - name: k8s_version
+      - name: public_key_mgmt
+      - name: public_key_new_cluster
+      - name: secret_name_private_age_key_for_new_cluster
+      - name: key_name_in_secret
+      ## Openshift specific parameters
+      - name: control_plane_vm_size
+      - name: control_plane_node_count
+      - name: openstack_dns_nameservers
+      - name: openstack_external_network_id
+      - name: openstack_failure_domain
+      - name: openstack_ssh_key_name
+      - name: cluster_cni
+      - name: openstack_worker_image_name
+      - name: openstack_control_plane_image_name
+      - name: capo_resources_namespace
+      # Other parameters - Recommended to keep defaults
+      # - name: fleet_repo_url
+      # - name: sw_catalogs_repo_url
+      - name: mgmt_project_name
+      - name: skip_bootstrap
+      - name: mgmt_cluster_name
+      - name: base_templates_path
+      - name: cloned_fleet_folder_name
+      - name: cloned_sw_catalogs_folder_name
+      ## EKS only (otherwise, ignored)
+      - name: cluster_iam_role
+      - name: cluster_private_subnets_id
+      - name: cluster_public_subnets_id
+      - name: cluster_subnets_configmap_name
+      # Debug/dry run?
+      - name: debug
+      - name: dry_run
+
+    steps:
+    # ------ Preparations for transaction
+    - - name: generate-fleet-volume-repo
+        templateRef:
+          name: k8s-resources-wft
+          template: generate-volume
+        arguments:
+          parameters:
+            - name: pvc-size
+              value: '100Mi'
+      - name: generate-sw-catalogs-volume-repo
+        templateRef:
+          name: k8s-resources-wft
+          template: generate-volume
+        arguments:
+          parameters:
+            - name: pvc-size
+              value: '100Mi'
+    - - name: clone-fleet
+        templateRef:
+          name: git-wft
+          template: git-clone
+        arguments:
+          parameters:
+          - name: mount_path
+            value: "/fleet"
+          - name: repo_url
+            value: "{{inputs.parameters.git_fleet_url}}"
+          - name: destination_folder
+            value: "{{inputs.parameters.fleet_destination_folder}}"
+          - name: git_cred_secret
+            value: "{{inputs.parameters.git_fleet_cred_secret}}"
+          - name: git_volume_name
+            value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
+      - name: clone-sw-catalogs
+        templateRef:
+          name: git-wft
+          template: git-clone
+        arguments:
+          parameters:
+          - name: mount_path
+            value: "/sw-catalogs"
+          - name: repo_url
+            value: "{{inputs.parameters.git_sw_catalogs_url}}"
+          - name: destination_folder
+            value: "{{inputs.parameters.sw_catalogs_destination_folder}}"
+          - name: git_cred_secret
+            value: "{{inputs.parameters.git_sw_catalogs_cred_secret}}"
+          - name: git_volume_name
+            value: '{{steps.generate-sw-catalogs-volume-repo.outputs.parameters.pvc-name}}'
+    # ------ end of preparations for transaction
+
+    # ------ Transformations
+    # Create CAPI cluster in cloud (Openstack)
+    - - name: create-cluster
+        templateRef:
+          name: cluster-management-wft
+          template: create-capi-openstack-cluster
+        arguments:
+          parameters:
+          # Volumes with cloned repos
+          - name: fleet_volume_name
+            value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
+          - name: fleet_mount_path
+            value: "/fleet"
+          - name: sw_catalogs_volume_name
+            value: '{{steps.generate-sw-catalogs-volume-repo.outputs.parameters.pvc-name}}'
+          - name: sw_catalogs_mount_path
+            value: "/sw-catalogs"
+          # Specific parameters
+          - name: cluster_kustomization_name
+            value: "{{inputs.parameters.cluster_kustomization_name}}"
+          - name: cluster_name
+            value: "{{inputs.parameters.cluster_name}}"
+          - name: vm_size
+            value: "{{inputs.parameters.vm_size}}"
+          - name: node_count
+            value: "{{inputs.parameters.node_count}}"
+          - name: k8s_version
+            value: "{{inputs.parameters.k8s_version}}"
+          - name: providerconfig_name
+            value: "{{inputs.parameters.providerconfig_name}}"
+          - name: public_key_mgmt
+            value: "{{inputs.parameters.public_key_mgmt}}"
+          - name: public_key_new_cluster
+            value: "{{inputs.parameters.public_key_new_cluster}}"
+          - name: secret_name_private_age_key_for_new_cluster
+            value: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
+          - name: key_name_in_secret
+            value: "{{inputs.parameters.key_name_in_secret}}"
+          ## CAPI and CAPI Openstack specific parameters
+          - name: control_plane_vm_size
+            value: "{{inputs.parameters.control_plane_vm_size}}"
+          - name: control_plane_node_count
+            value: "{{inputs.parameters.control_plane_node_count}}"
+          - name: openstack_dns_nameservers
+            value: "{{inputs.parameters.openstack_dns_nameservers}}"
+          - name: openstack_external_network_id
+            value: "{{inputs.parameters.openstack_external_network_id}}"
+          - name: openstack_failure_domain
+            value: "{{inputs.parameters.openstack_failure_domain}}"
+          - name: openstack_ssh_key_name
+            value: "{{inputs.parameters.openstack_ssh_key_name}}"
+          - name: cluster_cni
+            value: "{{inputs.parameters.cluster_cni}}"
+          - name: openstack_worker_image_name
+            value: "{{inputs.parameters.openstack_worker_image_name}}"
+          - name: openstack_control_plane_image_name
+            value: "{{inputs.parameters.openstack_control_plane_image_name}}"
+          - name: capo_resources_namespace
+            value: "{{inputs.parameters.capo_resources_namespace}}"
+          ## Fed with `git_fleet_url` to avoid duplicates
+          - name: fleet_repo_url
+            value: "{{inputs.parameters.git_fleet_url}}"
+          ## Fed with `git_sw_catalogs_url` to avoid duplicates
+          - name: sw_catalogs_repo_url
+            value: "{{inputs.parameters.git_sw_catalogs_url}}"
+          - name: mgmt_project_name
+            value: "{{inputs.parameters.mgmt_project_name}}"
+          - name: skip_bootstrap
+            value: "{{inputs.parameters.skip_bootstrap}}"
+          # Other parameters - Recommended to keep defaults
+          - name: mgmt_cluster_name
+            value: "{{inputs.parameters.mgmt_cluster_name}}"
+          - name: base_templates_path
+            value: "{{inputs.parameters.base_templates_path}}"
+          - name: cloned_fleet_folder_name
+            value: "{{inputs.parameters.cloned_fleet_folder_name}}"
+          - name: cloned_sw_catalogs_folder_name
+            value: "{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
+          # Debug?
+          - name: debug
+            value: "{{inputs.parameters.debug}}"
+    # ------ end of transformations
+
+    # ------ Commit transaction
+    - - name: push-to-fleet
+        templateRef:
+          name: git-wft
+          template: git-commit-merge-push
+        arguments:
+          parameters:
+          - name: mount_path
+            value: "/fleet"
+          - name: repo_folder
+            value: "{{inputs.parameters.fleet_destination_folder}}"
+          - name: git_cred_secret
+            value: "{{inputs.parameters.git_fleet_cred_secret}}"
+          - name: git_volume_name
+            value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
+          - name: commit_message
+            value: "Create CAPI Openstack cluster {{inputs.parameters.cluster_kustomization_name}} at {{inputs.parameters.providerconfig_name}}"
+          - name: main_branch
+            value: main
+          - name: contrib_branch
+            value: osm_contrib
+          - name: dry_run
+            value: "{{inputs.parameters.dry_run}}"
+# ------ end of commit transaction
+
index 7ef0dc2..84f30b3 100644 (file)
@@ -34,6 +34,8 @@ spec:
     - name: cluster_kustomization_name
     - name: project_name
       value: "osm_admin"
+    - name: mgmt_cluster_name
+      value: ""
 
     # Debugging
     - name: dry_run
@@ -62,6 +64,7 @@ spec:
       # Specific parameters
       - name: cluster_kustomization_name
       - name: project_name
+      - name: mgmt_cluster_name
 
       # Debugging
       - name: dry_run
@@ -112,6 +115,8 @@ spec:
             value: "{{inputs.parameters.cluster_kustomization_name}}"
           - name: project_name
             value: "{{inputs.parameters.project_name}}"
+          - name: mgmt_cluster_name
+            value: "{{inputs.parameters.mgmt_cluster_name}}"
     # ------ end of transformations
 
     # ------ Commit transaction
index e2cb443..f8c1331 100644 (file)
@@ -35,6 +35,8 @@ spec:
     - name: project_name
       value: "osm_admin"
     - name: temp_kubeconfig_secret_name
+    - name: mgmt_cluster_name
+      value: ""
     - name: purge
       value: "true"
 
@@ -65,8 +67,9 @@ spec:
       # Specific parameters
       - name: cluster_kustomization_name
       - name: project_name
-      - name: purge
       - name: temp_kubeconfig_secret_name
+      - name: mgmt_cluster_name
+      - name: purge
 
       # Debugging
       - name: dry_run
@@ -117,6 +120,8 @@ spec:
             value: "{{inputs.parameters.cluster_kustomization_name}}"
           - name: project_name
             value: "{{inputs.parameters.project_name}}"
+          - name: mgmt_cluster_name
+            value: "{{inputs.parameters.mgmt_cluster_name}}"
           - name: purge
             value: "{{inputs.parameters.purge}}"
           - name: temp_kubeconfig_secret_name
diff --git a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-openshift-cluster-and-bootstrap-wft.yaml b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-openshift-cluster-and-bootstrap-wft.yaml
new file mode 100644 (file)
index 0000000..b0a0693
--- /dev/null
@@ -0,0 +1,303 @@
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+
+apiVersion: argoproj.io/v1alpha1
+kind: WorkflowTemplate
+metadata:
+  name: full-update-openshift-cluster-and-bootstrap-wft
+  namespace: osm-workflows
+
+spec:
+  arguments:
+    parameters:
+
+    # Fleet repo
+    - name: git_fleet_url
+    - name: fleet_destination_folder
+    - name: git_fleet_cred_secret
+
+    # SW-Catalogs repo
+    - name: git_sw_catalogs_url
+    - name: sw_catalogs_destination_folder
+    - name: git_sw_catalogs_cred_secret
+
+    # Specific parameters - Generic cluster creation
+    - name: cluster_kustomization_name
+    - name: cluster_name
+    - name: providerconfig_name
+    - name: vm_size
+    - name: node_count
+    - name: k8s_version
+
+    ## Specific parameters - Openshift
+    - name: control_plane_vm_size
+    - name: control_plane_node_count
+    - name: openstack_dns_nameservers
+    - name: openstack_external_network_id
+    - name: openstack_failure_domain
+    - name: openstack_ssh_key_name
+    - name: cluster_cni
+    - name: openstack_worker_image_name
+    - name: openstack_control_plane_image_name
+    - name: capo_resources_namespace
+
+    # Specific parameters - Bootstrap and credentials
+    - name: public_key_mgmt
+    - name: public_key_new_cluster
+    - name: secret_name_private_age_key_for_new_cluster
+    - name: key_name_in_secret
+      value: "agekey"
+    # Using `git_fleet_url` instead:
+    # - name: fleet_repo_url
+    # Using `git_sw_catalogs_url` instead:
+    # - name: sw_catalogs_repo_url
+    - name: mgmt_project_name
+      value: "osm_admin"
+
+    # Advanced parameters - Recommended to keep defaults
+    - name: mgmt_cluster_name
+      value: "_management"
+    - name: base_templates_path
+      value: "cloud-resources/capi"
+    - name: cloned_fleet_folder_name
+      value: "fleet-osm"
+    - name: cloned_sw_catalogs_folder_name
+      value: "sw-catalogs-osm"
+
+    # Debug/dry run?
+    - name: debug
+      value: "false"
+    - name: dry_run
+      value: "false"
+
+
+  # # Cleanup policy
+  # ttlStrategy:
+  #   secondsAfterCompletion: 100 # Time to live after workflow is completed, replaces ttlSecondsAfterFinished
+  #   secondsAfterSuccess: 50     # Time to live after workflow is successful
+  #   secondsAfterFailure: 50     # Time to live after workflow fails
+
+  entrypoint: update-cluster-and-bootstrap
+
+  templates:
+  # Main template
+  - name: update-cluster-and-bootstrap
+    inputs:
+      parameters:
+      # Fleet repo
+      - name: git_fleet_url
+      - name: fleet_destination_folder
+      - name: git_fleet_cred_secret
+      # SW-Catalogs repo
+      - name: git_sw_catalogs_url
+      - name: sw_catalogs_destination_folder
+      - name: git_sw_catalogs_cred_secret
+      # Specific parameters
+      - name: cluster_kustomization_name
+      - name: cluster_name
+      - name: providerconfig_name
+      - name: vm_size
+      - name: node_count
+      - name: k8s_version
+      - name: public_key_mgmt
+      - name: public_key_new_cluster
+      - name: secret_name_private_age_key_for_new_cluster
+      - name: key_name_in_secret
+      ## Openshift specific parameters
+      - name: control_plane_vm_size
+      - name: control_plane_node_count
+      - name: openstack_dns_nameservers
+      - name: openstack_external_network_id
+      - name: openstack_failure_domain
+      - name: openstack_ssh_key_name
+      - name: cluster_cni
+      - name: openstack_worker_image_name
+      - name: openstack_control_plane_image_name
+      - name: capo_resources_namespace
+      # Other parameters - Recommended to keep defaults
+      # - name: fleet_repo_url
+      # - name: sw_catalogs_repo_url
+      - name: mgmt_project_name
+      # - name: skip_bootstrap
+      # Other parameters - Recommended to keep defaults
+      - name: mgmt_cluster_name
+      - name: base_templates_path
+      - name: cloned_fleet_folder_name
+      - name: cloned_sw_catalogs_folder_name
+      # Debug/dry run?
+      - name: debug
+      - name: dry_run
+
+    steps:
+    # ------ Preparations for transaction
+    - - name: generate-fleet-volume-repo
+        templateRef:
+          name: k8s-resources-wft
+          template: generate-volume
+        arguments:
+          parameters:
+            - name: pvc-size
+              value: '100Mi'
+      - name: generate-sw-catalogs-volume-repo
+        templateRef:
+          name: k8s-resources-wft
+          template: generate-volume
+        arguments:
+          parameters:
+            - name: pvc-size
+              value: '100Mi'
+    - - name: clone-fleet
+        templateRef:
+          name: git-wft
+          template: git-clone
+        arguments:
+          parameters:
+          - name: mount_path
+            value: "/fleet"
+          - name: repo_url
+            value: "{{inputs.parameters.git_fleet_url}}"
+          - name: destination_folder
+            value: "{{inputs.parameters.fleet_destination_folder}}"
+          - name: git_cred_secret
+            value: "{{inputs.parameters.git_fleet_cred_secret}}"
+          - name: git_volume_name
+            value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
+      - name: clone-sw-catalogs
+        templateRef:
+          name: git-wft
+          template: git-clone
+        arguments:
+          parameters:
+          - name: mount_path
+            value: "/sw-catalogs"
+          - name: repo_url
+            value: "{{inputs.parameters.git_sw_catalogs_url}}"
+          - name: destination_folder
+            value: "{{inputs.parameters.sw_catalogs_destination_folder}}"
+          - name: git_cred_secret
+            value: "{{inputs.parameters.git_sw_catalogs_cred_secret}}"
+          - name: git_volume_name
+            value: '{{steps.generate-sw-catalogs-volume-repo.outputs.parameters.pvc-name}}'
+    # ------ end of preparations for transaction
+
+    # ------ Transformations
+    # Update CAPI cluster in cloud (Openstack)
+    - - name: update-cluster
+        templateRef:
+          name: cluster-management-wft
+          template: update-capi-openstack-cluster
+        arguments:
+          parameters:
+          # Volumes with cloned repos
+          - name: fleet_volume_name
+            value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
+          - name: fleet_mount_path
+            value: "/fleet"
+          - name: sw_catalogs_volume_name
+            value: '{{steps.generate-sw-catalogs-volume-repo.outputs.parameters.pvc-name}}'
+          - name: sw_catalogs_mount_path
+            value: "/sw-catalogs"
+          # Specific parameters
+          - name: cluster_kustomization_name
+            value: "{{inputs.parameters.cluster_kustomization_name}}"
+          - name: cluster_name
+            value: "{{inputs.parameters.cluster_name}}"
+          - name: vm_size
+            value: "{{inputs.parameters.vm_size}}"
+          - name: node_count
+            value: "{{inputs.parameters.node_count}}"
+          - name: k8s_version
+            value: "{{inputs.parameters.k8s_version}}"
+          - name: providerconfig_name
+            value: "{{inputs.parameters.providerconfig_name}}"
+          - name: public_key_mgmt
+            value: "{{inputs.parameters.public_key_mgmt}}"
+          - name: public_key_new_cluster
+            value: "{{inputs.parameters.public_key_new_cluster}}"
+          - name: secret_name_private_age_key_for_new_cluster
+            value: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
+          - name: key_name_in_secret
+            value: "{{inputs.parameters.key_name_in_secret}}"
+          ## CAPI and CAPI Openstack specific parameters
+          - name: control_plane_vm_size
+            value: "{{inputs.parameters.control_plane_vm_size}}"
+          - name: control_plane_node_count
+            value: "{{inputs.parameters.control_plane_node_count}}"
+          - name: openstack_dns_nameservers
+            value: "{{inputs.parameters.openstack_dns_nameservers}}"
+          - name: openstack_external_network_id
+            value: "{{inputs.parameters.openstack_external_network_id}}"
+          - name: openstack_failure_domain
+            value: "{{inputs.parameters.openstack_failure_domain}}"
+          - name: openstack_ssh_key_name
+            value: "{{inputs.parameters.openstack_ssh_key_name}}"
+          - name: cluster_cni
+            value: "{{inputs.parameters.cluster_cni}}"
+          - name: openstack_worker_image_name
+            value: "{{inputs.parameters.openstack_worker_image_name}}"
+          - name: openstack_control_plane_image_name
+            value: "{{inputs.parameters.openstack_control_plane_image_name}}"
+          - name: capo_resources_namespace
+            value: "{{inputs.parameters.capo_resources_namespace}}"
+          ## Fed with `git_fleet_url` to avoid duplicates
+          - name: fleet_repo_url
+            value: "{{inputs.parameters.git_fleet_url}}"
+          ## Fed with `git_sw_catalogs_url` to avoid duplicates
+          - name: sw_catalogs_repo_url
+            value: "{{inputs.parameters.git_sw_catalogs_url}}"
+          - name: mgmt_project_name
+            value: "{{inputs.parameters.mgmt_project_name}}"
+          # - name: skip_bootstrap
+          #   value: "{{inputs.parameters.skip_bootstrap}}"
+          # Other parameters - Recommended to keep defaults
+          - name: mgmt_cluster_name
+            value: "{{inputs.parameters.mgmt_cluster_name}}"
+          - name: base_templates_path
+            value: "{{inputs.parameters.base_templates_path}}"
+          - name: cloned_fleet_folder_name
+            value: "{{inputs.parameters.cloned_fleet_folder_name}}"
+          - name: cloned_sw_catalogs_folder_name
+            value: "{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
+          # Debug?
+          - name: debug
+            value: "{{inputs.parameters.debug}}"
+    # ------ end of transformations
+
+    # ------ Commit transaction
+    - - name: push-to-fleet
+        templateRef:
+          name: git-wft
+          template: git-commit-merge-push
+        arguments:
+          parameters:
+          - name: mount_path
+            value: "/fleet"
+          - name: repo_folder
+            value: "{{inputs.parameters.fleet_destination_folder}}"
+          - name: git_cred_secret
+            value: "{{inputs.parameters.git_fleet_cred_secret}}"
+          - name: git_volume_name
+            value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
+          - name: commit_message
+            value: "Update CAPI Openstack cluster {{inputs.parameters.cluster_kustomization_name}} at {{inputs.parameters.providerconfig_name}}"
+          - name: main_branch
+            value: main
+          - name: contrib_branch
+            value: osm_contrib
+          - name: dry_run
+            value: "{{inputs.parameters.dry_run}}"
+# ------ end of commit transaction