Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .github/workflows/overcloud-host-image-build-periodic.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
name: Periodic overcloud host images build
on:
schedule:
# Runs every Monday at 3:30 AM ("30 3 * * 1").
- cron: "30 3 * * 1"

jobs:
x86-overcloud-host-image-build:
name: Build x86_64 overcloud host images
uses: ./.github/workflows/overcloud-host-image-build.yml
with:
runner_env: "SMS Lab"
cpu-platform-architecture: "x86_64"
rocky9: true
ubuntu-noble: true
ubuntu-jammy: true
secrets: inherit
if: github.repository == 'stackhpc/stackhpc-kayobe-config'

aarch64-overcloud-host-image-build:
name: Build aarch64 overcloud host images
uses: ./.github/workflows/overcloud-host-image-build.yml
with:
runner_env: "SMS Lab"
cpu-platform-architecture: "aarch64"
rocky9: true
ubuntu-noble: true
ubuntu-jammy: true
secrets: inherit
if: github.repository == 'stackhpc/stackhpc-kayobe-config'
133 changes: 126 additions & 7 deletions .github/workflows/overcloud-host-image-build.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: Build overcloud host images
on:
#THIS IS FOR THE MANUAL ACTION DISPATCH
workflow_dispatch:
inputs:
rocky9:
Expand All @@ -11,18 +12,60 @@ 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
default: SMS Lab
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
CLOUDS_YAML:
required: true
CLOUDS_YAML_OTHER_CLOUD:
required: true
OS_APPLICATION_CREDENTIAL_ID:
required: true
OS_APPLICATION_CREDENTIAL_SECRET:
required: true
#THIS IS FOR THE PERIODIC WORKFLOW
workflow_call:
inputs:
rocky9:
type: boolean
default: true
ubuntu-noble:
type: boolean
default: true
ubuntu-jammy:
type: boolean
default: true
runner_env:
type: string
default: SMS Lab
cpu-platform-architecture:
type: string
required: true
secrets:
KAYOBE_VAULT_PASSWORD:
required: true
CLOUDS_YAML:
required: true
CLOUDS_YAML_OTHER_CLOUD:
required: true
OS_APPLICATION_CREDENTIAL_ID:
required: true
OS_APPLICATION_CREDENTIAL_SECRET:
Expand All @@ -32,6 +75,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
Expand Down Expand Up @@ -212,7 +257,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 }}

Expand Down Expand Up @@ -256,7 +301,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"
Expand All @@ -271,7 +316,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 }}
Expand All @@ -285,13 +331,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
Expand Down Expand Up @@ -324,7 +441,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"
Expand All @@ -339,7 +456,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 }}
Expand All @@ -353,7 +471,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 }}
Expand Down
2 changes: 1 addition & 1 deletion etc/kayobe/ansible/openstack-host-image-upload.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
10 changes: 5 additions & 5 deletions etc/kayobe/kolla.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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.

Expand Down
3 changes: 3 additions & 0 deletions etc/kayobe/overcloud-dib.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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_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.
Expand Down
51 changes: 32 additions & 19 deletions etc/kayobe/stackhpc-overcloud-dib.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -58,27 +61,37 @@ 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:
- "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.
Expand Down
1 change: 1 addition & 0 deletions etc/kayobe/stackhpc-overcloud-host-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ stackhpc_download_overcloud_host_images: 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"
Expand Down
4 changes: 4 additions & 0 deletions etc/kayobe/stackhpc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading