Skip to content

Commit 61da7db

Browse files
committed
Add workflow to upload Ark host images to glance
1 parent 48e06bf commit 61da7db

File tree

2 files changed

+300
-0
lines changed

2 files changed

+300
-0
lines changed
Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
---
2+
name: Upload overcloud host images
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
centos:
7+
description: Upload CentOS Stream 8
8+
type: boolean
9+
default: true
10+
rocky8:
11+
description: Upload Rocky Linux 8
12+
type: boolean
13+
default: true
14+
rocky9:
15+
description: Upload Rocky Linux 9
16+
type: boolean
17+
default: true
18+
ubuntu-focal:
19+
description: Upload Ubuntu 20.04 Focal
20+
type: boolean
21+
default: true
22+
ubuntu-jammy:
23+
description: Upload Ubuntu 22.04 Jammy
24+
type: boolean
25+
default: true
26+
kayobe-environment:
27+
description: Kayobe environment to use
28+
type: string
29+
default: "ci-builder"
30+
secrets:
31+
KAYOBE_VAULT_PASSWORD:
32+
required: true
33+
CLOUDS_YAML:
34+
required: true
35+
OS_APPLICATION_CREDENTIAL_ID:
36+
required: true
37+
OS_APPLICATION_CREDENTIAL_SECRET:
38+
required: true
39+
40+
env:
41+
ANSIBLE_FORCE_COLOR: True
42+
jobs:
43+
overcloud-host-image-upload:
44+
name: Build overcloud host images
45+
if: github.repository == 'stackhpc/stackhpc-kayobe-config'
46+
runs-on: arc-skc-host-image-builder-runner
47+
permissions: {}
48+
steps:
49+
- name: Install package dependencies
50+
run: |
51+
sudo apt update
52+
sudo apt install -y build-essential git unzip nodejs python3-wheel python3-pip python3-venv
53+
54+
- uses: actions/checkout@v4
55+
with:
56+
path: src/kayobe-config
57+
58+
- name: Determine OpenStack release
59+
id: openstack_release
60+
run: |
61+
BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' .gitreview)
62+
echo "openstack_release=${BRANCH}" | sed "s|stable/||" >> $GITHUB_OUTPUT
63+
64+
- name: Clone StackHPC Kayobe repository
65+
uses: actions/checkout@v4
66+
with:
67+
repository: stackhpc/kayobe
68+
ref: refs/heads/stackhpc/${{ steps.openstack_release.outputs.openstack_release }}
69+
path: src/kayobe
70+
71+
# FIXME: Without this workaround we see the following issue after the runner is power cycled:
72+
# TASK [MichaelRigart.interfaces : RedHat | ensure network service is started and enabled] ***
73+
# Unable to start service network: Job for network.service failed because the control process exited with error code.
74+
# See \"systemctl status network.service\" and \"journalctl -xe\" for details.
75+
- name: Kill dhclient (workaround)
76+
run: |
77+
(sudo killall dhclient || true) && sudo systemctl restart network
78+
79+
- name: Install Kayobe
80+
run: |
81+
mkdir -p venvs &&
82+
pushd venvs &&
83+
python3 -m venv kayobe &&
84+
source kayobe/bin/activate &&
85+
pip install -U pip &&
86+
pip install ../src/kayobe
87+
88+
- name: Bootstrap the control host
89+
run: |
90+
source venvs/kayobe/bin/activate &&
91+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
92+
kayobe control host bootstrap
93+
94+
- name: Generate clouds.yaml
95+
run: |
96+
cat << EOF > clouds.yaml
97+
${{ secrets.CLOUDS_YAML }}
98+
EOF
99+
100+
- name: Install OpenStack client
101+
run: |
102+
source venvs/kayobe/bin/activate &&
103+
pip install python-openstackclient -c https://opendev.org/openstack/requirements/raw/branch/stable/yoga/upper-constraints.txt
104+
105+
- name: Download CentOS Stream 8 overcloud host image from Ark
106+
run: |
107+
source venvs/kayobe/bin/activate &&
108+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
109+
kayobe playbook run \
110+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
111+
-e os_distribution="centos" \
112+
-e os_release="8-stream"
113+
env:
114+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
115+
if: inputs.centos
116+
117+
- name: Output CentOS Stream 8 image tag
118+
id: centos_8_stream_image_tag
119+
run: |
120+
echo image_tag=$(grep stackhpc_centos_8_stream_overcloud_host_image_version: src/kayobe-config/etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
121+
122+
- name: Upload CentOS Stream 8 overcloud host image to Cloud
123+
run: |
124+
source venvs/kayobe/bin/activate &&
125+
openstack image create \
126+
overcloud-centos-8-stream-${{ steps.centos_8_stream_image_tag.outputs.image_tag }} \
127+
--container-format bare \
128+
--disk-format qcow2 \
129+
--file /tmp/overcloud-centos-8-stream.qcow2 \
130+
--private \
131+
--progress
132+
env:
133+
OS_CLOUD: openstack
134+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
135+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
136+
if: inputs.centos
137+
138+
- name: Download Rocky Linux 8 overcloud host image from Ark
139+
run: |
140+
source venvs/kayobe/bin/activate &&
141+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
142+
kayobe playbook run \
143+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-upload.yml \
144+
-e os_distribution="rocky" \
145+
-e os_release="8"
146+
env:
147+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
148+
if: inputs.rocky8
149+
150+
- name: Output Rocky Linux 8 image tag
151+
id: rocky_8_image_tag
152+
run: |
153+
echo image_tag=$(grep stackhpc_rocky_8_overcloud_host_image_version: src/kayobe-config/etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
154+
155+
- name: Upload Rocky Linux 8 overcloud host image to Cloud
156+
run: |
157+
source venvs/kayobe/bin/activate &&
158+
openstack image create \
159+
overcloud-rocky-8-${{ steps.rocky_8_image_tag.outputs.image_tag }} \
160+
--container-format bare \
161+
--disk-format qcow2 \
162+
--file /tmp/rocky-8.qcow2 \
163+
--private \
164+
--progress
165+
env:
166+
OS_CLOUD: openstack
167+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
168+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
169+
if: inputs.rocky8
170+
171+
- name: Download Rocky Linux 9 overcloud host image from Ark
172+
run: |
173+
source venvs/kayobe/bin/activate &&
174+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
175+
kayobe playbook run \
176+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-upload.yml \
177+
-e os_distribution="rocky" \
178+
-e os_release="9"
179+
env:
180+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
181+
if: inputs.rocky9
182+
183+
- name: Output Rocky Linux 9 image tag
184+
id: rocky_9_image_tag
185+
run: |
186+
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
187+
188+
- name: Upload Rocky Linux 9 overcloud host image to Cloud
189+
run: |
190+
source venvs/kayobe/bin/activate &&
191+
openstack image create \
192+
overcloud-rocky-9-${{ steps.rocky_9_image_tag.outputs.image_tag }} \
193+
--container-format bare \
194+
--disk-format qcow2 \
195+
--file /tmp/rocky-9.qcow2 \
196+
--private \
197+
--progress
198+
env:
199+
OS_CLOUD: openstack
200+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
201+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
202+
if: inputs.rocky9
203+
204+
- name: Download Ubuntu Focal 20.04 overcloud host image from Ark
205+
run: |
206+
source venvs/kayobe/bin/activate &&
207+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
208+
kayobe playbook run \
209+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-upload.yml \
210+
-e os_distribution="ubuntu" \
211+
-e os_release="focal"
212+
env:
213+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
214+
if: inputs.ubuntu-focal
215+
216+
- name: Output Ubuntu Focal image tag
217+
id: ubuntu_focal_image_tag
218+
run: |
219+
echo image_tag=$(grep stackhpc_ubuntu_focal_overcloud_host_image_version: src/kayobe-config/etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
220+
221+
- name: Upload Ubuntu Focal 20.04 overcloud host image to Cloud
222+
run: |
223+
source venvs/kayobe/bin/activate &&
224+
openstack image create \
225+
overcloud-ubuntu-focal-${{ steps.ubuntu_focal_image_tag.outputs.image_tag }} \
226+
--container-format bare \
227+
--disk-format qcow2 \
228+
--file /tmp/ubuntu-focal.qcow2 \
229+
--private \
230+
--progress
231+
env:
232+
OS_CLOUD: openstack
233+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
234+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
235+
if: inputs.ubuntu-focal
236+
237+
- name: Download Ubuntu Jammy 22.04 overcloud host image from Ark
238+
run: |
239+
source venvs/kayobe/bin/activate &&
240+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
241+
kayobe playbook run \
242+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-upload.yml \
243+
-e os_distribution="ubuntu" \
244+
-e os_release="jammy"
245+
env:
246+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
247+
if: inputs.ubuntu-jammy
248+
249+
- name: Output Ubuntu Jammy image tag
250+
id: ubuntu_jammy_image_tag
251+
run: |
252+
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
253+
254+
- name: Upload Ubuntu Jammy 22.04 overcloud host image to Cloud
255+
run: |
256+
source venvs/kayobe/bin/activate &&
257+
openstack image create \
258+
overcloud-ubuntu-jammy-${{ steps.ubuntu_jammy_image_tag.outputs.image_tag }} \
259+
--container-format bare \
260+
--disk-format qcow2 \
261+
--file /tmp/ubuntu-jammy.qcow2 \
262+
--private \
263+
--progress
264+
env:
265+
OS_CLOUD: openstack
266+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
267+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
268+
if: inputs.ubuntu-jammy
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
---
2+
- name: Download an overcloud host image from Ark
3+
hosts: localhost
4+
vars:
5+
stackhpc_overcloud_host_image_url: "{{ stackhpc_release_pulp_content_url }}/kayobe-images/\
6+
{{ openstack_release }}/{{ os_distribution }}/{{ os_release }}/\
7+
{{ 'ofed/' if stackhpc_overcloud_host_image_is_ofed else '' }}\
8+
{{ stackhpc_overcloud_host_image_version }}/\
9+
overcloud-{{ os_distribution }}-{{ os_release }}\
10+
{{ '-ofed' if stackhpc_overcloud_host_image_is_ofed else '' }}.qcow2"
11+
12+
tasks:
13+
- name: Print image information
14+
debug:
15+
msg: |
16+
OS Distribution: {{ os_distribution }}
17+
OS Release: {{ os_release }}
18+
Image tag: {{ stackhpc_overcloud_host_image_version }}
19+
OFED: {{ stackhpc_overcloud_host_image_is_ofed }}
20+
21+
# TODO: Add checksum support
22+
- name: Download image artifact
23+
get_url:
24+
url: "{{ stackhpc_overcloud_host_image_url }}"
25+
username: "{{ stackhpc_release_pulp_username }}"
26+
password: "{{ stackhpc_release_pulp_password }}"
27+
unredirected_headers:
28+
- "Authorization"
29+
dest: "/tmp/{{ os_distribution }}-{{ os_release }}.qcow2"
30+
owner: "{{ ansible_user }}"
31+
group: "{{ ansible_user }}"
32+
mode: "0644"

0 commit comments

Comments
 (0)