From 55c98950061349c53d1d812ee63826202596ae44 Mon Sep 17 00:00:00 2001 From: garciadeblas Date: Thu, 7 Aug 2025 13:43:48 +0200 Subject: [PATCH] Feature 11049. Cluster management with CAPI in Openstack-based clouds. Add ArgoWF templates Change-Id: Iaaa96aa7bd1189f4c062c558673827d72578d9c3 Signed-off-by: garciadeblas --- .../scripts/library/krm-functions.rc | 19 +- .../cluster-management-wft.yaml | 249 ++++++++++++++ ...create-capi-cluster-and-bootstrap-wft.yaml | 310 ++++++++++++++++++ ...update-capi-cluster-and-bootstrap-wft.yaml | 303 +++++++++++++++++ ...-crossplane-cluster-and-bootstrap-wft.yaml | 2 +- 5 files changed, 873 insertions(+), 10 deletions(-) create mode 100644 installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-create-capi-cluster-and-bootstrap-wft.yaml create mode 100644 installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-capi-cluster-and-bootstrap-wft.yaml diff --git a/docker/osm-krm-functions/scripts/library/krm-functions.rc b/docker/osm-krm-functions/scripts/library/krm-functions.rc index 2b5d6966..30f1b544 100644 --- a/docker/osm-krm-functions/scripts/library/krm-functions.rc +++ b/docker/osm-krm-functions/scripts/library/krm-functions.rc @@ -1151,7 +1151,7 @@ function create_capi_openstack_cluster() { local MGMT_PROJECT_NAME="${24:-"osm_admin"}" local MGMT_CLUSTER_NAME="${25:-"_management"}" local BASE_TEMPLATES_PATH="${26:-"cloud-resources/capi"}" - local NAMESPACE="${27:-"managed-resources"}" + local CAPO_RESOURCES_NAMESPACE="${27:-"managed-resources"}" # Varibles with valus from convention. local CLUSTER_TYPE="openstack" @@ -1193,7 +1193,7 @@ function create_capi_openstack_cluster() { "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${CLUSTER_KUSTOMIZATION_NAME}\")" | \ patch_replace \ ".spec.postBuild.substitute.namespace" \ - "${NAMESPACE}" \ + "${CAPO_RESOURCES_NAMESPACE}" \ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${CLUSTER_KUSTOMIZATION_NAME}\")" | \ patch_replace \ ".spec.postBuild.substitute.worker_machine_count" \ @@ -1274,9 +1274,9 @@ function update_capi_openstack_cluster() { local CLUSTER_KUSTOMIZATION_NAME="${1}" local CLUSTER_NAME="${2}" local VM_SIZE="${3}" - local VM_SIZE_CONTROL_PLANE="${4}" + local VM_SIZE_CONTROL_PLANE="${4:-"${VM_SIZE}"}" local NODE_COUNT="${5}" - local NODE_COUNT_CONTROLPLANE="${6}" + local NODE_COUNT_CONTROLPLANE="${6:-"1"}" local K8S_VERSION="${7}" # OpenStack specific local OPENSTACK_CLOUD_NAME="${8}" @@ -1296,10 +1296,11 @@ function update_capi_openstack_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 MGMT_PROJECT_NAME="${23:-"osm_admin"}" - local MGMT_CLUSTER_NAME="${24:-"_management"}" - local BASE_TEMPLATES_PATH="${25:-"cloud-resources/capi"}" - local NAMESPACE="${26:-"managed-resources"}" + local SKIP_BOOTSTRAP="${23:-"false"}" + local MGMT_PROJECT_NAME="${24:-"osm_admin"}" + local MGMT_CLUSTER_NAME="${25:-"_management"}" + local BASE_TEMPLATES_PATH="${26:-"cloud-resources/capi"}" + local CAPO_RESOURCES_NAMESPACE="${27:-"managed-resources"}" # Determine key folders in Fleet local MGMT_RESOURCES_DIR="${FLEET_REPO_DIR}/${MGMT_PROJECT_NAME}/managed-resources/${MGMT_CLUSTER_NAME}" @@ -1334,7 +1335,7 @@ function update_capi_openstack_cluster() { "${MGMT_PROJECT_NAME}" \ "${MGMT_CLUSTER_NAME}" \ "${BASE_TEMPLATES_PATH}" \ - "${NAMESPACE}" + "${CAPO_RESOURCES_NAMESPACE}" } # Create remote Openshift cluster via ACM 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 50b9b0e1..83d8ecb5 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 @@ -244,6 +244,255 @@ spec: # fsGroup: 10000 + # Create a PaaS cluster using CAPI (Openstack) + - name: create-capi-openstack-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" + ## CAPI and CAPI Openstack specific parameters + - name: control_plane_vm_size + value: "" + - name: control_plane_node_count + value: "" + - name: openstack_dns_nameservers + value: "" + - name: openstack_external_network_id + value: "" + - name: openstack_failure_domain + value: "" + - name: openstack_ssh_key_name + value: "" + - name: cluster_cni + value: "" + - name: openstack_worker_image_name + value: "" + - name: openstack_control_plane_image_name + 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" + - 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_capi_openstack_cluster + - "{{inputs.parameters.cluster_kustomization_name}}" + - "{{inputs.parameters.cluster_name}}" + - "{{inputs.parameters.vm_size}}" + - "{{inputs.parameters.control_plane_vm_size}}" + - "{{inputs.parameters.node_count}}" + - "{{inputs.parameters.control_plane_node_count}}" + - "{{inputs.parameters.k8s_version}}" + - "{{inputs.parameters.providerconfig_name}}" + - "{{inputs.parameters.openstack_dns_nameservers}}" + - "{{inputs.parameters.openstack_external_network_id}}" + - "{{inputs.parameters.openstack_failure_domain}}" + - "{{inputs.parameters.openstack_ssh_key_name}}" + - "{{inputs.parameters.cluster_cni}}" + - "{{inputs.parameters.openstack_worker_image_name}}" + - "{{inputs.parameters.openstack_control_plane_image_name}}" + - "{{inputs.parameters.public_key_mgmt}}" + - "{{inputs.parameters.public_key_new_cluster}}" + - '' + - "{{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.mgmt_cluster_name}}" + - "{{inputs.parameters.base_templates_path}}" + - '{{inputs.parameters.capo_resources_namespace}}' + + 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-capi-openstack-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" + ## CAPI and CAPI Openstack specific parameters + - name: control_plane_vm_size + value: "" + - name: control_plane_node_count + value: "" + - name: openstack_dns_nameservers + value: "" + - name: openstack_external_network_id + value: "" + - name: openstack_failure_domain + value: "" + - name: openstack_ssh_key_name + value: "" + - name: cluster_cni + value: "" + - name: openstack_worker_image_name + value: "" + - name: openstack_control_plane_image_name + 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" + - 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_capi_openstack_cluster + - "{{inputs.parameters.cluster_kustomization_name}}" + - "{{inputs.parameters.cluster_name}}" + - "{{inputs.parameters.vm_size}}" + - "{{inputs.parameters.control_plane_vm_size}}" + - "{{inputs.parameters.node_count}}" + - "{{inputs.parameters.control_plane_node_count}}" + - "{{inputs.parameters.k8s_version}}" + - "{{inputs.parameters.providerconfig_name}}" + - "{{inputs.parameters.openstack_dns_nameservers}}" + - "{{inputs.parameters.openstack_external_network_id}}" + - "{{inputs.parameters.openstack_failure_domain}}" + - "{{inputs.parameters.openstack_ssh_key_name}}" + - "{{inputs.parameters.cluster_cni}}" + - "{{inputs.parameters.openstack_worker_image_name}}" + - "{{inputs.parameters.openstack_control_plane_image_name}}" + - "{{inputs.parameters.public_key_mgmt}}" + - "{{inputs.parameters.public_key_new_cluster}}" + - '' + - "{{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.mgmt_cluster_name}}" + - "{{inputs.parameters.base_templates_path}}" + - '{{inputs.parameters.capo_resources_namespace}}' + + 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: diff --git a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-create-capi-cluster-and-bootstrap-wft.yaml b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-create-capi-cluster-and-bootstrap-wft.yaml new file mode 100644 index 00000000..246763bd --- /dev/null +++ b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-create-capi-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-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: 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 + ## 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 + - 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-update-capi-cluster-and-bootstrap-wft.yaml b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-capi-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-capi-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 diff --git a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-crossplane-cluster-and-bootstrap-wft.yaml b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-crossplane-cluster-and-bootstrap-wft.yaml index c47a71a6..a2922f17 100644 --- a/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-crossplane-cluster-and-bootstrap-wft.yaml +++ b/installers/flux/templates/sw-catalogs/infra-configs/osm-workflows/templates/wf-templates/canned-operations/full-update-crossplane-cluster-and-bootstrap-wft.yaml @@ -187,7 +187,7 @@ spec: # ------ end of preparations for transaction # ------ Transformations - # Create cluster in target cloud + # Update cluster in target cloud - - name: update-cluster templateRef: name: cluster-management-wft -- 2.25.1