Skip to content

Commit 02a80e6

Browse files
authored
Merge branch 'stackhpc/2025.1' into feature/GT-1561-dell-sonic-2025.1
2 parents 7536dab + 26aa14a commit 02a80e6

File tree

94 files changed

+2310
-890
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+2310
-890
lines changed

.github/stackhpc-pull-request-path-filters.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ aio: &aio
1111
- '.github/workflows/stackhpc-pull-request.yml'
1212
- 'etc/kayobe/*.yml'
1313
- 'etc/kayobe/ansible/tools/configure-aio-resources.yml'
14-
- 'etc/kayobe/ansible/stackhpc-openstack-tests.yml'
1514
- 'etc/kayobe/ansible/tools/growroot.yml'
15+
- 'etc/kayobe/ansible/tools/stackhpc-cloud-tests.yml'
1616
- 'etc/kayobe/ansible/requirements.yml'
1717
- 'etc/kayobe/ansible/scripts/aio-init.sh'
1818
- 'etc/kayobe/environments/ci-aio/**'

.github/workflows/ipa-image-build.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,6 @@ jobs:
6161
with:
6262
path: src/kayobe-config
6363

64-
- name: Output image tag of the builder
65-
id: builder_image_tag
66-
run: |
67-
echo image_tag=$(grep stackhpc_rocky_9_overcloud_host_image_version: etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
68-
6964
- name: Determine OpenStack release
7065
id: openstack_release
7166
run: |

.github/workflows/multinode-inputs.py

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# The test scenario is randomly selected.
33
# The inputs are printed to stdout in GitHub step output key=value format.
44

5+
import argparse
56
from dataclasses import dataclass
67
import random
78
import typing as t
@@ -17,6 +18,7 @@ class OSRelease:
1718
@dataclass
1819
class OpenStackRelease:
1920
version: str
21+
previous_version: str
2022
os_releases: t.List[OSRelease]
2123

2224

@@ -33,19 +35,41 @@ class Scenario:
3335
UBUNTU_NOBLE = OSRelease("ubuntu", "noble", "ubuntu")
3436
# NOTE(upgrade): Add supported releases here.
3537
OPENSTACK_RELEASES = [
36-
OpenStackRelease("2023.1", [ROCKY_9, UBUNTU_JAMMY]),
37-
OpenStackRelease("2024.1", [ROCKY_9, UBUNTU_JAMMY]),
38-
OpenStackRelease("2025.1", [ROCKY_9, UBUNTU_NOBLE]),
38+
OpenStackRelease("2023.1", "zed", [ROCKY_9, UBUNTU_JAMMY]),
39+
OpenStackRelease("2024.1", "2023.1", [ROCKY_9, UBUNTU_JAMMY]),
40+
OpenStackRelease("2025.1", "2024.1", [ROCKY_9, UBUNTU_NOBLE]),
3941
]
4042
NEUTRON_PLUGINS = ["ovs", "ovn"]
4143
VERSION_HIERARCHY = ["zed", "2023.1", "2024.1", "2025.1"]
4244

4345

4446
def main() -> None:
47+
48+
parser = argparse.ArgumentParser(
49+
description='Randomly picks a multinode scenario to execute')
50+
parser.add_argument(
51+
'--output-summary', '-s',
52+
type=argparse.FileType('w', encoding='UTF-8'),
53+
default=None,
54+
help="Write a markdown summary table of selected inputs to a file (use '-' to write to stdout)")
55+
args = parser.parse_args()
56+
4557
scenario = random_scenario()
46-
inputs = generate_inputs(scenario)
58+
inputs = {
59+
"os_distribution": scenario.os_release.distribution,
60+
"os_release": scenario.os_release.release,
61+
"ssh_username": scenario.os_release.ssh_username,
62+
"neutron_plugin": scenario.neutron_plugin,
63+
"upgrade": scenario.upgrade,
64+
"stackhpc_kayobe_config_version": get_branch(scenario.openstack_release.version),
65+
"stackhpc_kayobe_config_previous_version": get_branch(scenario.openstack_release.previous_version),
66+
"terraform_kayobe_multinode_version": get_tkm_version(scenario.openstack_release.version),
67+
"terraform_kayobe_multinode_previous_version": get_tkm_version(scenario.openstack_release.previous_version),
68+
}
4769
for name, value in inputs.items():
4870
write_output(name, value)
71+
if args.output_summary:
72+
write_summary(inputs, args.output_summary)
4973

5074

5175
def random_scenario() -> Scenario:
@@ -56,43 +80,30 @@ def random_scenario() -> Scenario:
5680
return Scenario(openstack_release, os_release, neutron_plugin, upgrade)
5781

5882

59-
def generate_inputs(scenario: Scenario) -> t.Dict[str, str]:
60-
branch = get_branch(scenario.openstack_release.version)
61-
previous_branch = get_branch(
62-
VERSION_HIERARCHY[
63-
VERSION_HIERARCHY.index(scenario.openstack_release.version) - 1
64-
]
65-
)
66-
terraform_kayobe_multinode_version = get_tkm_version(
67-
scenario.openstack_release.version
68-
)
69-
inputs = {
70-
"os_distribution": scenario.os_release.distribution,
71-
"os_release": scenario.os_release.release,
72-
"ssh_username": scenario.os_release.ssh_username,
73-
"neutron_plugin": scenario.neutron_plugin,
74-
"upgrade": scenario.upgrade,
75-
"stackhpc_kayobe_config_version": branch,
76-
"stackhpc_kayobe_config_previous_version": previous_branch,
77-
"terraform_kayobe_multinode_version": terraform_kayobe_multinode_version,
78-
}
79-
return inputs
80-
81-
8283
def get_branch(version: str) -> str:
8384
return f"stackhpc/{version}"
8485

8586

8687
def get_tkm_version(version: str) -> str:
87-
if version in ["zed", "2023.1"]:
88+
if version == "zed":
8889
return "ea61ea1730e179e05e8f0e58b759267664c555e7"
89-
else:
90+
elif version == "2025.1":
9091
return "main"
92+
else:
93+
return get_branch(version)
9194

9295

9396
def write_output(name: str, value: str) -> None:
9497
print(f"{name}={value}")
9598

9699

100+
def write_summary(inputs: dict, output: t.TextIO):
101+
print(
102+
'| Input | Value |\n'
103+
'| -----: | :---- |', file=output)
104+
for key, value in inputs.items():
105+
print(f'| **{key}** | `{value}` |', file=output)
106+
107+
97108
if __name__ == "__main__":
98109
main()

.github/workflows/overcloud-host-image-build.yml

Lines changed: 32 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,6 @@ jobs:
7272
with:
7373
path: src/kayobe-config
7474

75-
- name: Output image tag of the builder
76-
id: builder_image_tag
77-
run: |
78-
echo image_tag=$(grep stackhpc_rocky_9_overcloud_host_image_version: etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
79-
8075
- name: Determine OpenStack release
8176
id: openstack_release
8277
run: |
@@ -253,22 +248,6 @@ jobs:
253248
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
254249
if: steps.build_rocky_9.outcome == 'failure'
255250

256-
- name: Upload Rocky Linux 9 overcloud host image to Ark
257-
run: |
258-
source venvs/kayobe/bin/activate &&
259-
source src/kayobe-config/kayobe-env --environment ci-builder &&
260-
kayobe playbook run \
261-
src/kayobe-config/etc/kayobe/ansible/pulp/pulp-artifact-upload.yml \
262-
-e artifact_path=/opt/kayobe/images/overcloud-rocky-9 \
263-
-e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \
264-
-e artifact_type="kayobe-images" \
265-
-e file_regex="*.qcow2" \
266-
-e os_distribution="rocky" \
267-
-e os_release="9"
268-
env:
269-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
270-
if: inputs.rocky9 && steps.build_rocky_9.outcome == 'success'
271-
272251
- name: Upload Rocky Linux 9 overcloud host image to current Dev Cloud (SMS/Leafcloud)
273252
run: |
274253
source venvs/kayobe/bin/activate &&
@@ -297,6 +276,22 @@ jobs:
297276
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET_OTHER_CLOUD }}
298277
if: inputs.rocky9 && steps.build_rocky_9.outcome == 'success'
299278

279+
- name: Upload Rocky Linux 9 overcloud host image to Ark
280+
run: |
281+
source venvs/kayobe/bin/activate &&
282+
source src/kayobe-config/kayobe-env --environment ci-builder &&
283+
kayobe playbook run \
284+
src/kayobe-config/etc/kayobe/ansible/pulp/pulp-artifact-upload.yml \
285+
-e artifact_path=/opt/kayobe/images/overcloud-rocky-9 \
286+
-e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \
287+
-e artifact_type="kayobe-images" \
288+
-e file_regex="*.qcow2" \
289+
-e os_distribution="rocky" \
290+
-e os_release="9"
291+
env:
292+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
293+
if: inputs.rocky9 && steps.build_rocky_9.outcome == 'success'
294+
300295
- name: Build an Ubuntu Noble 24.04 overcloud host image
301296
id: build_ubuntu_noble
302297
continue-on-error: true
@@ -321,22 +316,6 @@ jobs:
321316
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
322317
if: steps.build_ubuntu_noble.outcome == 'failure'
323318

324-
- name: Upload Ubuntu Noble 24.04 overcloud host image to Ark
325-
run: |
326-
source venvs/kayobe/bin/activate &&
327-
source src/kayobe-config/kayobe-env --environment ci-builder &&
328-
kayobe playbook run \
329-
src/kayobe-config/etc/kayobe/ansible/pulp/pulp-artifact-upload.yml \
330-
-e artifact_path=/opt/kayobe/images/overcloud-ubuntu-noble \
331-
-e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \
332-
-e artifact_type="kayobe-images" \
333-
-e file_regex="*.qcow2" \
334-
-e os_distribution="ubuntu" \
335-
-e os_release="noble"
336-
env:
337-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
338-
if: inputs.ubuntu-noble && steps.build_ubuntu_noble.outcome == 'success'
339-
340319
- name: Upload Ubuntu Noble overcloud host image to current Dev Cloud (SMS/Leafcloud)
341320
run: |
342321
source venvs/kayobe/bin/activate &&
@@ -365,6 +344,22 @@ jobs:
365344
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET_OTHER_CLOUD }}
366345
if: inputs.ubuntu-noble && steps.build_ubuntu_noble.outcome == 'success'
367346

347+
- name: Upload Ubuntu Noble 24.04 overcloud host image to Ark
348+
run: |
349+
source venvs/kayobe/bin/activate &&
350+
source src/kayobe-config/kayobe-env --environment ci-builder &&
351+
kayobe playbook run \
352+
src/kayobe-config/etc/kayobe/ansible/pulp/pulp-artifact-upload.yml \
353+
-e artifact_path=/opt/kayobe/images/overcloud-ubuntu-noble \
354+
-e artifact_tag=${{ steps.host_image_tag.outputs.host_image_tag }} \
355+
-e artifact_type="kayobe-images" \
356+
-e file_regex="*.qcow2" \
357+
-e os_distribution="ubuntu" \
358+
-e os_release="noble"
359+
env:
360+
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
361+
if: inputs.ubuntu-noble && steps.build_ubuntu_noble.outcome == 'success'
362+
368363
- name: Copy logs back
369364
continue-on-error: true
370365
run: |

.github/workflows/package-build-ofed.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,12 @@ jobs:
9797
aio_vm_network = "stackhpc-ci"
9898
aio_vm_subnet = "stackhpc-ci"
9999
aio_vm_interface = "ens3"
100+
aio_vm_tags = ${{ env.VM_TAGS }}
100101
EOF
101102
working-directory: ${{ github.workspace }}/src/kayobe-config/terraform/aio
102103
env:
103104
VM_IMAGE: ${{ steps.image_name.outputs.image_name }}
105+
VM_TAGS: '["skc-ci-doca-builder", "PR=${{ github.event.number }}"]'
104106

105107
- name: Terraform Plan
106108
run: terraform plan
@@ -233,7 +235,7 @@ jobs:
233235
run: |
234236
source venvs/kayobe/bin/activate &&
235237
source src/kayobe-config/kayobe-env --environment ci-doca-builder &&
236-
kayobe playbook run src/kayobe-config/etc/kayobe/ansible/push-ofed.yml \
238+
kayobe playbook run src/kayobe-config/etc/kayobe/ansible/tools/push-ofed.yml \
237239
-e "ofed_tag=${{ steps.ofed_tag.outputs.ofed_tag }}"
238240
env:
239241
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}

.github/workflows/stackhpc-ci-cleanup.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,26 @@ jobs:
6060
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
6161
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
6262

63+
- name: Clean up DOCA builder instances over 5 hours old
64+
run: |
65+
result=0
66+
changes_before=$(date -Imin -d -5hours)
67+
for status in ACTIVE BUILD ERROR SHUTOFF; do
68+
for instance in $(openstack server list --tags skc-ci-doca-builder --os-compute-api-version 2.66 --format value --column ID --changes-before $changes_before --status $status); do
69+
echo "Cleaning up $status instance $instance"
70+
openstack server show $instance
71+
if ! openstack server delete $instance; then
72+
echo "Failed to delete $status instance $instance"
73+
result=1
74+
fi
75+
done
76+
done
77+
exit $result
78+
env:
79+
OS_CLOUD: ${{ vars.OS_CLOUD }}
80+
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
81+
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
82+
6383
- name: Clean up host image builder instances over 5 hours old
6484
run: |
6585
result=0

.github/workflows/stackhpc-container-image-build.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ jobs:
155155
156156
- name: Install Trivy
157157
run: |
158-
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin v0.66.0
158+
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin v0.68.2
159159
160160
- name: Install yq
161161
run: |
@@ -175,7 +175,12 @@ jobs:
175175
# Normally installed during host configure.
176176
- name: Install Docker Python SDK
177177
run: |
178-
sudo pip install docker 'requests<2.32.0'
178+
. /etc/os-release
179+
if [[ $VERSION_ID == 22.04 ]]; then
180+
sudo pip install docker 'requests<2.32.0'
181+
else
182+
sudo pip install docker 'requests<2.32.0' --break-system-packages
183+
fi
179184
180185
- name: Get Kolla tag
181186
id: write-kolla-tag

.github/workflows/stackhpc-multinode-periodic.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,16 @@ jobs:
2020
stackhpc_kayobe_config_version: ${{ steps.generate-inputs.outputs.stackhpc_kayobe_config_version }}
2121
stackhpc_kayobe_config_previous_version: ${{ steps.generate-inputs.outputs.stackhpc_kayobe_config_previous_version }}
2222
terraform_kayobe_multinode_version: ${{ steps.generate-inputs.outputs.terraform_kayobe_multinode_version }}
23+
terraform_kayobe_multinode_previous_version: ${{ steps.generate-inputs.outputs.terraform_kayobe_multinode_previous_version }}
2324
steps:
2425
- name: Checkout
2526
uses: actions/checkout@v4
2627

2728
- name: Generate inputs for multinode workflow
2829
id: generate-inputs
2930
run: |
30-
python3 .github/workflows/multinode-inputs.py >> $GITHUB_OUTPUT
31+
python3 .github/workflows/multinode-inputs.py -s "$GITHUB_STEP_SUMMARY" \
32+
| tee -a "$GITHUB_OUTPUT"
3133
3234
- name: Display generated inputs
3335
run: |
@@ -36,7 +38,7 @@ jobs:
3638
name: Multinode periodic
3739
needs:
3840
- generate-inputs
39-
uses: stackhpc/stackhpc-openstack-gh-workflows/.github/workflows/multinode.yml@1.4.0
41+
uses: stackhpc/stackhpc-openstack-gh-workflows/.github/workflows/multinode.yml@1.5.0
4042
with:
4143
multinode_name: mn-periodic-${{ github.run_id }}
4244
os_distribution: ${{ needs.generate-inputs.outputs.os_distribution }}
@@ -47,6 +49,7 @@ jobs:
4749
stackhpc_kayobe_config_version: ${{ needs.generate-inputs.outputs.stackhpc_kayobe_config_version }}
4850
stackhpc_kayobe_config_previous_version: ${{ needs.generate-inputs.outputs.stackhpc_kayobe_config_previous_version }}
4951
terraform_kayobe_multinode_version: ${{ needs.generate-inputs.outputs.terraform_kayobe_multinode_version }}
52+
terraform_kayobe_multinode_previous_version: ${{ needs.generate-inputs.outputs.terraform_kayobe_multinode_previous_version }}
5053
enable_slack_alert: true
5154
secrets: inherit
5255
if: github.repository == 'stackhpc/stackhpc-kayobe-config'

0 commit comments

Comments
 (0)