Skip to content

Multinode

Multinode #153

---
# This workflow provides a workflow_dispatch (manual) trigger to deploy a
# multi-node test cluster.
name: Multinode
'on':
workflow_dispatch:
# NOTE: workflow_dispatch is limited to 10 inputs.
inputs:
multinode_name:
description: Multinode cluster name
type: string
required: true
os_distribution:
description: Host OS distribution
type: choice
default: rocky
options:
- rocky
- ubuntu-jammy
- ubuntu-noble
neutron_plugin:
description: Neutron ML2 plugin
type: choice
default: ovn
options:
- ovn
- ovs
upgrade:
description: Whether to perform an upgrade
default: none
type: choice
options:
- none
- minor
- major
break_on:
description: When to break execution for manual interaction
type: choice
default: never
options:
- always
- failure
- never
- success
break_duration:
description: How long to break execution for (minutes) (note that instances are cleaned up after 12h)
type: number
default: 60
ssh_key:
description: SSH public key to authorise on Ansible control host
type: string
terraform_kayobe_multinode_version:
description: terraform-kayobe-multinode version
type: string
default: main
jobs:
generate-vector:
runs-on: ubuntu-latest
outputs:
vector: ${{ steps.set-vector.outputs.vector }}
steps:
- name: Generate build vector
id: set-vector
run: |
if [[ ${{ inputs.os_distribution == 'rocky' }} ]]; then
echo "vector={\"distro\": \"rocky\", \"release\": \"9\", \"ssh_user\": \"cloud-user\"}" >> $GITHUB_OUTPUT
elif [[ ${{ inputs.os_distribution == 'ubuntu-jammy' }} ]]; then
echo "vector={\"distro\": \"ubuntu\", \"release\": \"jammy\", \"ssh_user\": \"ubuntu\"}" >> $GITHUB_OUTPUT
else
echo "vector={\"distro\": \"ubuntu\", \"release\": \"noble\", \"ssh_user\": \"ubuntu\"}" >> $GITHUB_OUTPUT
fi
multinode:
name: Multinode
needs:
- generate-vector
uses: stackhpc/stackhpc-openstack-gh-workflows/.github/workflows/[email protected]
with:
multinode_name: ${{ inputs.multinode_name }}
os_distribution: ${{ fromJson(needs.generate-vector.outputs.vector).distro }}
os_release: ${{ fromJson(needs.generate-vector.outputs.vector).release }}
ssh_username: ${{ fromJson(needs.generate-vector.outputs.vector).ssh_user }}
neutron_plugin: ${{ inputs.neutron_plugin }}
upgrade: ${{ inputs.upgrade }}
break_on: ${{ inputs.break_on }}
# Workaround loss of number type using fromJSON: https://github.com/orgs/community/discussions/67182
break_duration: ${{ fromJSON(inputs.break_duration) }}
ssh_key: ${{ inputs.ssh_key }}
stackhpc_kayobe_config_version: ${{ github.ref_name }}
# NOTE(upgrade): Reference the PREVIOUS release here.
stackhpc_kayobe_config_previous_version: ${{ inputs.upgrade == 'major' && 'stackhpc/2023.1' || 'stackhpc/2024.1' }}
terraform_kayobe_multinode_version: ${{ inputs.terraform_kayobe_multinode_version }}
secrets: inherit