|
4 | 4 | # the cloud.
|
5 | 5 |
|
6 | 6 | name: Multinode
|
7 |
| - |
8 | 7 | on:
|
9 | 8 | workflow_call:
|
10 | 9 | inputs:
|
|
33 | 32 | type: string
|
34 | 33 | default: '9'
|
35 | 34 | ssh_username:
|
36 |
| - description: User for terraform to access the all-in-one VM |
| 35 | + description: User for terraform to access the Multinode hosts |
37 | 36 | type: string
|
38 | 37 | default: cloud-user
|
39 | 38 | neutron_plugin:
|
|
43 | 42 | stackhpc_kayobe_config_version:
|
44 | 43 | description: stackhpc-kayobe-config version
|
45 | 44 | type: string
|
| 45 | + required: true |
46 | 46 | stackhpc_kayobe_config_previous_version:
|
47 | 47 | description: stackhpc-kayobe-config previous version
|
48 | 48 | type: string
|
|
55 | 55 | type: boolean
|
56 | 56 | default: false
|
57 | 57 | break_on:
|
| 58 | + # Supported values: 'always', 'never', 'failure', 'success' |
58 | 59 | description: When to break execution for manual interaction
|
59 | 60 | type: string
|
60 | 61 | default: never
|
@@ -146,6 +147,15 @@ jobs:
|
146 | 147 | ansible-galaxy collection install -r ansible/requirements.yml -p ansible/collections
|
147 | 148 | working-directory: ${{ github.workspace }}/terraform-kayobe-multinode
|
148 | 149 |
|
| 150 | + - name: Generate a VXLAN VNI |
| 151 | + id: vxlan_vni |
| 152 | + run: | |
| 153 | + # VXLAN VNI is 24 bits |
| 154 | + max_vni=$(((2 << (24 - 1)) - 1)) |
| 155 | + timestamp=$(date +%s) |
| 156 | + vni=$(((timestamp % max_vni) + 1)) |
| 157 | + echo vxlan_vni=$vni >> $GITHUB_OUTPUT |
| 158 | +
|
149 | 159 | - name: Generate SSH keypair
|
150 | 160 | run: ssh-keygen -f id_rsa -N ''
|
151 | 161 | working-directory: ${{ github.workspace }}/terraform-kayobe-multinode
|
@@ -241,7 +251,7 @@ jobs:
|
241 | 251 | cat << EOF >> ansible/vars/defaults.yml
|
242 | 252 | kayobe_config_version: ${{ inputs.upgrade && inputs.stackhpc_kayobe_config_previous_version || inputs.stackhpc_kayobe_config_version }}
|
243 | 253 | ssh_key_path: ${{ github.workspace }}/terraform-kayobe-multinode/id_rsa
|
244 |
| - vxlan_vni: 53299 |
| 254 | + vxlan_vni: ${{ steps.vxlan_vni.outputs.vxlan_vni }} |
245 | 255 | vault_password_path: ${{ github.workspace }}/terraform-kayobe-multinode/vault-pw
|
246 | 256 | kayobe_config_custom:
|
247 | 257 | - path: zz-multinode.yml
|
@@ -350,9 +360,20 @@ jobs:
|
350 | 360 | ${{ github.workspace }}/logs/
|
351 | 361 | if: ${{ always() && steps.config_ach.outcome == 'success' }}
|
352 | 362 |
|
353 |
| - - name: Break on failure |
354 |
| - run: sleep ${{ inputs.break_duration }}m |
355 |
| - if: ${{ failure() && steps.config_ach.outcome == 'success' && inputs.break_on == 'failure' }} |
| 363 | + - name: Break for manual interaction |
| 364 | + run: | |
| 365 | + function wait() { |
| 366 | + duration=${{ inputs.break_duration }}m |
| 367 | + echo "Breaking on failure for $duration" |
| 368 | + sleep $duration |
| 369 | + } |
| 370 | +
|
| 371 | + if [[ ${{ inputs.break_on }} =~ '(failure|always)' ]] && [[ ${{ failure() }} = 'true' ]]; then |
| 372 | + wait "failure" |
| 373 | + elif [[ ${{ inputs.break_on }} =~ '(success|always)' ]] && [[ ${{ failure() }} = 'false' ]]; then |
| 374 | + wait "success" |
| 375 | + fi |
| 376 | + if: ${{ always() && steps.config_ach.outcome == 'success' }} |
356 | 377 |
|
357 | 378 | - name: Destroy
|
358 | 379 | run: terraform destroy -auto-approve -input=false
|
|
0 commit comments