Skip to content

Commit c040039

Browse files
committed
CI: Add a periodic multinode job
1 parent 3b543c6 commit c040039

File tree

2 files changed

+128
-0
lines changed

2 files changed

+128
-0
lines changed

.github/workflows/multinode-inputs.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Generate inputs for the reusable multinode.yml workflow.
2+
# The test scenario is randomly selected.
3+
# The inputs are printed to stdout in GitHub step output key=value format.
4+
5+
from dataclasses import dataclass
6+
import random
7+
import typing as t
8+
9+
10+
@dataclass
11+
class OSRelease:
12+
distribution: str
13+
release: str
14+
ssh_username: str
15+
16+
17+
@dataclass
18+
class OpenStackRelease:
19+
version: str
20+
previous_version: str
21+
os_releases: t.List[OSRelease]
22+
23+
24+
@dataclass
25+
class Scenario:
26+
openstack_release: OpenStackRelease
27+
os_release: OSRelease
28+
neutron_plugin: str
29+
upgrade: bool
30+
31+
32+
ROCKY_9 = OSRelease("rocky", "9", "cloud-user")
33+
UBUNTU_JAMMY = OSRelease("ubuntu", "jammy", "ubuntu")
34+
OPENSTACK_RELEASES = [
35+
OpenStackRelease("2023.1", "zed", [ROCKY_9, UBUNTU_JAMMY])
36+
]
37+
NEUTRON_PLUGINS = ["ovs", "ovn"]
38+
39+
40+
def main() -> None:
41+
scenario = choose_scenario()
42+
inputs = generate_inputs(scenario)
43+
for name, value in inputs.items():
44+
write_output(name, value)
45+
46+
47+
def choose_scenario() -> Scenario:
48+
openstack_release = random.choice(OPENSTACK_RELEASES)
49+
os_release = random.choice(openstack_release.os_releases)
50+
neutron_plugin = random.choice(NEUTRON_PLUGINS)
51+
upgrade = random.random() > 0.6
52+
return Scenario(openstack_release, os_release, neutron_plugin, upgrade)
53+
54+
55+
def generate_inputs(scenario: Scenario) -> t.Dict[str, str]:
56+
branch = get_branch(scenario.openstack_release.version)
57+
previous_branch = get_branch(scenario.openstack_release.previous_version)
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": str(scenario.upgrade).lower(),
64+
"stackhpc_kayobe_config_version": branch,
65+
"stackhpc_kayobe_config_previous_version": previous_branch,
66+
}
67+
return inputs
68+
69+
70+
def get_branch(version: str) -> str:
71+
return f"stackhpc/{version}"
72+
73+
74+
def write_output(name: str, value: str) -> None:
75+
print(f"{name}={value}")
76+
77+
78+
if __name__ == "__main__":
79+
main()
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
---
2+
# This workflow provides a scheduled deploy of a multi-node test cluster.
3+
4+
name: Multinode periodic
5+
'on':
6+
push:
7+
schedule:
8+
# Runs nightly at 2:42 AM.
9+
- cron: "42 2 * * *"
10+
jobs:
11+
generate-inputs:
12+
name: Generate inputs
13+
runs-on: ubuntu-latest
14+
outputs:
15+
os_distribution: ${{ steps.generate-inputs.outputs.os_distribution }}
16+
os_release: ${{ steps.generate-inputs.outputs.os_release }}
17+
ssh_username: ${{ steps.generate-inputs.outputs.ssh_username }}
18+
neutron_plugin: ${{ steps.generate-inputs.outputs.neutron_plugin }}
19+
upgrade: ${{ steps.generate-inputs.outputs.upgrade }}
20+
stackhpc_kayobe_config_version: ${{ steps.generate-inputs.outputs.stackhpc_kayobe_config_version }}
21+
stackhpc_kayobe_config_previous_version: ${{ steps.generate-inputs.outputs.stackhpc_kayobe_config_previous_version }}
22+
steps:
23+
- name: Checkout
24+
uses: actions/checkout@v4
25+
26+
- name: Generate inputs
27+
id: generate-inputs
28+
run: |
29+
python3 .github/workflows/multinode-inputs.py >> $GITHUB_OUTPUT
30+
31+
multinode:
32+
name: Multinode periodic
33+
needs:
34+
- generate-inputs
35+
# FIXME: slack
36+
uses: stackhpc/stackhpc-openstack-gh-workflows/.github/workflows/multinode.yml@slack
37+
with:
38+
multinode_name: mn-prdc-${{ github.run_id }}
39+
os_distribution: ${{ needs.generate-inputs.outputs.os_distribution }}
40+
os_release: ${{ needs.generate-inputs.outputs.os_release }}
41+
ssh_username: ${{ needs.generate-inputs.outputs.ssh_username }}
42+
neutron_plugin: ${{ needs.generate-inputs.outputs.neutron_plugin }}
43+
upgrade: ${{ needs.generate-inputs.outputs.upgrade == 'true' }}
44+
stackhpc_kayobe_config_version: ${{ needs.generate-inputs.outputs.stackhpc_kayobe_config_version }}
45+
stackhpc_kayobe_config_previous_version: ${{ needs.generate-inputs.outputs.stackhpc_kayobe_config_previous_version }}
46+
enable_slack_alert: true
47+
# FIXME: Remove
48+
break_on: failure
49+
secrets: inherit

0 commit comments

Comments
 (0)