From: garciadeblas Date: Thu, 7 Aug 2025 17:54:52 +0000 (+0200) Subject: Feature 11057: Cluster management in Openshift-based infrastructures. Add ArgoWF... X-Git-Tag: v18.0.0~11 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=36b6ad9efe83674bc8b7fb1fce2e6758241f5d99;p=osm%2Fdevops.git Feature 11057: Cluster management in Openshift-based infrastructures. Add ArgoWF templates Change-Id: Idf71303701613c430e3e746808c3a5a64eab41ef Signed-off-by: garciadeblas --- diff --git a/docker/osm-krm-functions/scripts/library/krm-functions.rc b/docker/osm-krm-functions/scripts/library/krm-functions.rc index 30f1b544..497ddee4 100644 --- a/docker/osm-krm-functions/scripts/library/krm-functions.rc +++ b/docker/osm-krm-functions/scripts/library/krm-functions.rc @@ -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"}" + 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}" \ 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 83d8ecb5..81566596 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 @@ -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 index 00000000..0f1567e4 --- /dev/null +++ b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-create-openshift-cluster-and-bootstrap-wft.yaml @@ -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 + diff --git a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-delete-cluster-wft.yaml b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-delete-cluster-wft.yaml index 7ef0dc22..84f30b31 100644 --- a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-delete-cluster-wft.yaml +++ b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-delete-cluster-wft.yaml @@ -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 diff --git a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-purge-delete-cluster-wft.yaml b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-purge-delete-cluster-wft.yaml index e2cb443b..f8c1331a 100644 --- a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-purge-delete-cluster-wft.yaml +++ b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-purge-delete-cluster-wft.yaml @@ -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 index 00000000..ff47ca4a --- /dev/null +++ b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-openshift-cluster-and-bootstrap-wft.yaml @@ -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-capi-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 - CAPI and CAPI Openstack + - 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 + ## CAPI and CAPI Openstack 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