Skip to content

Commit d7aa150

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

File tree

2 files changed

+317
-0
lines changed

2 files changed

+317
-0
lines changed
Lines changed: 285 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,285 @@
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+
OS_CLOUD:
40+
required: true
41+
42+
env:
43+
ANSIBLE_FORCE_COLOR: True
44+
jobs:
45+
overcloud-host-image-upload:
46+
name: Build overcloud host images
47+
if: github.repository == 'stackhpc/stackhpc-kayobe-config'
48+
runs-on: [self-hosted, stackhpc-kayobe-config-kolla-builder]
49+
permissions: {}
50+
steps:
51+
- uses: actions/checkout@v4
52+
with:
53+
path: src/kayobe-config
54+
55+
- name: Determine OpenStack release
56+
id: openstack_release
57+
run: |
58+
BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' .gitreview)
59+
echo "openstack_release=${BRANCH}" | sed "s|stable/||" >> $GITHUB_OUTPUT
60+
61+
- name: Clone StackHPC Kayobe repository
62+
uses: actions/checkout@v4
63+
with:
64+
repository: stackhpc/kayobe
65+
ref: refs/heads/stackhpc/${{ steps.openstack_release.outputs.openstack_release }}
66+
path: src/kayobe
67+
68+
# FIXME: Failed in kolla-ansible : Ensure the latest version of pip is installed
69+
- name: Install dependencies
70+
run: |
71+
sudo dnf -y install python3-virtualenv zstd
72+
73+
- name: Setup networking
74+
run: |
75+
if ! ip l show breth1 >/dev/null 2>&1; then
76+
sudo ip l add breth1 type bridge
77+
fi
78+
sudo ip l set breth1 up
79+
if ! ip a show breth1 | grep 192.168.33.3/24; then
80+
sudo ip a add 192.168.33.3/24 dev breth1
81+
fi
82+
if ! ip l show dummy1 >/dev/null 2>&1; then
83+
sudo ip l add dummy1 type dummy
84+
fi
85+
sudo ip l set dummy1 up
86+
sudo ip l set dummy1 master breth1
87+
88+
# FIXME: Without this workaround we see the following issue after the runner is power cycled:
89+
# TASK [MichaelRigart.interfaces : RedHat | ensure network service is started and enabled] ***
90+
# Unable to start service network: Job for network.service failed because the control process exited with error code.
91+
# See \"systemctl status network.service\" and \"journalctl -xe\" for details.
92+
- name: Kill dhclient (workaround)
93+
run: |
94+
(sudo killall dhclient || true) && sudo systemctl restart network
95+
96+
- name: Install Kayobe
97+
run: |
98+
mkdir -p venvs &&
99+
pushd venvs &&
100+
python3 -m venv kayobe &&
101+
source kayobe/bin/activate &&
102+
pip install -U pip &&
103+
pip install ../src/kayobe
104+
105+
- name: Bootstrap the control host
106+
run: |
107+
source venvs/kayobe/bin/activate &&
108+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
109+
kayobe control host bootstrap
110+
111+
- name: Generate clouds.yaml
112+
run: |
113+
cat << EOF > clouds.yaml
114+
${{ secrets.CLOUDS_YAML }}
115+
EOF
116+
117+
- name: Install OpenStack client
118+
run: |
119+
source venvs/kayobe/bin/activate &&
120+
pip install python-openstackclient -c https://opendev.org/openstack/requirements/raw/branch/stable/yoga/upper-constraints.txt
121+
122+
- name: Download CentOS Stream 8 overcloud host image from Ark
123+
run: |
124+
source venvs/kayobe/bin/activate &&
125+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
126+
kayobe playbook run \
127+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-download.yml \
128+
-e os_distribution="centos" \
129+
-e os_release="8-stream"
130+
env:
131+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
132+
if: inputs.centos
133+
134+
- name: Output CentOS Stream 8 image tag
135+
id: centos_8_stream_image_tag
136+
run: |
137+
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
138+
139+
- name: Upload CentOS Stream 8 overcloud host image to Cloud
140+
run: |
141+
source venvs/kayobe/bin/activate &&
142+
openstack image create \
143+
overcloud-centos-8-stream-${{ steps.centos_8_stream_image_tag.outputs.image_tag }} \
144+
--container-format bare \
145+
--disk-format qcow2 \
146+
--file /tmp/overcloud-centos-8-stream.qcow2 \
147+
--private \
148+
--progress
149+
env:
150+
OS_CLOUD: ${{ secrets.OS_CLOUD }}
151+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
152+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
153+
if: inputs.centos
154+
155+
- name: Download Rocky Linux 8 overcloud host image from Ark
156+
run: |
157+
source venvs/kayobe/bin/activate &&
158+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
159+
kayobe playbook run \
160+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-upload.yml \
161+
-e os_distribution="rocky" \
162+
-e os_release="8"
163+
env:
164+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
165+
if: inputs.rocky8
166+
167+
- name: Output Rocky Linux 8 image tag
168+
id: rocky_8_image_tag
169+
run: |
170+
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
171+
172+
- name: Upload Rocky Linux 8 overcloud host image to Cloud
173+
run: |
174+
source venvs/kayobe/bin/activate &&
175+
openstack image create \
176+
overcloud-rocky-8-${{ steps.rocky_8_image_tag.outputs.image_tag }} \
177+
--container-format bare \
178+
--disk-format qcow2 \
179+
--file /tmp/rocky-8.qcow2 \
180+
--private \
181+
--progress
182+
env:
183+
OS_CLOUD: ${{ secrets.OS_CLOUD }}
184+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
185+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
186+
if: inputs.rocky8
187+
188+
- name: Download Rocky Linux 9 overcloud host image from Ark
189+
run: |
190+
source venvs/kayobe/bin/activate &&
191+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
192+
kayobe playbook run \
193+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-upload.yml \
194+
-e os_distribution="rocky" \
195+
-e os_release="9"
196+
env:
197+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
198+
if: inputs.rocky9
199+
200+
- name: Output Rocky Linux 9 image tag
201+
id: rocky_9_image_tag
202+
run: |
203+
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
204+
205+
- name: Upload Rocky Linux 9 overcloud host image to Cloud
206+
run: |
207+
source venvs/kayobe/bin/activate &&
208+
openstack image create \
209+
overcloud-rocky-9-${{ steps.rocky_9_image_tag.outputs.image_tag }} \
210+
--container-format bare \
211+
--disk-format qcow2 \
212+
--file /tmp/rocky-9.qcow2 \
213+
--private \
214+
--progress
215+
env:
216+
OS_CLOUD: ${{ secrets.OS_CLOUD }}
217+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
218+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
219+
if: inputs.rocky9
220+
221+
- name: Download Ubuntu Focal 20.04 overcloud host image from Ark
222+
run: |
223+
source venvs/kayobe/bin/activate &&
224+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
225+
kayobe playbook run \
226+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-upload.yml \
227+
-e os_distribution="ubuntu" \
228+
-e os_release="focal"
229+
env:
230+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
231+
if: inputs.ubuntu-focal
232+
233+
- name: Output Ubuntu Focal image tag
234+
id: ubuntu_focal_image_tag
235+
run: |
236+
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
237+
238+
- name: Upload Ubuntu Focal 20.04 overcloud host image to Cloud
239+
run: |
240+
source venvs/kayobe/bin/activate &&
241+
openstack image create \
242+
overcloud-ubuntu-focal-${{ steps.ubuntu_focal_image_tag.outputs.image_tag }} \
243+
--container-format bare \
244+
--disk-format qcow2 \
245+
--file /tmp/ubuntu-focal.qcow2 \
246+
--private \
247+
--progress
248+
env:
249+
OS_CLOUD: ${{ secrets.OS_CLOUD }}
250+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
251+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
252+
if: inputs.ubuntu-focal
253+
254+
- name: Download Ubuntu Jammy 22.04 overcloud host image from Ark
255+
run: |
256+
source venvs/kayobe/bin/activate &&
257+
source src/kayobe-config/kayobe-env --environment ${{ inputs.kayobe-environment }} &&
258+
kayobe playbook run \
259+
src/kayobe-config/etc/kayobe/ansible/pulp-host-image-upload.yml \
260+
-e os_distribution="ubuntu" \
261+
-e os_release="jammy"
262+
env:
263+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
264+
if: inputs.ubuntu-jammy
265+
266+
- name: Output Ubuntu Jammy image tag
267+
id: ubuntu_jammy_image_tag
268+
run: |
269+
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
270+
271+
- name: Upload Ubuntu Jammy 22.04 overcloud host image to Cloud
272+
run: |
273+
source venvs/kayobe/bin/activate &&
274+
openstack image create \
275+
overcloud-ubuntu-jammy-${{ steps.ubuntu_jammy_image_tag.outputs.image_tag }} \
276+
--container-format bare \
277+
--disk-format qcow2 \
278+
--file /tmp/ubuntu-jammy.qcow2 \
279+
--private \
280+
--progress
281+
env:
282+
OS_CLOUD: ${{ secrets.OS_CLOUD }}
283+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
284+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
285+
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)