Upload overcloud host images #29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
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' |