11---
2- name : Build OFED packages
2+ name : Build IPA images
33on :
44 workflow_dispatch :
55 inputs :
66 rocky9 :
77 description : Build Rocky Linux 9
88 type : boolean
99 default : true
10+ ubuntu-jammy :
11+ description : Build Ubuntu 22.04 Jammy
12+ type : boolean
13+ default : true
1014 secrets :
1115 KAYOBE_VAULT_PASSWORD :
1216 required : true
2226 KAYOBE_ENVIRONMENT : ci-builder
2327 KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
2428jobs :
25- overcloud-ofed-packages :
26- name : Build OFED packages
29+ ipa-image-build :
30+ name : Build IPA images
2731 if : github.repository == 'stackhpc/stackhpc-kayobe-config'
2832 runs-on : arc-skc-host-image-builder-runner
2933 permissions : {}
@@ -42,18 +46,25 @@ jobs:
4246 with :
4347 path : src/kayobe-config
4448
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+
4554 - name : Determine OpenStack release
4655 id : openstack_release
4756 run : |
4857 BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' src/kayobe-config/.gitreview)
4958 echo "openstack_release=${BRANCH}" | sed -E "s,(stable|unmaintained)/,," >> $GITHUB_OUTPUT
5059
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 }}"
5768
5869 - name : Install Kayobe
5970 run : |
6273 python3 -m venv kayobe &&
6374 source kayobe/bin/activate &&
6475 pip install -U pip &&
65- pip install ../src/kayobe
76+ pip install -r ../src/kayobe-config/requirements.txt
6677
6778 - name : Install terraform
6879 uses : hashicorp/setup-terraform@v2
@@ -82,32 +93,20 @@ jobs:
8293 EOF
8394 working-directory : ${{ github.workspace }}/src/kayobe-config/terraform/aio
8495
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-
9696 - name : Generate terraform.tfvars
9797 run : |
9898 cat << EOF > terraform.tfvars
9999 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 "
104104 aio_vm_network = "stackhpc-ci"
105105 aio_vm_subnet = "stackhpc-ci"
106106 aio_vm_interface = "ens3"
107+ aio_vm_volume_size = 100
107108 EOF
108109 working-directory : ${{ github.workspace }}/src/kayobe-config/terraform/aio
109- env :
110- VM_IMAGE : ${{ steps.image_name.outputs.image_name }}
111110
112111 - name : Terraform Plan
113112 run : terraform plan
@@ -179,70 +178,160 @@ jobs:
179178 source src/kayobe-config/kayobe-env --environment ci-builder &&
180179 kayobe control host bootstrap
181180
182- - name : Run growroot playbook
181+ - name : Configure the seed host (Builder VM)
183182 run : |
184183 source venvs/kayobe/bin/activate &&
185184 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
187188 env :
188189 KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
189190
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
191203 run : |
192204 source venvs/kayobe/bin/activate &&
193205 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"
195210 env :
196211 KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
212+ if : inputs.ubuntu-jammy
197213
198- - name : Run a distro-sync
214+ - name : Show last error logs
215+ continue-on-error : true
199216 run : |
200217 source venvs/kayobe/bin/activate &&
201218 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
203220 env :
204221 KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
222+ if : steps.build_ubuntu_jammy_ipa.outcome == 'failure'
205223
206- - name : Reset BLS entries on the seed host
224+ - name : Upload Ubuntu 22.04 Jammy IPA kernel image to Ark
207225 run : |
208226 source venvs/kayobe/bin/activate &&
209227 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
212237 env :
213238 KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
239+ if : inputs.ubuntu-jammy && steps.build_ubuntu_jammy_ipa.outcome == 'success'
214240
215- - name : Disable noexec in /var/tmp
241+ - name : Upload Ubuntu 22.04 Jammy IPA ramdisk image to Ark
216242 run : |
217243 source venvs/kayobe/bin/activate &&
218244 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
220254 env :
221255 KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
256+ if : inputs.ubuntu-jammy && steps.build_ubuntu_jammy_ipa.outcome == 'success'
222257
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
224261 run : |
225262 source venvs/kayobe/bin/activate &&
226263 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"
228268 env :
229269 KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
270+ if : inputs.rocky9
230271
231- - name : Run OFED builder playbook
272+ - name : Show last error logs
273+ continue-on-error : true
232274 run : |
233275 source venvs/kayobe/bin/activate &&
234276 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
236278 env :
237279 KAYOBE_VAULT_PASSWORD : ${{ secrets.KAYOBE_VAULT_PASSWORD }}
280+ if : steps.build_rocky_9_ipa.outcome == 'failure'
238281
239- - name : Run OFED upload playbook
282+ - name : Upload Rocky 9 IPA kernel image to Ark
240283 run : |
241284 source venvs/kayobe/bin/activate &&
242285 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
244295 env :
245296 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'
246335
247336 - name : Destroy
248337 run : terraform destroy -auto-approve
0 commit comments