1
1
---
2
- name : Build OFED packages
2
+ name : Build IPA images
3
3
on :
4
4
workflow_dispatch :
5
5
inputs :
6
6
rocky9 :
7
7
description : Build Rocky Linux 9
8
8
type : boolean
9
9
default : true
10
+ ubuntu-jammy :
11
+ description : Build Ubuntu 22.04 Jammy
12
+ type : boolean
13
+ default : true
10
14
secrets :
11
15
KAYOBE_VAULT_PASSWORD :
12
16
required : true
22
26
KAYOBE_ENVIRONMENT : ci-builder
23
27
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
24
28
jobs :
25
- overcloud-ofed-packages :
26
- name : Build OFED packages
29
+ ipa-image-build :
30
+ name : Build IPA images
27
31
if : github.repository == 'stackhpc/stackhpc-kayobe-config'
28
32
runs-on : arc-skc-host-image-builder-runner
29
33
permissions : {}
@@ -42,18 +46,25 @@ jobs:
42
46
with :
43
47
path : src/kayobe-config
44
48
49
+ - name : Output image tag of the builder
50
+ id : builder_image_tag
51
+ run : |
52
+ echo image_tag=$(grep stackhpc_rocky_9_overcloud_host_image_version: etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
53
+
45
54
- name : Determine OpenStack release
46
55
id : openstack_release
47
56
run : |
48
57
BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' src/kayobe-config/.gitreview)
49
58
echo "openstack_release=${BRANCH}" | sed -E "s,(stable|unmaintained)/,," >> $GITHUB_OUTPUT
50
59
51
- - name : Clone StackHPC Kayobe repository
52
- uses : actions/checkout@v4
53
- with :
54
- repository : stackhpc/kayobe
55
- ref : refs/heads/stackhpc/${{ steps.openstack_release.outputs.openstack_release }}
56
- path : src/kayobe
60
+ - name : Generate IPA image tag
61
+ id : ipa_image_tag
62
+ run : |
63
+ echo "ipa_image_tag=$(date +${{ steps.openstack_release.outputs.openstack_release }}-%Y%m%dT%H%M%S)" >> $GITHUB_OUTPUT
64
+
65
+ - name : Display IPA image tag
66
+ run : |
67
+ echo "${{ steps.ipa_image_tag.outputs.ipa_image_tag }}"
57
68
58
69
- name : Install Kayobe
59
70
run : |
62
73
python3 -m venv kayobe &&
63
74
source kayobe/bin/activate &&
64
75
pip install -U pip &&
65
- pip install ../src/kayobe
76
+ pip install -r ../src/kayobe-config/requirements.txt
66
77
67
78
- name : Install terraform
68
79
uses : hashicorp/setup-terraform@v2
@@ -82,32 +93,20 @@ jobs:
82
93
EOF
83
94
working-directory : ${{ github.workspace }}/src/kayobe-config/terraform/aio
84
95
85
- - name : Output image tag
86
- id : image_tag
87
- run : |
88
- echo image_tag=$(grep stackhpc_rocky_9_overcloud_host_image_version: etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
89
-
90
- # Use the image override if set, otherwise use overcloud-os_distribution-os_release-tag
91
- - name : Output image name
92
- id : image_name
93
- run : |
94
- echo image_name=overcloud-rocky-9-${{ steps.image_tag.outputs.image_tag }} >> $GITHUB_OUTPUT
95
-
96
96
- name : Generate terraform.tfvars
97
97
run : |
98
98
cat << EOF > terraform.tfvars
99
99
ssh_public_key = "id_rsa.pub"
100
- ssh_username = "cloud-user "
101
- aio_vm_name = "skc-ofed -builder"
102
- aio_vm_image = "${{ env.VM_IMAGE }} "
103
- aio_vm_flavor = "en1.medium "
100
+ ssh_username = "ubuntu "
101
+ aio_vm_name = "skc-ipa-image -builder"
102
+ aio_vm_image = "Ubuntu-22.04 "
103
+ aio_vm_flavor = "en1.large "
104
104
aio_vm_network = "stackhpc-ci"
105
105
aio_vm_subnet = "stackhpc-ci"
106
106
aio_vm_interface = "ens3"
107
+ aio_vm_volume_size = 100
107
108
EOF
108
109
working-directory : ${{ github.workspace }}/src/kayobe-config/terraform/aio
109
- env :
110
- VM_IMAGE : ${{ steps.image_name.outputs.image_name }}
111
110
112
111
- name : Terraform Plan
113
112
run : terraform plan
@@ -179,70 +178,160 @@ jobs:
179
178
source src/kayobe-config/kayobe-env --environment ci-builder &&
180
179
kayobe control host bootstrap
181
180
182
- - name : Run growroot playbook
181
+ - name : Configure the seed host (Builder VM)
183
182
run : |
184
183
source venvs/kayobe/bin/activate &&
185
184
source src/kayobe-config/kayobe-env --environment ci-builder &&
186
- kayobe playbook run src/kayobe-config/etc/kayobe/ansible/growroot.yml
185
+ kayobe seed host configure \
186
+ -e seed_bootstrap_user=ubuntu \
187
+ --skip-tags network,apt,docker,docker-registry
187
188
env :
188
189
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
189
190
190
- - name : Configure the seed host (Builder VM)
191
+ - name : Install dependencies
192
+ run : |
193
+ source venvs/kayobe/bin/activate &&
194
+ source src/kayobe-config/kayobe-env --environment ci-builder &&
195
+ kayobe seed host command run \
196
+ --command "sudo apt update && sudo apt -y install gcc git libffi-dev python3-dev python-is-python3 python3-venv" --show-output
197
+ env :
198
+ KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
199
+
200
+ - name : Build a Ubuntu 22.04 Jammy IPA image
201
+ id : build_ubuntu_jammy_ipa
202
+ continue-on-error : true
191
203
run : |
192
204
source venvs/kayobe/bin/activate &&
193
205
source src/kayobe-config/kayobe-env --environment ci-builder &&
194
- kayobe seed host configure --skip-tags network,docker
206
+ kayobe overcloud deployment image build --force-rebuild \
207
+ -e os_distribution="ubuntu" \
208
+ -e os_release="jammy" \
209
+ -e ipa_ci_builder_distribution="ubuntu"
195
210
env :
196
211
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
212
+ if : inputs.ubuntu-jammy
197
213
198
- - name : Run a distro-sync
214
+ - name : Show last error logs
215
+ continue-on-error : true
199
216
run : |
200
217
source venvs/kayobe/bin/activate &&
201
218
source src/kayobe-config/kayobe-env --environment ci-builder &&
202
- kayobe seed host command run --become -- command "dnf distro-sync --refresh"
219
+ kayobe seed host command run --command "tail -200 /opt/kayobe/images/ipa/ipa.stdout" --show-output
203
220
env :
204
221
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
222
+ if : steps.build_ubuntu_jammy_ipa.outcome == 'failure'
205
223
206
- - name : Reset BLS entries on the seed host
224
+ - name : Upload Ubuntu 22.04 Jammy IPA kernel image to Ark
207
225
run : |
208
226
source venvs/kayobe/bin/activate &&
209
227
source src/kayobe-config/kayobe-env --environment ci-builder &&
210
- kayobe playbook run src/kayobe-config/etc/kayobe/ansible/reset-bls-entries.yml \
211
- -e "reset_bls_host=ofed-builder"
228
+ kayobe playbook run \
229
+ src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \
230
+ -e artifact_path=/opt/kayobe/images/ipa \
231
+ -e artifact_type=ipa \
232
+ -e artifact_tag=${{ steps.ipa_image_tag.outputs.ipa_image_tag }} \
233
+ -e os_distribution="ubuntu" \
234
+ -e os_release="jammy" \
235
+ -e file_regex='*.kernel' \
236
+ -e upload_checksum=true
212
237
env :
213
238
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
239
+ if : inputs.ubuntu-jammy && steps.build_ubuntu_jammy_ipa.outcome == 'success'
214
240
215
- - name : Disable noexec in /var/tmp
241
+ - name : Upload Ubuntu 22.04 Jammy IPA ramdisk image to Ark
216
242
run : |
217
243
source venvs/kayobe/bin/activate &&
218
244
source src/kayobe-config/kayobe-env --environment ci-builder &&
219
- kayobe seed host command run --become --command "sed -i 's/noexec,//g' /etc/fstab"
245
+ kayobe playbook run \
246
+ src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \
247
+ -e artifact_path=/opt/kayobe/images/ipa \
248
+ -e artifact_type=ipa \
249
+ -e artifact_tag=${{ steps.ipa_image_tag.outputs.ipa_image_tag }} \
250
+ -e os_distribution="ubuntu" \
251
+ -e os_release="jammy" \
252
+ -e file_regex='*.initramfs' \
253
+ -e upload_checksum=true
220
254
env :
221
255
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
256
+ if : inputs.ubuntu-jammy && steps.build_ubuntu_jammy_ipa.outcome == 'success'
222
257
223
- - name : Reboot to apply the kernel update
258
+ - name : Build a Rocky 9 IPA image
259
+ id : build_rocky_9_ipa
260
+ continue-on-error : true
224
261
run : |
225
262
source venvs/kayobe/bin/activate &&
226
263
source src/kayobe-config/kayobe-env --environment ci-builder &&
227
- kayobe playbook run src/kayobe-config/etc/kayobe/ansible/reboot.yml
264
+ kayobe overcloud deployment image build --force-rebuild \
265
+ -e os_distribution="rocky" \
266
+ -e os_release="9" \
267
+ -e ipa_ci_builder_distribution="rocky"
228
268
env :
229
269
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
270
+ if : inputs.rocky9
230
271
231
- - name : Run OFED builder playbook
272
+ - name : Show last error logs
273
+ continue-on-error : true
232
274
run : |
233
275
source venvs/kayobe/bin/activate &&
234
276
source src/kayobe-config/kayobe-env --environment ci-builder &&
235
- kayobe playbook run src/kayobe-config/etc /kayobe/ansible/build-ofed-rocky.yml
277
+ kayobe seed host command run --command "tail -200 /opt /kayobe/images/ipa/ipa.stdout" --show-output
236
278
env :
237
279
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
280
+ if : steps.build_rocky_9_ipa.outcome == 'failure'
238
281
239
- - name : Run OFED upload playbook
282
+ - name : Upload Rocky 9 IPA kernel image to Ark
240
283
run : |
241
284
source venvs/kayobe/bin/activate &&
242
285
source src/kayobe-config/kayobe-env --environment ci-builder &&
243
- kayobe playbook run src/kayobe-config/etc/kayobe/ansible/push-ofed.yml
286
+ kayobe playbook run \
287
+ src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \
288
+ -e artifact_path=/opt/kayobe/images/ipa \
289
+ -e artifact_type=ipa \
290
+ -e artifact_tag=${{ steps.ipa_image_tag.outputs.ipa_image_tag }} \
291
+ -e os_distribution="rocky" \
292
+ -e os_release="9" \
293
+ -e file_regex='*.kernel' \
294
+ -e upload_checksum=true
244
295
env :
245
296
KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
297
+ if : inputs.rocky9 && steps.build_rocky_9_ipa.outcome == 'success'
298
+
299
+ - name : Upload Rocky 9 IPA ramdisk image to Ark
300
+ run : |
301
+ source venvs/kayobe/bin/activate &&
302
+ source src/kayobe-config/kayobe-env --environment ci-builder &&
303
+ kayobe playbook run \
304
+ src/kayobe-config/etc/kayobe/ansible/pulp-artifact-upload.yml \
305
+ -e artifact_path=/opt/kayobe/images/ipa \
306
+ -e artifact_type=ipa \
307
+ -e artifact_tag=${{ steps.ipa_image_tag.outputs.ipa_image_tag }} \
308
+ -e os_distribution="rocky" \
309
+ -e os_release="9" \
310
+ -e file_regex='*.initramfs' \
311
+ -e upload_checksum=true
312
+ env :
313
+ KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
314
+ if : inputs.rocky9 && steps.build_rocky_9_ipa.outcome == 'success'
315
+
316
+ - name : Copy logs back
317
+ continue-on-error : true
318
+ run : |
319
+ mkdir logs
320
+ scp -r ubuntu@$(jq -r .access_ip_v4.value src/kayobe-config/etc/kayobe/environments/ci-builder/tf-outputs.yml):/opt/kayobe/images/*/*.std* ./logs/
321
+ if : always()
322
+
323
+ - name : Upload logs artifact
324
+ uses : actions/upload-artifact@v4
325
+ with :
326
+ name : Build logs
327
+ path : ./logs
328
+
329
+ - name : Fail if the IPA image build failed
330
+ run : |
331
+ echo "Builds failed. See workflow artifacts for details." &&
332
+ exit 1
333
+ if : steps.build_rocky_9_ipa.outcome == 'failure' ||
334
+ steps.build_ubuntu_jammy_ipa.outcome == 'failure'
246
335
247
336
- name : Destroy
248
337
run : terraform destroy -auto-approve
0 commit comments