Skip to content

Commit 0dfbb94

Browse files
authored
Merge pull request #912 from stackhpc/image-upload-workflow
Add workflow to upload Ark host images to glance
2 parents 7fecea9 + 25ebb3f commit 0dfbb94

File tree

2 files changed

+358
-0
lines changed

2 files changed

+358
-0
lines changed
Lines changed: 320 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,320 @@
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: Upload 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}' src/kayobe-config/.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+
- name: Install Kayobe
72+
run: |
73+
mkdir -p venvs &&
74+
pushd venvs &&
75+
python3 -m venv kayobe &&
76+
source kayobe/bin/activate &&
77+
pip install -U pip &&
78+
pip install ../src/kayobe
79+
80+
- name: Bootstrap the control host
81+
run: |
82+
source venvs/kayobe/bin/activate &&
83+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
84+
kayobe control host bootstrap --skip-tags bootstrap
85+
86+
- name: Generate clouds.yaml
87+
run: |
88+
cat << EOF > clouds.yaml
89+
${{ secrets.CLOUDS_YAML }}
90+
EOF
91+
92+
- name: Install OpenStack client
93+
run: |
94+
source venvs/kayobe/bin/activate &&
95+
pip install python-openstackclient -c https://opendev.org/openstack/requirements/raw/branch/stable/yoga/upper-constraints.txt
96+
97+
- name: Output CentOS Stream 8 image tag
98+
id: centos_8_stream_image_tag
99+
run: |
100+
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
101+
102+
- name: Check if image exists already
103+
id: centos_8_stream_image_exists
104+
run: |
105+
source venvs/kayobe/bin/activate &&
106+
openstack image show \
107+
overcloud-centos-8-stream-${{ steps.centos_8_stream_image_tag.outputs.image_tag }}
108+
env:
109+
OS_CLOUD: openstack
110+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
111+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
112+
continue-on-error: true
113+
114+
- name: Download CentOS Stream 8 overcloud host image from Ark
115+
run: |
116+
source venvs/kayobe/bin/activate &&
117+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
118+
kayobe playbook run \
119+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
120+
-e os_distribution="centos" \
121+
-e os_release="8-stream"
122+
env:
123+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
124+
if: inputs.centos && steps.centos_8_stream_image_exists.outcome == 'failure'
125+
126+
- name: Upload CentOS Stream 8 overcloud host image to Cloud
127+
run: |
128+
source venvs/kayobe/bin/activate &&
129+
openstack image create \
130+
overcloud-centos-8-stream-${{ steps.centos_8_stream_image_tag.outputs.image_tag }} \
131+
--container-format bare \
132+
--disk-format qcow2 \
133+
--file /tmp/centos-8-stream.qcow2 \
134+
--private \
135+
--progress
136+
env:
137+
OS_CLOUD: openstack
138+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
139+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
140+
if: inputs.centos && steps.centos_8_stream_image_exists.outcome == 'failure'
141+
142+
- name: Output Rocky Linux 8 image tag
143+
id: rocky_8_image_tag
144+
run: |
145+
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
146+
147+
- name: Check if image exists already
148+
id: rocky_8_image_exists
149+
run: |
150+
source venvs/kayobe/bin/activate &&
151+
openstack image show \
152+
overcloud-rocky-8-${{ steps.rocky_8_image_tag.outputs.image_tag }}
153+
env:
154+
OS_CLOUD: openstack
155+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
156+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
157+
continue-on-error: true
158+
159+
- name: Download Rocky Linux 8 overcloud host image from Ark
160+
run: |
161+
source venvs/kayobe/bin/activate &&
162+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
163+
kayobe playbook run \
164+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
165+
-e os_distribution="rocky" \
166+
-e os_release="8"
167+
env:
168+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
169+
if: inputs.rocky8 && steps.rocky_8_image_exists.outcome == 'failure'
170+
171+
- name: Upload Rocky Linux 8 overcloud host image to Cloud
172+
run: |
173+
source venvs/kayobe/bin/activate &&
174+
openstack image create \
175+
overcloud-rocky-8-${{ steps.rocky_8_image_tag.outputs.image_tag }} \
176+
--container-format bare \
177+
--disk-format qcow2 \
178+
--file /tmp/rocky-8.qcow2 \
179+
--private \
180+
--progress
181+
env:
182+
OS_CLOUD: openstack
183+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
184+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
185+
if: inputs.rocky8 && steps.rocky_8_image_exists.outcome == 'failure'
186+
187+
- name: Output Rocky Linux 9 image tag
188+
id: rocky_9_image_tag
189+
run: |
190+
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
191+
192+
- name: Check if image exists already
193+
id: rocky_9_image_exists
194+
run: |
195+
source venvs/kayobe/bin/activate &&
196+
openstack image show \
197+
overcloud-rocky-9-${{ steps.rocky_9_image_tag.outputs.image_tag }}
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+
continue-on-error: true
203+
204+
- name: Download Rocky Linux 9 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-download.yml \
210+
-e os_distribution="rocky" \
211+
-e os_release="9"
212+
env:
213+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
214+
if: inputs.rocky9 && steps.rocky_9_image_exists.outcome == 'failure'
215+
216+
- name: Upload Rocky Linux 9 overcloud host image to Cloud
217+
run: |
218+
source venvs/kayobe/bin/activate &&
219+
openstack image create \
220+
overcloud-rocky-9-${{ steps.rocky_9_image_tag.outputs.image_tag }} \
221+
--container-format bare \
222+
--disk-format qcow2 \
223+
--file /tmp/rocky-9.qcow2 \
224+
--private \
225+
--progress
226+
env:
227+
OS_CLOUD: openstack
228+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
229+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
230+
if: inputs.rocky9 && steps.rocky_9_image_exists.outcome == 'failure'
231+
232+
- name: Output Ubuntu Focal image tag
233+
id: ubuntu_focal_image_tag
234+
run: |
235+
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
236+
237+
- name: Check if image exists already
238+
id: ubuntu_focal_image_exists
239+
run: |
240+
source venvs/kayobe/bin/activate &&
241+
openstack image show \
242+
overcloud-ubuntu-focal-${{ steps.ubuntu_focal_image_tag.outputs.image_tag }}
243+
env:
244+
OS_CLOUD: openstack
245+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
246+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
247+
continue-on-error: true
248+
249+
- name: Download Ubuntu Focal 20.04 overcloud host image from Ark
250+
run: |
251+
source venvs/kayobe/bin/activate &&
252+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
253+
kayobe playbook run \
254+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
255+
-e os_distribution="ubuntu" \
256+
-e os_release="focal"
257+
env:
258+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
259+
if: inputs.ubuntu-focal && steps.ubuntu_focal_image_exists.outcome == 'failure'
260+
261+
- name: Upload Ubuntu Focal 20.04 overcloud host image to Cloud
262+
run: |
263+
source venvs/kayobe/bin/activate &&
264+
openstack image create \
265+
overcloud-ubuntu-focal-${{ steps.ubuntu_focal_image_tag.outputs.image_tag }} \
266+
--container-format bare \
267+
--disk-format qcow2 \
268+
--file /tmp/ubuntu-focal.qcow2 \
269+
--private \
270+
--progress
271+
env:
272+
OS_CLOUD: openstack
273+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
274+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
275+
if: inputs.ubuntu-focal && steps.ubuntu_focal_image_exists.outcome == 'failure'
276+
277+
- name: Output Ubuntu Jammy image tag
278+
id: ubuntu_jammy_image_tag
279+
run: |
280+
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
281+
282+
- name: Check if image exists already
283+
id: ubuntu_jammy_image_exists
284+
run: |
285+
source venvs/kayobe/bin/activate &&
286+
openstack image show \
287+
overcloud-ubuntu-jammy-${{ steps.ubuntu_jammy_image_tag.outputs.image_tag }}
288+
env:
289+
OS_CLOUD: openstack
290+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
291+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
292+
continue-on-error: true
293+
294+
- name: Download Ubuntu Jammy 22.04 overcloud host image from Ark
295+
run: |
296+
source venvs/kayobe/bin/activate &&
297+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
298+
kayobe playbook run \
299+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
300+
-e os_distribution="ubuntu" \
301+
-e os_release="jammy"
302+
env:
303+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
304+
if: inputs.ubuntu-jammy && steps.ubuntu_jammy_image_exists.outcome == 'failure'
305+
306+
- name: Upload Ubuntu Jammy 22.04 overcloud host image to Cloud
307+
run: |
308+
source venvs/kayobe/bin/activate &&
309+
openstack image create \
310+
overcloud-ubuntu-jammy-${{ steps.ubuntu_jammy_image_tag.outputs.image_tag }} \
311+
--container-format bare \
312+
--disk-format qcow2 \
313+
--file /tmp/ubuntu-jammy.qcow2 \
314+
--private \
315+
--progress
316+
env:
317+
OS_CLOUD: openstack
318+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
319+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
320+
if: inputs.ubuntu-jammy && steps.ubuntu_jammy_image_exists.outcome == 'failure'
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
- name: Download an overcloud host image from Ark
3+
hosts: localhost
4+
vars:
5+
# This var is an edited version of stackhpc_overcloud_host_image_url
6+
# without the auth credentials in it. Auth is handled by username and
7+
# password in the get_url task of this playbook
8+
stackhpc_overcloud_host_image_url_no_auth: "{{ stackhpc_release_pulp_content_url }}/kayobe-images/\
9+
{{ openstack_release }}/{{ os_distribution }}/{{ os_release }}/\
10+
{{ 'ofed/' if stackhpc_overcloud_host_image_is_ofed else '' }}\
11+
{{ stackhpc_overcloud_host_image_version }}/\
12+
overcloud-{{ os_distribution }}-{{ os_release }}\
13+
{{ '-ofed' if stackhpc_overcloud_host_image_is_ofed else '' }}.qcow2"
14+
15+
tasks:
16+
- name: Print image information
17+
debug:
18+
msg: |
19+
OS Distribution: {{ os_distribution }}
20+
OS Release: {{ os_release }}
21+
Image tag: {{ stackhpc_overcloud_host_image_version }}
22+
OFED: {{ stackhpc_overcloud_host_image_is_ofed }}
23+
24+
# TODO: Add checksum support
25+
- name: Download image artifact
26+
get_url:
27+
url: "{{ stackhpc_overcloud_host_image_url_no_auth }}"
28+
username: "{{ stackhpc_image_repository_username }}"
29+
password: "{{ stackhpc_image_repository_password }}"
30+
force_basic_auth: true
31+
unredirected_headers:
32+
- "Authorization"
33+
dest: "/tmp/{{ os_distribution }}-{{ os_release }}.qcow2"
34+
mode: "0644"
35+
register: image_download_result
36+
until: image_download_result.status_code == 200
37+
retries: 3
38+
delay: 60

0 commit comments

Comments
 (0)