Skip to content

Upload overcloud host images #30

Upload overcloud host images

Upload overcloud host images #30

---
name: Upload overcloud host images
on:
workflow_dispatch:
inputs:
rocky9:
description: Upload Rocky Linux 9
type: boolean
default: true
ubuntu-jammy:
description: Upload Ubuntu 22.04 Jammy
type: boolean
default: true
kayobe-environment:
description: Kayobe environment to use
type: string
default: "ci-builder"
runner_env:
description: Which cloud to run on?
type: choice
default: SMS Lab
options:
- SMS Lab
- Leafcloud
secrets:
KAYOBE_VAULT_PASSWORD:
required: true
CLOUDS_YAML:
required: true
OS_APPLICATION_CREDENTIAL_ID:
required: true
OS_APPLICATION_CREDENTIAL_SECRET:
required: true
env:
ANSIBLE_FORCE_COLOR: True
jobs:
runner-selection:
uses: ./.github/workflows/runner-selector.yml
with:
runner_env: ${{ inputs.runner_env }}
overcloud-host-image-upload:
name: Upload overcloud host images
if: github.repository == 'stackhpc/stackhpc-kayobe-config'
environment: ${{ inputs.runner_env }}
runs-on: ${{ needs.runner-selection.outputs.runner_name_image_build }}
needs:
- runner-selection
permissions: {}
steps:
- name: Validate inputs
run: |
if [[ ${{ inputs.rocky9 }} == 'false' && ${{ inputs.ubuntu-jammy }} == 'false' ]]; then
echo "At least one distribution must be selected"
exit 1
fi
- name: Install package dependencies
run: |
sudo apt update
sudo apt install -y build-essential git unzip nodejs python3-wheel python3-pip python3-venv
- uses: actions/checkout@v4
with:
path: src/kayobe-config
- name: Determine OpenStack release
id: openstack_release
run: |
BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' src/kayobe-config/.gitreview)
echo "openstack_release=${BRANCH}" | sed -E "s,(stable|unmaintained)/,," >> $GITHUB_OUTPUT
- name: Install Kayobe
run: |
mkdir -p venvs &&
pushd venvs &&
python3 -m venv kayobe &&
source kayobe/bin/activate &&
pip install -U pip &&
pip install -r ../src/kayobe-config/requirements.txt
- name: Bootstrap the control host
run: |
source venvs/kayobe/bin/activate &&
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
kayobe control host bootstrap --skip-tags bootstrap
- name: Generate clouds.yaml
run: |
cat << EOF > clouds.yaml
${{ secrets.CLOUDS_YAML }}
EOF
- name: Install OpenStack client
run: |
source venvs/kayobe/bin/activate &&
pip install python-openstackclient -c https://raw.githubusercontent.com/stackhpc/requirements/refs/heads/stackhpc/${{ steps.openstack_release.outputs.openstack_release }}/upper-constraints.txt
- name: Output Rocky Linux 9 image tag
id: rocky_9_image_tag
run: |
echo image_tag=$(grep stackhpc_rocky_9_overcloud_host_image_version: src/kayobe-config/etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
- name: Check if image exists already
id: rocky_9_image_exists
run: |
source venvs/kayobe/bin/activate &&
openstack image show \
overcloud-rocky-9-${{ steps.rocky_9_image_tag.outputs.image_tag }}
env:
OS_CLOUD: openstack
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
continue-on-error: true
- name: Download Rocky Linux 9 overcloud host image from Ark
run: |
source venvs/kayobe/bin/activate &&
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
kayobe playbook run \
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
-e os_distribution="rocky" \
-e os_release="9"
env:
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
if: inputs.rocky9 && steps.rocky_9_image_exists.outcome == 'failure'
- name: Upload Rocky Linux 9 overcloud host image to Cloud
run: |
source venvs/kayobe/bin/activate &&
openstack image create \
overcloud-rocky-9-${{ steps.rocky_9_image_tag.outputs.image_tag }} \
--container-format bare \
--disk-format qcow2 \
--file /tmp/rocky-9.qcow2 \
--private \
--progress
env:
OS_CLOUD: openstack
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
if: inputs.rocky9 && steps.rocky_9_image_exists.outcome == 'failure'
- name: Output Ubuntu Jammy image tag
id: ubuntu_jammy_image_tag
run: |
echo image_tag=$(grep stackhpc_ubuntu_jammy_overcloud_host_image_version: src/kayobe-config/etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
- name: Check if image exists already
id: ubuntu_jammy_image_exists
run: |
source venvs/kayobe/bin/activate &&
openstack image show \
overcloud-ubuntu-jammy-${{ steps.ubuntu_jammy_image_tag.outputs.image_tag }}
env:
OS_CLOUD: openstack
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
continue-on-error: true
- name: Download Ubuntu Jammy 22.04 overcloud host image from Ark
run: |
source venvs/kayobe/bin/activate &&
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
kayobe playbook run \
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
-e os_distribution="ubuntu" \
-e os_release="jammy"
env:
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
if: inputs.ubuntu-jammy && steps.ubuntu_jammy_image_exists.outcome == 'failure'
- name: Upload Ubuntu Jammy 22.04 overcloud host image to Cloud
run: |
source venvs/kayobe/bin/activate &&
openstack image create \
overcloud-ubuntu-jammy-${{ steps.ubuntu_jammy_image_tag.outputs.image_tag }} \
--container-format bare \
--disk-format qcow2 \
--file /tmp/ubuntu-jammy.qcow2 \
--private \
--progress
env:
OS_CLOUD: openstack
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
if: inputs.ubuntu-jammy && steps.ubuntu_jammy_image_exists.outcome == 'failure'