diff --git a/.github/workflows/overcloud-host-image-build.yml b/.github/workflows/overcloud-host-image-build.yml index 905e6d7b0..5be648096 100644 --- a/.github/workflows/overcloud-host-image-build.yml +++ b/.github/workflows/overcloud-host-image-build.yml @@ -22,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 @@ -36,6 +43,7 @@ env: ANSIBLE_FORCE_COLOR: True KAYOBE_ENVIRONMENT: ci-builder KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} + overcloud_dib_architechture: ${{ inputs.cpu-platform-architecture == 'x86_64' && 'amd64' || 'arm64' }} jobs: runner-selection: uses: ./.github/workflows/runner-selector.yml @@ -216,7 +224,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" --show-output + --command "sudo apt update && sudo apt -y install gcc git libffi-dev python3-dev python-is-python3 python3-venv qemu-user-static" --show-output env: KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} @@ -260,7 +268,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="kayobe-images/{{ inputs.cpu-platform-architecture }}" \ -e file_regex="*.qcow2" \ -e os_distribution="rocky" \ -e os_release="9" @@ -276,6 +284,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_architechture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }} @@ -328,7 +337,7 @@ jobs: 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="kayobe-images" \ + -e artifact_type="kayobe-images/{{ inputs.cpu-platform-architecture }}" \ -e file_regex="*.qcow2" \ -e os_distribution="ubuntu" \ -e os_release="jammy" @@ -344,6 +353,7 @@ jobs: 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_architechture }} env: CLOUDS_YAML: ${{ secrets.CLOUDS_YAML }} OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }} diff --git a/etc/kayobe/ansible/openstack-host-image-upload.yml b/etc/kayobe/ansible/openstack-host-image-upload.yml index daff0549d..128780ec5 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 8654460b3..1a0e8c47e 100644 --- a/etc/kayobe/kolla.yml +++ b/etc/kayobe/kolla.yml @@ -458,6 +458,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 541103f08..c18f4151d 100644 --- a/etc/kayobe/overcloud-dib.yml +++ b/etc/kayobe/overcloud-dib.yml @@ -70,6 +70,9 @@ overcloud_dib_git_elements_extra: version: "v1.6.3" elements_path: "elements" +# Selects the architecture of the overcloud host image being built. +overcloud_dib_architechture: "{{ '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 99f5ae836..a9914660c 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_architechture }} " + # StackHPC overcloud DIB image name. stackhpc_overcloud_dib_name: "deployment_image" @@ -58,6 +61,7 @@ stackhpc_overcloud_dib_env_vars: 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 image packages. stackhpc_overcloud_dib_packages: diff --git a/etc/kayobe/stackhpc.yml b/etc/kayobe/stackhpc.yml index bf7cf2a25..e028803d3 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 jammy