From 8ce057913890773b65166c3608eef9aa8eef20e6 Mon Sep 17 00:00:00 2001 From: "max.bed4d" Date: Tue, 9 Sep 2025 09:17:46 +0100 Subject: [PATCH 1/6] Add DiB overcloud image build capabilities for both x86 & aarch64 --- .../workflows/overcloud-host-image-build.yml | 101 ++++++++++++++++-- .../ansible/openstack-host-image-upload.yml | 2 +- etc/kayobe/kolla.yml | 10 +- etc/kayobe/overcloud-dib.yml | 3 + etc/kayobe/stackhpc-overcloud-dib.yml | 51 +++++---- etc/kayobe/stackhpc-overcloud-host-images.yml | 1 + etc/kayobe/stackhpc.yml | 4 + 7 files changed, 140 insertions(+), 32 deletions(-) diff --git a/.github/workflows/overcloud-host-image-build.yml b/.github/workflows/overcloud-host-image-build.yml index 145cc3170f..b98540d977 100644 --- a/.github/workflows/overcloud-host-image-build.yml +++ b/.github/workflows/overcloud-host-image-build.yml @@ -11,6 +11,10 @@ on: description: Build Ubuntu 24.04 Noble type: boolean default: true + ubuntu-jammy: + description: Build Ubuntu 22.04 Jammy + type: boolean + default: False runner_env: description: Which cloud to run on? type: choice @@ -18,6 +22,13 @@ on: options: - SMS Lab - Leafcloud + cpu-platform-architecture: + description: Select the image's build architecture + type: choice + default: x86_64 + options: + - x86_64 + - aarch64 secrets: KAYOBE_VAULT_PASSWORD: required: true @@ -32,6 +43,8 @@ env: ANSIBLE_FORCE_COLOR: True KAYOBE_ENVIRONMENT: ci-builder KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} + overcloud_dib_architecture: ${{ inputs.cpu-platform-architecture == 'x86_64' && 'amd64' || 'arm64' }} + pulp_artifact_path: ${{ inputs.cpu-platform-architecture == 'x86_64' && 'kayobe-images' || 'kayobe-images/aarch64' }} jobs: runner-selection: uses: ./.github/workflows/runner-selector.yml @@ -212,7 +225,7 @@ jobs: source venvs/kayobe/bin/activate && source src/kayobe-config/kayobe-env --environment ci-builder && kayobe seed host command run \ - --command "sudo apt update && sudo apt -y install gcc git libffi-dev python3-dev python-is-python3 python3-venv containerd docker.io docker-buildx" --show-output + --command "sudo apt update && sudo apt -y install gcc git libffi-dev python3-dev python-is-python3 python3-venv containerd docker.io docker-buildx qemu-user-static" --show-output env: KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} @@ -256,7 +269,7 @@ jobs: src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \ -e artifact_path=/opt/kayobe/images/overcloud-rocky-9 \ -e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e artifact_type="kayobe-images" \ + -e artifact_type=${{ env.pulp_artifact_path }} \ -e file_regex="*.qcow2" \ -e os_distribution="rocky" \ -e os_release="9" @@ -271,7 +284,8 @@ jobs: kayobe playbook run \ src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ -e local_image_path="/opt/kayobe/images/overcloud-rocky-9/overcloud-rocky-9.qcow2" \ - -e image_name=overcloud-rocky-9-${{ steps.host_image_tag.outputs.host_image_tag }} + -e image_name=overcloud-rocky-9-${{ steps.host_image_tag.outputs.host_image_tag }} \ + -e cpu-platform=${{ env.overcloud_dib_architecture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }} @@ -285,13 +299,84 @@ jobs: kayobe playbook run \ src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ -e local_image_path="/opt/kayobe/images/overcloud-rocky-9/overcloud-rocky-9.qcow2" \ - -e image_name=overcloud-rocky-9-${{ steps.host_image_tag.outputs.host_image_tag }} + -e image_name=overcloud-rocky-9-${{ steps.host_image_tag.outputs.host_image_tag }} \ + -e cpu-platform=${{ env.overcloud_dib_architecture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML_OTHER_CLOUD }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID_OTHER_CLOUD }} OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET_OTHER_CLOUD }} if: inputs.rocky9 && steps.build_rocky_9.outcome == 'success' + - name: Build an Ubuntu Jammy 22.04 overcloud host image + id: build_ubuntu_jammy + continue-on-error: true + run: | + source venvs/kayobe/bin/activate && + source src/kayobe-config/kayobe-env --environment ci-builder && + kayobe overcloud host image build --force-rebuild \ + -e os_distribution="ubuntu" \ + -e os_release="jammy" \ + -e stackhpc_overcloud_dib_name=overcloud-ubuntu-jammy + env: + KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} + if: inputs.ubuntu-jammy + + - name: Show last error logs + continue-on-error: true + run: | + source venvs/kayobe/bin/activate && + source src/kayobe-config/kayobe-env --environment ci-builder && + kayobe seed host command run --command "tail -200 /opt/kayobe/images/overcloud-ubuntu-jammy/overcloud-ubuntu-jammy.stdout" --show-output + env: + KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} + if: steps.build_ubuntu_jammy.outcome == 'failure' + + - name: Upload Ubuntu Jammy 22.04 overcloud host image to Ark + run: | + source venvs/kayobe/bin/activate && + source src/kayobe-config/kayobe-env --environment ci-builder && + kayobe playbook run \ + src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \ + -e artifact_path=/opt/kayobe/images/overcloud-ubuntu-jammy \ + -e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \ + -e artifact_type=${{ env.pulp_artifact_path }} \ + -e file_regex="*.qcow2" \ + -e os_distribution="ubuntu" \ + -e os_release="jammy" + env: + KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} + if: inputs.ubuntu-jammy && steps.build_ubuntu_jammy.outcome == 'success' + + - name: Upload Ubuntu Jammy overcloud host image to current Dev Cloud (SMS/Leafcloud) + run: | + source venvs/kayobe/bin/activate && + source src/kayobe-config/kayobe-env --environment ci-builder && + kayobe playbook run \ + src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ + -e local_image_path="/opt/kayobe/images/overcloud-ubuntu-jammy/overcloud-ubuntu-jammy.qcow2" \ + -e image_name=overcloud-ubuntu-jammy-${{ steps.host_image_tag.outputs.host_image_tag }} \ + -e cpu-platform=${{ env.overcloud_dib_architecture }} + env: + CLOUDS_YAML: ${{ secrets.CLOUDS_YAML }} + OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }} + OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }} + if: inputs.ubuntu-jammy && steps.build_ubuntu_jammy.outcome == 'success' + + - name: Upload Ubuntu Jammy overcloud host image to other Dev Cloud (Leafcloud/SMS) + run: | + source venvs/kayobe/bin/activate && + source src/kayobe-config/kayobe-env --environment ci-builder && + kayobe playbook run \ + src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ + -e local_image_path="/opt/kayobe/images/overcloud-ubuntu-jammy/overcloud-ubuntu-jammy.qcow2" \ + -e image_name=overcloud-ubuntu-jammy-${{ steps.host_image_tag.outputs.host_image_tag }} \ + -e cpu-platform=${{ env.overcloud_dib_architecture }} + env: + CLOUDS_YAML: ${{ secrets.CLOUDS_YAML_OTHER_CLOUD }} + OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID_OTHER_CLOUD }} + OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET_OTHER_CLOUD }} + if: inputs.ubuntu-jammy && steps.build_ubuntu_jammy.outcome == 'success' + - name: Build an Ubuntu Noble 24.04 overcloud host image id: build_ubuntu_noble continue-on-error: true @@ -324,7 +409,7 @@ jobs: src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \ -e artifact_path=/opt/kayobe/images/overcloud-ubuntu-noble \ -e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e artifact_type="kayobe-images" \ + -e artifact_type=${{ env.pulp_artifact_path }} \ -e file_regex="*.qcow2" \ -e os_distribution="ubuntu" \ -e os_release="noble" @@ -339,7 +424,8 @@ jobs: kayobe playbook run \ src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ -e local_image_path="/opt/kayobe/images/overcloud-ubuntu-noble/overcloud-ubuntu-noble.qcow2" \ - -e image_name=overcloud-ubuntu-noble-${{ steps.host_image_tag.outputs.host_image_tag }} + -e image_name=overcloud-ubuntu-noble-${{ steps.host_image_tag.outputs.host_image_tag }} \ + -e cpu-platform=${{ env.overcloud_dib_architecture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }} @@ -353,7 +439,8 @@ jobs: kayobe playbook run \ src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ -e local_image_path="/opt/kayobe/images/overcloud-ubuntu-noble/overcloud-ubuntu-noble.qcow2" \ - -e image_name=overcloud-ubuntu-noble-${{ steps.host_image_tag.outputs.host_image_tag }} + -e image_name=overcloud-ubuntu-noble-${{ steps.host_image_tag.outputs.host_image_tag }} \ + -e cpu-platform=${{ env.overcloud_dib_architecture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML_OTHER_CLOUD }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID_OTHER_CLOUD }} diff --git a/etc/kayobe/ansible/openstack-host-image-upload.yml b/etc/kayobe/ansible/openstack-host-image-upload.yml index daff0549d1..128780ec50 100644 --- a/etc/kayobe/ansible/openstack-host-image-upload.yml +++ b/etc/kayobe/ansible/openstack-host-image-upload.yml @@ -6,7 +6,7 @@ hosts: seed vars: local_image_path: /opt/kayobe/images/overcloud-{{ os_distribution }}-{{ os_release }}/overcloud-{{ os_distribution }}-{{ os_release }}.qcow2 - image_name: overcloud-{{ os_distribution }}-{{ os_release }} + image_name: overcloud-{{ os_distribution }}-{{ os_release }}-{{ cpu-platform }} tasks: - name: Upload image to Glance block: diff --git a/etc/kayobe/kolla.yml b/etc/kayobe/kolla.yml index 6892d9e999..78ecd2e525 100644 --- a/etc/kayobe/kolla.yml +++ b/etc/kayobe/kolla.yml @@ -62,11 +62,6 @@ kolla_ansible_source_version: "{{ stackhpc_kolla_ansible_source_version }}" ############################################################################### # Kolla configuration. -# Kolla base container image architecture. Options are "x86_64", "aarch64". -# Default is "{{ ansible_facts.architecture }}" -# NOTE(bbezak): evaluating this var locally for non facts gathering playbooks -kolla_base_arch: "{{ 'aarch64' if lookup('pipe','uname -m') in ['aarch64','arm64'] else 'x86_64' }}" - # Kolla base container image distribution. Options are "centos", "debian", # "rocky", "ubuntu". Default is {{ os_distribution }}. #kolla_base_distro: @@ -443,6 +438,11 @@ kolla_build_customizations: "{{ kolla_build_customizations_common | combine(koll # Dict mapping Kolla Dockerfile ARG names to their values. kolla_build_args: {} +############################################################################### +# Kolla platform architecture configuration. + +kolla_base_arch: "{{ 'aarch64' if stackhpc_cpu_arch == 'arm64' else stackhpc_cpu_arch }}" + ############################################################################### # Kolla-ansible inventory configuration. diff --git a/etc/kayobe/overcloud-dib.yml b/etc/kayobe/overcloud-dib.yml index 625e86fa18..a492734a11 100644 --- a/etc/kayobe/overcloud-dib.yml +++ b/etc/kayobe/overcloud-dib.yml @@ -66,6 +66,9 @@ overcloud_dib_host_packages_extra: # elements. See stackhpc.openstack.os_images role for usage. Default is empty. overcloud_dib_git_elements_extra: "{{ stackhpc_dib_image_elements_repos }}" +# Selects the architecture of the overcloud host image being built. +overcloud_dib_architecture: "{{ 'amd64' if stackhpc_cpu_arch == 'x86_64' else 'arm64' }}" + # List of git repositories containing Diskimage Builder (DIB) elements. See # stackhpc.openstack.os_images role for usage. Default is a combination of # overcloud_dib_git_elements_default and overcloud_dib_git_elements_extra. diff --git a/etc/kayobe/stackhpc-overcloud-dib.yml b/etc/kayobe/stackhpc-overcloud-dib.yml index 89d6ac5984..3165ed214c 100644 --- a/etc/kayobe/stackhpc-overcloud-dib.yml +++ b/etc/kayobe/stackhpc-overcloud-dib.yml @@ -15,6 +15,9 @@ stackhpc_overcloud_dib_host_image: elements: "{{ stackhpc_overcloud_dib_elements }}" env: "{{ stackhpc_overcloud_dib_env_vars }}" packages: "{{ stackhpc_overcloud_dib_packages }}" + properties: + - cpu_arch: "{{ overcloud_dib_architecture }}" + # StackHPC overcloud DIB image name. stackhpc_overcloud_dib_name: "deployment_image" @@ -55,6 +58,7 @@ stackhpc_overcloud_dib_env_vars_default: YUM: dnf # Workaround for stack user home ownership bug DIB_IMAGE_CACHE: "/tmp/yum" + DIB_CONTAINERFILE_BUILDOPTS: "--platform linux/{{ overcloud_dib_architecture }}" stackhpc_overcloud_dib_env_vars_ark: DIB_CONTAINERFILE_BUILDOPTS: >- @@ -63,25 +67,34 @@ stackhpc_overcloud_dib_env_vars_ark: DIB_DISTRIBUTION_MIRROR: "{{ stackhpc_repo_ubuntu_noble_url if os_distribution == 'ubuntu' else '' }}" # StackHPC overcloud DIB image packages. -stackhpc_overcloud_dib_packages: - - "ethtool" - - "git" - - "less" - - "logrotate" - - "net-tools" - - "nvme-cli" - - "pciutils" - - "python3" - - "smartmontools" - - "vim" - - "{% if os_distribution == 'ubuntu' %}netbase{% endif %}" - - "{% if os_distribution == 'ubuntu' %}iputils-ping{% endif %}" - - "{% if os_distribution == 'ubuntu' %}curl{% endif %}" - - "{% if os_distribution == 'ubuntu' %}apt-utils{% endif %}" - - "{% if os_distribution == 'rocky' %}NetworkManager-config-server{% endif %}" - - "{% if os_distribution == 'rocky' %}linux-firmware{% endif %}" - - "{% if os_distribution == 'rocky' %}cloud-utils-growpart{% endif %}" - - "{% if os_distribution == 'ubuntu' %}cloud-guest-utils{% endif %}" +stackhpc_overcloud_dib_packages_common: + - ethtool + - git + - less + - logrotate + - net-tools + - nvme-cli + - pciutils + - python3 + - smartmontools + - vim + +stackhpc_overcloud_dib_packages_ubuntu: + - netbase + - iputils-ping + - curl + - apt-utils + - cloud-guest-utils + +stackhpc_overcloud_dib_packages_rocky: + - NetworkManager-config-server + - linux-firmware + - cloud-utils-growpart + +stackhpc_overcloud_dib_packages: >- + {{ stackhpc_overcloud_dib_packages_common + + (stackhpc_overcloud_dib_packages_ubuntu if os_distribution == 'ubuntu' else []) + + (stackhpc_overcloud_dib_packages_rocky if os_distribution == 'rocky' else []) }} # StackHPC overcloud DIB image block device configuration. # This image layout conforms to the CIS partition benchmarks. diff --git a/etc/kayobe/stackhpc-overcloud-host-images.yml b/etc/kayobe/stackhpc-overcloud-host-images.yml index 59c3626b8e..3c995a0916 100644 --- a/etc/kayobe/stackhpc-overcloud-host-images.yml +++ b/etc/kayobe/stackhpc-overcloud-host-images.yml @@ -11,6 +11,7 @@ stackhpc_build_overcloud_image_from_pulp_package_mirrors: false # The overcloud host image source, defined by os_distribution, os_release, # and the current stable version. stackhpc_overcloud_host_image_url: "{{ stackhpc_release_pulp_content_url_with_auth }}/kayobe-images/\ + {{ 'aarch64/' if stackhpc_cpu_arch == 'arm64' else '' }}\ {{ openstack_release }}/{{ os_distribution }}/{{ os_release }}/\ {{ stackhpc_overcloud_host_image_version }}/\ overcloud-{{ os_distribution }}-{{ os_release }}.qcow2" diff --git a/etc/kayobe/stackhpc.yml b/etc/kayobe/stackhpc.yml index d34d6eb7a2..4bc34728b8 100644 --- a/etc/kayobe/stackhpc.yml +++ b/etc/kayobe/stackhpc.yml @@ -27,6 +27,10 @@ stackhpc_include_os_minor_version_in_repo_url: false stackhpc_rocky_9_url_version: "{{ '9.' + stackhpc_pulp_repo_rocky_9_minor_version | string if stackhpc_include_os_minor_version_in_repo_url | bool else '9' }}" +# Pick build architecture for kolla and disk image builder +# Choose between x86_64 or arm64 +stackhpc_cpu_arch: 'x86_64' + ############################################################################### # Debs # Ubuntu noble From b06f05b2c7838a6b0ea6972f81b2cb99473e2b84 Mon Sep 17 00:00:00 2001 From: "max.bed4d" Date: Tue, 9 Sep 2025 12:21:06 +0100 Subject: [PATCH 2/6] Amend architecture defining variable --- etc/kayobe/stackhpc-overcloud-dib.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/etc/kayobe/stackhpc-overcloud-dib.yml b/etc/kayobe/stackhpc-overcloud-dib.yml index 3165ed214c..1da20507c1 100644 --- a/etc/kayobe/stackhpc-overcloud-dib.yml +++ b/etc/kayobe/stackhpc-overcloud-dib.yml @@ -15,9 +15,7 @@ stackhpc_overcloud_dib_host_image: elements: "{{ stackhpc_overcloud_dib_elements }}" env: "{{ stackhpc_overcloud_dib_env_vars }}" packages: "{{ stackhpc_overcloud_dib_packages }}" - properties: - - cpu_arch: "{{ overcloud_dib_architecture }}" - + architecture: "{{ overcloud_dib_architecture }}" # StackHPC overcloud DIB image name. stackhpc_overcloud_dib_name: "deployment_image" From 96a7a4e03bf278f441a4d34e454d1e37ca8816cc Mon Sep 17 00:00:00 2001 From: "max.bed4d" Date: Tue, 9 Sep 2025 12:23:31 +0100 Subject: [PATCH 3/6] Remove Ubuntu Jammy image build. --- .../workflows/overcloud-host-image-build.yml | 88 ++----------------- .../ansible/openstack-host-image-upload.yml | 2 +- 2 files changed, 8 insertions(+), 82 deletions(-) diff --git a/.github/workflows/overcloud-host-image-build.yml b/.github/workflows/overcloud-host-image-build.yml index b98540d977..ba3f308ca6 100644 --- a/.github/workflows/overcloud-host-image-build.yml +++ b/.github/workflows/overcloud-host-image-build.yml @@ -11,10 +11,6 @@ on: description: Build Ubuntu 24.04 Noble type: boolean default: true - ubuntu-jammy: - description: Build Ubuntu 22.04 Jammy - type: boolean - default: False runner_env: description: Which cloud to run on? type: choice @@ -44,7 +40,7 @@ env: KAYOBE_ENVIRONMENT: ci-builder KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} overcloud_dib_architecture: ${{ inputs.cpu-platform-architecture == 'x86_64' && 'amd64' || 'arm64' }} - pulp_artifact_path: ${{ inputs.cpu-platform-architecture == 'x86_64' && 'kayobe-images' || 'kayobe-images/aarch64' }} + pulp_artifact_type: ${{ inputs.cpu-platform-architecture == 'x86_64' && 'kayobe-images' || 'kayobe-images/aarch64' }} jobs: runner-selection: uses: ./.github/workflows/runner-selector.yml @@ -269,7 +265,7 @@ jobs: src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \ -e artifact_path=/opt/kayobe/images/overcloud-rocky-9 \ -e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e artifact_type=${{ env.pulp_artifact_path }} \ + -e artifact_type=${{ env.pulp_artifact_type }} \ -e file_regex="*.qcow2" \ -e os_distribution="rocky" \ -e os_release="9" @@ -285,7 +281,7 @@ jobs: src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ -e local_image_path="/opt/kayobe/images/overcloud-rocky-9/overcloud-rocky-9.qcow2" \ -e image_name=overcloud-rocky-9-${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e cpu-platform=${{ env.overcloud_dib_architecture }} + -e cpu_platform=${{ env.overcloud_dib_architecture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }} @@ -300,83 +296,13 @@ jobs: src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ -e local_image_path="/opt/kayobe/images/overcloud-rocky-9/overcloud-rocky-9.qcow2" \ -e image_name=overcloud-rocky-9-${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e cpu-platform=${{ env.overcloud_dib_architecture }} + -e cpu_platform=${{ env.overcloud_dib_architecture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML_OTHER_CLOUD }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID_OTHER_CLOUD }} OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET_OTHER_CLOUD }} if: inputs.rocky9 && steps.build_rocky_9.outcome == 'success' - - name: Build an Ubuntu Jammy 22.04 overcloud host image - id: build_ubuntu_jammy - continue-on-error: true - run: | - source venvs/kayobe/bin/activate && - source src/kayobe-config/kayobe-env --environment ci-builder && - kayobe overcloud host image build --force-rebuild \ - -e os_distribution="ubuntu" \ - -e os_release="jammy" \ - -e stackhpc_overcloud_dib_name=overcloud-ubuntu-jammy - env: - KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} - if: inputs.ubuntu-jammy - - - name: Show last error logs - continue-on-error: true - run: | - source venvs/kayobe/bin/activate && - source src/kayobe-config/kayobe-env --environment ci-builder && - kayobe seed host command run --command "tail -200 /opt/kayobe/images/overcloud-ubuntu-jammy/overcloud-ubuntu-jammy.stdout" --show-output - env: - KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} - if: steps.build_ubuntu_jammy.outcome == 'failure' - - - name: Upload Ubuntu Jammy 22.04 overcloud host image to Ark - run: | - source venvs/kayobe/bin/activate && - source src/kayobe-config/kayobe-env --environment ci-builder && - kayobe playbook run \ - src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \ - -e artifact_path=/opt/kayobe/images/overcloud-ubuntu-jammy \ - -e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e artifact_type=${{ env.pulp_artifact_path }} \ - -e file_regex="*.qcow2" \ - -e os_distribution="ubuntu" \ - -e os_release="jammy" - env: - KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} - if: inputs.ubuntu-jammy && steps.build_ubuntu_jammy.outcome == 'success' - - - name: Upload Ubuntu Jammy overcloud host image to current Dev Cloud (SMS/Leafcloud) - run: | - source venvs/kayobe/bin/activate && - source src/kayobe-config/kayobe-env --environment ci-builder && - kayobe playbook run \ - src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ - -e local_image_path="/opt/kayobe/images/overcloud-ubuntu-jammy/overcloud-ubuntu-jammy.qcow2" \ - -e image_name=overcloud-ubuntu-jammy-${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e cpu-platform=${{ env.overcloud_dib_architecture }} - env: - CLOUDS_YAML: ${{ secrets.CLOUDS_YAML }} - OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }} - OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }} - if: inputs.ubuntu-jammy && steps.build_ubuntu_jammy.outcome == 'success' - - - name: Upload Ubuntu Jammy overcloud host image to other Dev Cloud (Leafcloud/SMS) - run: | - source venvs/kayobe/bin/activate && - source src/kayobe-config/kayobe-env --environment ci-builder && - kayobe playbook run \ - src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ - -e local_image_path="/opt/kayobe/images/overcloud-ubuntu-jammy/overcloud-ubuntu-jammy.qcow2" \ - -e image_name=overcloud-ubuntu-jammy-${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e cpu-platform=${{ env.overcloud_dib_architecture }} - env: - CLOUDS_YAML: ${{ secrets.CLOUDS_YAML_OTHER_CLOUD }} - OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID_OTHER_CLOUD }} - OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET_OTHER_CLOUD }} - if: inputs.ubuntu-jammy && steps.build_ubuntu_jammy.outcome == 'success' - - name: Build an Ubuntu Noble 24.04 overcloud host image id: build_ubuntu_noble continue-on-error: true @@ -409,7 +335,7 @@ jobs: src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \ -e artifact_path=/opt/kayobe/images/overcloud-ubuntu-noble \ -e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e artifact_type=${{ env.pulp_artifact_path }} \ + -e artifact_type=${{ env.pulp_artifact_type }} \ -e file_regex="*.qcow2" \ -e os_distribution="ubuntu" \ -e os_release="noble" @@ -425,7 +351,7 @@ jobs: src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ -e local_image_path="/opt/kayobe/images/overcloud-ubuntu-noble/overcloud-ubuntu-noble.qcow2" \ -e image_name=overcloud-ubuntu-noble-${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e cpu-platform=${{ env.overcloud_dib_architecture }} + -e cpu_platform=${{ env.overcloud_dib_architecture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }} @@ -440,7 +366,7 @@ jobs: src/kayobe-config/etc/kayobe/ansible/openstack-host-image-upload.yml \ -e local_image_path="/opt/kayobe/images/overcloud-ubuntu-noble/overcloud-ubuntu-noble.qcow2" \ -e image_name=overcloud-ubuntu-noble-${{ steps.host_image_tag.outputs.host_image_tag }} \ - -e cpu-platform=${{ env.overcloud_dib_architecture }} + -e cpu_platform=${{ env.overcloud_dib_architecture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML_OTHER_CLOUD }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID_OTHER_CLOUD }} diff --git a/etc/kayobe/ansible/openstack-host-image-upload.yml b/etc/kayobe/ansible/openstack-host-image-upload.yml index 128780ec50..6b3bb6956d 100644 --- a/etc/kayobe/ansible/openstack-host-image-upload.yml +++ b/etc/kayobe/ansible/openstack-host-image-upload.yml @@ -6,7 +6,7 @@ hosts: seed vars: local_image_path: /opt/kayobe/images/overcloud-{{ os_distribution }}-{{ os_release }}/overcloud-{{ os_distribution }}-{{ os_release }}.qcow2 - image_name: overcloud-{{ os_distribution }}-{{ os_release }}-{{ cpu-platform }} + image_name: overcloud-{{ os_distribution }}-{{ os_release }}-{{ cpu_platform }} tasks: - name: Upload image to Glance block: From 77fd6728ce622a7ceaa45f91a201501603814e57 Mon Sep 17 00:00:00 2001 From: "max.bed4d" Date: Wed, 10 Sep 2025 10:42:12 +0100 Subject: [PATCH 4/6] Make build arch definition flexible --- etc/kayobe/kolla.yml | 16 +++++++++++----- etc/kayobe/stackhpc.yml | 9 +++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/etc/kayobe/kolla.yml b/etc/kayobe/kolla.yml index 78ecd2e525..795a4631b2 100644 --- a/etc/kayobe/kolla.yml +++ b/etc/kayobe/kolla.yml @@ -62,6 +62,17 @@ kolla_ansible_source_version: "{{ stackhpc_kolla_ansible_source_version }}" ############################################################################### # Kolla configuration. + +# Kolla base container image architecture. Options are "x86_64", "aarch64". +# Default is "{{ ansible_facts.architecture }}" +# NOTE(bbezak): evaluating this var locally for non facts gathering playbooks +kolla_base_arch: >- + {{ + 'aarch64' if (stackhpc_cpu_arch_override is defined and stackhpc_cpu_arch_override | length > 0 and stackhpc_cpu_arch_override == 'arm64') + else (stackhpc_cpu_arch_override if (stackhpc_cpu_arch_override is defined and stackhpc_cpu_arch_override | length > 0) + else ('aarch64' if lookup('pipe','uname -m') in ['aarch64','arm64'] else 'x86_64')) + }} + # Kolla base container image distribution. Options are "centos", "debian", # "rocky", "ubuntu". Default is {{ os_distribution }}. #kolla_base_distro: @@ -438,11 +449,6 @@ kolla_build_customizations: "{{ kolla_build_customizations_common | combine(koll # Dict mapping Kolla Dockerfile ARG names to their values. kolla_build_args: {} -############################################################################### -# Kolla platform architecture configuration. - -kolla_base_arch: "{{ 'aarch64' if stackhpc_cpu_arch == 'arm64' else stackhpc_cpu_arch }}" - ############################################################################### # Kolla-ansible inventory configuration. diff --git a/etc/kayobe/stackhpc.yml b/etc/kayobe/stackhpc.yml index 4bc34728b8..550c526a18 100644 --- a/etc/kayobe/stackhpc.yml +++ b/etc/kayobe/stackhpc.yml @@ -28,8 +28,13 @@ stackhpc_include_os_minor_version_in_repo_url: false stackhpc_rocky_9_url_version: "{{ '9.' + stackhpc_pulp_repo_rocky_9_minor_version | string if stackhpc_include_os_minor_version_in_repo_url | bool else '9' }}" # Pick build architecture for kolla and disk image builder -# Choose between x86_64 or arm64 -stackhpc_cpu_arch: 'x86_64' +# Choose between x86_64 or arm64. Leaving unset will default +# to the local architecture. +stackhpc_cpu_arch_override: "" + +# If the override variable hasnt been set above then both kolla_base_arch and +# stackhpc_cpu_arch will default to the local architecture. +stackhpc_cpu_arch: "{{ 'arm64' if kolla_base_arch == 'aarch64' else kolla_base_arch }}" ############################################################################### # Debs From 4c55902819ca693a9f59f2ecea6db32ec455d16b Mon Sep 17 00:00:00 2001 From: "max.bed4d" Date: Mon, 29 Sep 2025 12:06:12 +0100 Subject: [PATCH 5/6] Change Glance image uploaded name and promotion workflow. --- .github/workflows/overcloud-host-image-promote.yml | 13 +++++++++++-- etc/kayobe/ansible/openstack-host-image-upload.yml | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/overcloud-host-image-promote.yml b/.github/workflows/overcloud-host-image-promote.yml index 960dbc0df8..3d0e1f473b 100644 --- a/.github/workflows/overcloud-host-image-promote.yml +++ b/.github/workflows/overcloud-host-image-promote.yml @@ -15,8 +15,17 @@ on: description: Tag to promote type: string required: true + cpu-platform-architecture: + description: What is the tagged image's architecture + type: choice + required: true + default: x86_64 + options: + - x86_64 + - aarch64 env: ANSIBLE_FORCE_COLOR: True + pulp_artifact_type: ${{ inputs.cpu-platform-architecture == 'x86_64' && 'kayobe-images' || 'kayobe-images/aarch64' }} jobs: overcloud-host-image-promote: name: Promote overcloud host image @@ -77,7 +86,7 @@ jobs: source src/kayobe-config/kayobe-env --environment ci-builder && kayobe playbook run \ src/kayobe-config/etc/kayobe/ansible/pulp-artifact-promote.yml \ - -e artifact_type="kayobe-images" \ + -e artifact_type=${{ env.pulp_artifact_type }} \ -e os_distribution='rocky' \ -e os_release='9' env: @@ -91,7 +100,7 @@ jobs: source src/kayobe-config/kayobe-env --environment ci-builder && kayobe playbook run \ src/kayobe-config/etc/kayobe/ansible/pulp-artifact-promote.yml \ - -e artifact_type="kayobe-images" \ + -e artifact_type=${{ env.pulp_artifact_type }} \ -e os_distribution='ubuntu' \ -e os_release='noble' env: diff --git a/etc/kayobe/ansible/openstack-host-image-upload.yml b/etc/kayobe/ansible/openstack-host-image-upload.yml index 6b3bb6956d..d9a6d697a8 100644 --- a/etc/kayobe/ansible/openstack-host-image-upload.yml +++ b/etc/kayobe/ansible/openstack-host-image-upload.yml @@ -6,7 +6,7 @@ hosts: seed vars: local_image_path: /opt/kayobe/images/overcloud-{{ os_distribution }}-{{ os_release }}/overcloud-{{ os_distribution }}-{{ os_release }}.qcow2 - image_name: overcloud-{{ os_distribution }}-{{ os_release }}-{{ cpu_platform }} + image_name: overcloud-{{ os_distribution }}-{{ os_release }}{{ '-arm64' if cpu_platform == 'arm64' else '' }} tasks: - name: Upload image to Glance block: From a0b59f2f7b6b04f4ee0058866c05dac48509fda5 Mon Sep 17 00:00:00 2001 From: "max.bed4d" Date: Wed, 1 Oct 2025 11:27:53 +0100 Subject: [PATCH 6/6] Define DIB architecture explicitly --- .github/workflows/overcloud-host-image-build.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/overcloud-host-image-build.yml b/.github/workflows/overcloud-host-image-build.yml index ba3f308ca6..aac5ed129f 100644 --- a/.github/workflows/overcloud-host-image-build.yml +++ b/.github/workflows/overcloud-host-image-build.yml @@ -242,7 +242,8 @@ jobs: kayobe overcloud host image build --force-rebuild \ -e os_distribution="rocky" \ -e os_release="9" \ - -e stackhpc_overcloud_dib_name=overcloud-rocky-9 + -e stackhpc_overcloud_dib_name=overcloud-rocky-9 \ + -e overcloud_dib_architecture=${{ env.overcloud_dib_architecture }} env: KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} if: inputs.rocky9 @@ -312,7 +313,8 @@ jobs: kayobe overcloud host image build --force-rebuild \ -e os_distribution="ubuntu" \ -e os_release="noble" \ - -e stackhpc_overcloud_dib_name=overcloud-ubuntu-noble + -e stackhpc_overcloud_dib_name=overcloud-ubuntu-noble \ + -e overcloud_dib_architecture=${{ env.overcloud_dib_architecture }} env: KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} if: inputs.ubuntu-noble