Skip to content

Commit 62af91a

Browse files
authored
Merge pull request #1245 from stackhpc/periodic-multinodes
CI: Add a periodic multinode job
2 parents 6c7c75b + df37983 commit 62af91a

File tree

2 files changed

+129
-0
lines changed

2 files changed

+129
-0
lines changed

.github/workflows/multinode-inputs.py

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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+
# NOTE(upgrade): Add supported releases here.
35+
OPENSTACK_RELEASES = [
36+
OpenStackRelease("2023.1", "zed", [ROCKY_9, UBUNTU_JAMMY])
37+
]
38+
NEUTRON_PLUGINS = ["ovs", "ovn"]
39+
40+
41+
def main() -> None:
42+
scenario = random_scenario()
43+
inputs = generate_inputs(scenario)
44+
for name, value in inputs.items():
45+
write_output(name, value)
46+
47+
48+
def random_scenario() -> Scenario:
49+
openstack_release = random.choice(OPENSTACK_RELEASES)
50+
os_release = random.choice(openstack_release.os_releases)
51+
neutron_plugin = random.choice(NEUTRON_PLUGINS)
52+
upgrade = random.random() > 0.6
53+
return Scenario(openstack_release, os_release, neutron_plugin, upgrade)
54+
55+
56+
def generate_inputs(scenario: Scenario) -> t.Dict[str, str]:
57+
branch = get_branch(scenario.openstack_release.version)
58+
previous_branch = get_branch(scenario.openstack_release.previous_version)
59+
inputs = {
60+
"os_distribution": scenario.os_release.distribution,
61+
"os_release": scenario.os_release.release,
62+
"ssh_username": scenario.os_release.ssh_username,
63+
"neutron_plugin": scenario.neutron_plugin,
64+
"upgrade": str(scenario.upgrade).lower(),
65+
"stackhpc_kayobe_config_version": branch,
66+
"stackhpc_kayobe_config_previous_version": previous_branch,
67+
}
68+
return inputs
69+
70+
71+
def get_branch(version: str) -> str:
72+
return f"stackhpc/{version}"
73+
74+
75+
def write_output(name: str, value: str) -> None:
76+
print(f"{name}={value}")
77+
78+
79+
if __name__ == "__main__":
80+
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 periodic deploy of a multi-node test cluster.
3+
# The test scenario is randomly selected.
4+
5+
name: Multinode periodic
6+
'on':
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 for multinode workflow
27+
id: generate-inputs
28+
run: |
29+
python3 .github/workflows/multinode-inputs.py >> $GITHUB_OUTPUT
30+
31+
- name: Display generated inputs
32+
run: |
33+
echo '${{ toJSON(steps.generate-inputs.outputs) }}'
34+
multinode:
35+
name: Multinode periodic
36+
needs:
37+
- generate-inputs
38+
uses: stackhpc/stackhpc-openstack-gh-workflows/.github/workflows/multinode.yml@main
39+
with:
40+
multinode_name: mn-prdc-${{ github.run_id }}
41+
os_distribution: ${{ needs.generate-inputs.outputs.os_distribution }}
42+
os_release: ${{ needs.generate-inputs.outputs.os_release }}
43+
ssh_username: ${{ needs.generate-inputs.outputs.ssh_username }}
44+
neutron_plugin: ${{ needs.generate-inputs.outputs.neutron_plugin }}
45+
upgrade: ${{ needs.generate-inputs.outputs.upgrade == 'true' }}
46+
stackhpc_kayobe_config_version: ${{ needs.generate-inputs.outputs.stackhpc_kayobe_config_version }}
47+
stackhpc_kayobe_config_previous_version: ${{ needs.generate-inputs.outputs.stackhpc_kayobe_config_previous_version }}
48+
enable_slack_alert: true
49+
secrets: inherit

0 commit comments

Comments
 (0)