Skip to content

Commit 6302be7

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

File tree

2 files changed

+298
-0
lines changed

2 files changed

+298
-0
lines changed
Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
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: Download CentOS Stream 8 overcloud host image from Ark
98+
run: |
99+
source venvs/kayobe/bin/activate &&
100+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
101+
kayobe playbook run \
102+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
103+
-e os_distribution="centos" \
104+
-e os_release="8-stream"
105+
env:
106+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
107+
if: inputs.centos
108+
109+
- name: Output CentOS Stream 8 image tag
110+
id: centos_8_stream_image_tag
111+
run: |
112+
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
113+
114+
- name: Upload CentOS Stream 8 overcloud host image to Cloud
115+
run: |
116+
source venvs/kayobe/bin/activate &&
117+
openstack image create \
118+
overcloud-centos-8-stream-${{ steps.centos_8_stream_image_tag.outputs.image_tag }} \
119+
--container-format bare \
120+
--disk-format qcow2 \
121+
--file /tmp/centos-8-stream.qcow2 \
122+
--private \
123+
--progress
124+
env:
125+
OS_CLOUD: openstack
126+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
127+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
128+
if: inputs.centos
129+
130+
- name: Download Rocky Linux 8 overcloud host image from Ark
131+
run: |
132+
source venvs/kayobe/bin/activate &&
133+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
134+
kayobe playbook run \
135+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
136+
-e os_distribution="rocky" \
137+
-e os_release="8"
138+
env:
139+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
140+
if: inputs.rocky8
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: Upload Rocky Linux 8 overcloud host image to Cloud
148+
run: |
149+
source venvs/kayobe/bin/activate &&
150+
openstack image create \
151+
overcloud-rocky-8-${{ steps.rocky_8_image_tag.outputs.image_tag }} \
152+
--container-format bare \
153+
--disk-format qcow2 \
154+
--file /tmp/rocky-8.qcow2 \
155+
--private \
156+
--progress
157+
env:
158+
OS_CLOUD: openstack
159+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
160+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
161+
if: inputs.rocky8
162+
163+
- name: Download Rocky Linux 9 overcloud host image from Ark
164+
run: |
165+
source venvs/kayobe/bin/activate &&
166+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
167+
kayobe playbook run \
168+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
169+
-e os_distribution="rocky" \
170+
-e os_release="9"
171+
env:
172+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
173+
if: inputs.rocky9
174+
175+
- name: Output Rocky Linux 9 image tag
176+
id: rocky_9_image_tag
177+
run: |
178+
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
179+
180+
- name: Upload Rocky Linux 9 overcloud host image to Cloud
181+
run: |
182+
source venvs/kayobe/bin/activate &&
183+
openstack image create \
184+
overcloud-rocky-9-${{ steps.rocky_9_image_tag.outputs.image_tag }} \
185+
--container-format bare \
186+
--disk-format qcow2 \
187+
--file /tmp/rocky-9.qcow2 \
188+
--private \
189+
--progress
190+
env:
191+
OS_CLOUD: openstack
192+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
193+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
194+
if: inputs.rocky9
195+
196+
- name: Download Ubuntu Focal 20.04 overcloud host image from Ark
197+
run: |
198+
source venvs/kayobe/bin/activate &&
199+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
200+
kayobe playbook run \
201+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
202+
-e os_distribution="ubuntu" \
203+
-e os_release="focal"
204+
env:
205+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
206+
if: inputs.ubuntu-focal
207+
208+
- name: Output Ubuntu Focal image tag
209+
id: ubuntu_focal_image_tag
210+
run: |
211+
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
212+
213+
- name: Upload Ubuntu Focal 20.04 overcloud host image to Cloud
214+
run: |
215+
source venvs/kayobe/bin/activate &&
216+
openstack image create \
217+
overcloud-ubuntu-focal-${{ steps.ubuntu_focal_image_tag.outputs.image_tag }} \
218+
--container-format bare \
219+
--disk-format qcow2 \
220+
--file /tmp/ubuntu-focal.qcow2 \
221+
--private \
222+
--progress
223+
env:
224+
OS_CLOUD: openstack
225+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
226+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
227+
if: inputs.ubuntu-focal
228+
229+
- name: Download Ubuntu Jammy 22.04 overcloud host image from Ark
230+
run: |
231+
source venvs/kayobe/bin/activate &&
232+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
233+
kayobe playbook run \
234+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
235+
-e os_distribution="ubuntu" \
236+
-e os_release="jammy"
237+
env:
238+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
239+
if: inputs.ubuntu-jammy
240+
241+
- name: Output Ubuntu Jammy image tag
242+
id: ubuntu_jammy_image_tag
243+
run: |
244+
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
245+
246+
- name: Upload Ubuntu Jammy 22.04 overcloud host image to Cloud
247+
run: |
248+
source venvs/kayobe/bin/activate &&
249+
openstack image create \
250+
overcloud-ubuntu-jammy-${{ steps.ubuntu_jammy_image_tag.outputs.image_tag }} \
251+
--container-format bare \
252+
--disk-format qcow2 \
253+
--file /tmp/ubuntu-jammy.qcow2 \
254+
--private \
255+
--progress
256+
env:
257+
OS_CLOUD: openstack
258+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
259+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
260+
if: inputs.ubuntu-jammy
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)