From 4a39ab57fa8d1127eb754ad6c0e9543a95c4cda6 Mon Sep 17 00:00:00 2001 From: James Nesbitt Date: Mon, 8 Jun 2026 12:05:35 +0300 Subject: [PATCH 1/5] smoke: add TestCuttingEdgeCluster (rhel10/rocky10/ubuntu24/sles15) Adds a new smoke test targeting the latest gen-10 distributions: - RHEL 10, Rocky 10, Ubuntu 24.04 as managers and workers - SLES 15 as an additional worker Also adds: - Rhel10 and Rocky10 platform definitions in test/platforms.go - smoke-cutting-edge Makefile target (50m timeout) - smoke-cutting-edge CI job triggered by the smoke-cutting-edge label NOTE: This test depends on terraform-mirantis-modules/terraform-mirantis-provision-aws PR #22 being merged (adds rhel_10 and rocky_10 platform keys to the provision-aws module). The test will fail until the module is updated and the version bumped in examples/terraform/aws-simple/. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: James Nesbitt --- .github/workflows/smoke-tests.yaml | 17 +++++++++++++++++ Makefile | 4 ++++ test/platforms.go | 14 ++++++++++++++ test/smoke/smoke_test.go | 23 +++++++++++++++++++++++ 4 files changed, 58 insertions(+) diff --git a/.github/workflows/smoke-tests.yaml b/.github/workflows/smoke-tests.yaml index 6e4b81b7..6f640c7b 100644 --- a/.github/workflows/smoke-tests.yaml +++ b/.github/workflows/smoke-tests.yaml @@ -66,6 +66,23 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} run: make smoke-legacy + smoke-cutting-edge: + runs-on: ubuntu-latest + if: | + github.event_name == 'push' || + contains(github.event.pull_request.labels.*.name, 'smoke-test') || + contains(github.event.pull_request.labels.*.name, 'smoke-cutting-edge') + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Setup Terraform + uses: hashicorp/setup-terraform@v3 + - name: Run cutting-edge smoke test + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + run: make smoke-cutting-edge + smoke-windows: runs-on: arc-runner-set-mirantis-public if: | diff --git a/Makefile b/Makefile index 1df000fb..ebd15e03 100644 --- a/Makefile +++ b/Makefile @@ -52,6 +52,10 @@ functional-test: integration-test: go test -v ./test/integration/... -timeout 20m +.PHONY: smoke-cutting-edge +smoke-cutting-edge: + go test -count=1 -v ./test/smoke/... -run TestCuttingEdgeCluster -timeout 50m + .PHONY: smoke-modern smoke-modern: go test -count=1 -v ./test/smoke/... -run TestModernCluster -timeout 50m diff --git a/test/platforms.go b/test/platforms.go index a33ce350..fed4b0bb 100644 --- a/test/platforms.go +++ b/test/platforms.go @@ -117,6 +117,20 @@ var Platforms = map[string]Platform{ Public: true, UserData: "sudo firewall-cmd --permanent --add-port=2377/tcp --add-port=7946/tcp --add-port=7946/udp --add-port=4789/udp --add-port=10250/tcp; sudo firewall-cmd --reload", }, + "Rocky10": { + Name: "rocky_10", + Count: 1, + VolumeSize: "100", + Public: true, + UserData: "sudo firewall-cmd --permanent --add-port=2377/tcp --add-port=7946/tcp --add-port=7946/udp --add-port=4789/udp --add-port=10250/tcp; sudo firewall-cmd --reload", + }, + "Rhel10": { + Name: "rhel_10", + Count: 1, + VolumeSize: "100", + Public: true, + UserData: "sudo firewall-cmd --permanent --add-port=2377/tcp --add-port=7946/tcp --add-port=7946/udp --add-port=4789/udp --add-port=10250/tcp; sudo firewall-cmd --reload", + }, "Windows2019": { Name: "windows_2019", Count: 1, diff --git a/test/smoke/smoke_test.go b/test/smoke/smoke_test.go index be00f35d..d740630b 100644 --- a/test/smoke/smoke_test.go +++ b/test/smoke/smoke_test.go @@ -191,6 +191,29 @@ func TestModernCluster(t *testing.T) { }) } +// TestCuttingEdgeCluster exercises rhel10/rocky10/ubuntu24 managers and workers +// with sles15 as an additional worker, using the latest MCR and MKE versions. +// Requires terraform-mirantis-modules/terraform-mirantis-provision-aws PR #22 (rhel_10/rocky_10 +// platform keys) to be merged and the module version bumped before this test can run. +func TestCuttingEdgeCluster(t *testing.T) { + runSmokeTest(t, smokeConfig{ + Name: "cutting-edge", + MCRChannel: "stable-29.4", + MKEVersion: "3.9.2", + MSRVersion: "3.1.18", + SSHKeyAlgorithm: "ed25519", + Nodegroups: map[string]interface{}{ + "MngrRhel10": test.Platforms["Rhel10"].GetManager(), + "MngrRocky10": test.Platforms["Rocky10"].GetManager(), + "MngrUbuntu24": test.Platforms["Ubuntu24"].GetManager(), + "WrkRhel10": test.Platforms["Rhel10"].GetWorker(), + "WrkRocky10": test.Platforms["Rocky10"].GetWorker(), + "WrkSles15": test.Platforms["Sles15"].GetWorker(), + "WrkUbuntu24": test.Platforms["Ubuntu24"].GetWorker(), + }, + }) +} + // TestLegacyCluster exercises rhel8/rocky8/ubuntu22 managers and workers // with MCR stable-25.0 and MKE 3.8.8. func TestLegacyCluster(t *testing.T) { From e6a729c54e7f3710fb55bc56f4cea1373b987258 Mon Sep 17 00:00:00 2001 From: James Nesbitt Date: Tue, 7 Jul 2026 16:23:19 +0300 Subject: [PATCH 2/5] smoke: unblock TestCuttingEdgeCluster on released provision-aws v0.1.7 - shorten Name "cutting-edge" -> "cuttingedge" (11 chars): the 12-char value overflowed the 32-char AWS LB/target-group name limit and was the actual CI failure ("name" cannot be longer than 32 characters) - pin examples/terraform/aws-simple to provision-aws >= 0.1.7, which ships the rhel_10/rocky_10 platform keys (provision-aws#22, released) - refresh test doc comment now the upstream dependency is merged/released gofmt also normalized two pre-existing violations in smoke_test.go. --- examples/terraform/aws-simple/platform.tf | 1 + examples/terraform/aws-simple/provision.tf | 1 + test/smoke/smoke_test.go | 12 ++++++++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/examples/terraform/aws-simple/platform.tf b/examples/terraform/aws-simple/platform.tf index f910ae64..cd2308e4 100644 --- a/examples/terraform/aws-simple/platform.tf +++ b/examples/terraform/aws-simple/platform.tf @@ -44,6 +44,7 @@ locals { module "platform" { count = length(local.upstream_platform_keys) source = "terraform-mirantis-modules/provision-aws/mirantis//modules/platform" + version = ">= 0.1.7" platform_key = local.upstream_platform_keys[count.index] windows_password = var.windows_password diff --git a/examples/terraform/aws-simple/provision.tf b/examples/terraform/aws-simple/provision.tf index 59d67515..23baf97c 100644 --- a/examples/terraform/aws-simple/provision.tf +++ b/examples/terraform/aws-simple/provision.tf @@ -7,6 +7,7 @@ locals { # PROVISION MACHINES/NETWORK module "provision" { source = "terraform-mirantis-modules/provision-aws/mirantis" + version = ">= 0.1.7" name = var.name common_tags = local.tags diff --git a/test/smoke/smoke_test.go b/test/smoke/smoke_test.go index d740630b..2c8a57bf 100644 --- a/test/smoke/smoke_test.go +++ b/test/smoke/smoke_test.go @@ -112,7 +112,7 @@ func runSmokeTest(t *testing.T, cfg smokeConfig) { "nodegroups": cfg.Nodegroups, "ssh_key_algorithm": cfg.SSHKeyAlgorithm, "extra_tags": map[string]string{ - "launchpad-smoke-test": "true", + "launchpad-smoke-test": "true", "launchpad-smoke-test-name": cfg.Name, }, } @@ -193,11 +193,15 @@ func TestModernCluster(t *testing.T) { // TestCuttingEdgeCluster exercises rhel10/rocky10/ubuntu24 managers and workers // with sles15 as an additional worker, using the latest MCR and MKE versions. -// Requires terraform-mirantis-modules/terraform-mirantis-provision-aws PR #22 (rhel_10/rocky_10 -// platform keys) to be merged and the module version bumped before this test can run. +// The rhel_10/rocky_10 platform keys are available in +// terraform-mirantis-provision-aws >= v0.1.7 (pinned in examples/terraform/aws-simple). func TestCuttingEdgeCluster(t *testing.T) { runSmokeTest(t, smokeConfig{ - Name: "cutting-edge", + // AWS LB/target-group names are capped at 32 chars: the stack name is + // "smoke-{Name}-{5-char-random}" and Terraform appends suffixes like + // "-mke-kube" (9 chars), capping len(Name) at 11. Hence "cuttingedge" + // rather than "cutting-edge" (12 chars). + Name: "cuttingedge", MCRChannel: "stable-29.4", MKEVersion: "3.9.2", MSRVersion: "3.1.18", From d1a9f2d99707d7fa49095f49a19790ef498eebea Mon Sep 17 00:00:00 2001 From: James Nesbitt Date: Wed, 22 Jul 2026 10:24:18 +0300 Subject: [PATCH 3/5] smoke: document cutting-edge test as merged ahead of MCR support rhel10/rocky10 AMIs and provision-aws platform keys (v0.1.7) are already available, but launchpad's own smoke coverage previously failed with 'package manager could not install docker-ee' because repos.mirantis.com had not yet published docker-ee for rhel/10 or rocky/10. Checked repos.mirantis.com directly: docker-ee is now present in both rhel/10/x86_64/stable-29.4 and rocky/10/x86_64/stable-29.4 -- that gap looks closed, matching the AMI-availability timing pattern seen elsewhere this cycle (Oracle Linux, Rocky 8). Strategy going forward: keep TestCuttingEdgeCluster merged and label-gated rather than blocking on it going green immediately, so it picks up MCR support automatically as soon as it lands, with no further code changes. Documented that intent on the Makefile target and the GitHub Actions job. Written by AI: claude-sonnet-5 --- .github/workflows/smoke-tests.yaml | 6 ++++++ Makefile | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/.github/workflows/smoke-tests.yaml b/.github/workflows/smoke-tests.yaml index 6f640c7b..b334de76 100644 --- a/.github/workflows/smoke-tests.yaml +++ b/.github/workflows/smoke-tests.yaml @@ -66,6 +66,12 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} run: make smoke-legacy + # Bleeding-edge platforms (rhel10/rocky10). MCR package availability for + # these platforms lags their AMI/repo-metadata availability -- this job is + # intentionally merged ahead of full support so it goes green automatically, + # with no further workflow changes, once repos.mirantis.com publishes + # docker-ee for rhel/10 and rocky/10. Label-gated rather than always-on + # while that support is pending. smoke-cutting-edge: runs-on: ubuntu-latest if: | diff --git a/Makefile b/Makefile index ebd15e03..382eca93 100644 --- a/Makefile +++ b/Makefile @@ -52,6 +52,12 @@ functional-test: integration-test: go test -v ./test/integration/... -timeout 20m +# Targets bleeding-edge platforms (rhel10/rocky10) via TestCuttingEdgeCluster. +# MCR package availability for these platforms lags their AMI/repo-metadata +# availability -- this target (and its CI job) is intentionally merged ahead +# of full support so it goes green automatically, with no further code +# changes, the moment repos.mirantis.com publishes docker-ee for rhel/10 and +# rocky/10. Run manually or via the smoke-cutting-edge label to check status. .PHONY: smoke-cutting-edge smoke-cutting-edge: go test -count=1 -v ./test/smoke/... -run TestCuttingEdgeCluster -timeout 50m From 9c1502fbfcd00a4b988599550b30406d51fc096f Mon Sep 17 00:00:00 2001 From: James Nesbitt Date: Wed, 22 Jul 2026 11:19:56 +0300 Subject: [PATCH 4/5] smoke(cutting-edge): switch worker from sles15 to sles16 Adds a Sles16 platform definition (sles_16) and switches TestCuttingEdgeCluster's additional worker from sles15 to sles16. NOTE: MCR has not published Docker EE packages for SLES 16 as of 2026-07-22 (repos.mirantis.com/sles/ only has 12/12.3/15). This node is expected to fail at Install MCR until MCR ships SLES16 support - same category of gap as RHEL10/Rocky10 (docker-ee installs but the daemon won't start), tracked separately for that pair. Flagged in a doc comment on the test so CI failures here are understood, not mysterious. gofmt also cleaned two pre-existing, unrelated violations in these files (trailing blank line in platforms.go; WrkWin2025 alignment in TestFIPSCluster). --- test/platforms.go | 8 +++++++- test/smoke/smoke_test.go | 11 ++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/test/platforms.go b/test/platforms.go index fed4b0bb..936a3644 100644 --- a/test/platforms.go +++ b/test/platforms.go @@ -103,6 +103,13 @@ var Platforms = map[string]Platform{ Public: true, UserData: "sudo firewall-cmd --permanent --add-port=2377/tcp --add-port=7946/tcp --add-port=7946/udp --add-port=4789/udp --add-port=10250/tcp; sudo firewall-cmd --reload", }, + "Sles16": { + Name: "sles_16", + Count: 1, + VolumeSize: "100", + Public: true, + UserData: "sudo firewall-cmd --permanent --add-port=2377/tcp --add-port=7946/tcp --add-port=7946/udp --add-port=4789/udp --add-port=10250/tcp; sudo firewall-cmd --reload", + }, "Rocky8": { Name: "rocky_8", Count: 1, @@ -167,4 +174,3 @@ var Platforms = map[string]Platform{ UserData: "sudo ufw allow 2377,7946,10250/tcp; sudo ufw allow 7946,4789/udp", }, } - diff --git a/test/smoke/smoke_test.go b/test/smoke/smoke_test.go index 2c8a57bf..926655a0 100644 --- a/test/smoke/smoke_test.go +++ b/test/smoke/smoke_test.go @@ -192,9 +192,14 @@ func TestModernCluster(t *testing.T) { } // TestCuttingEdgeCluster exercises rhel10/rocky10/ubuntu24 managers and workers -// with sles15 as an additional worker, using the latest MCR and MKE versions. +// with sles16 as an additional worker, using the latest MCR and MKE versions. // The rhel_10/rocky_10 platform keys are available in // terraform-mirantis-provision-aws >= v0.1.7 (pinned in examples/terraform/aws-simple). +// +// NOTE: as of 2026-07-22, MCR has not published Docker EE packages for SLES 16 +// (repos.mirantis.com/sles/ only has 12/12.3/15 - no 16 directory). This node +// is expected to fail at the Install MCR phase until MCR ships SLES 16 support; +// see also the RHEL10/Rocky10 MCR-daemon-start gap tracked separately. func TestCuttingEdgeCluster(t *testing.T) { runSmokeTest(t, smokeConfig{ // AWS LB/target-group names are capped at 32 chars: the stack name is @@ -212,7 +217,7 @@ func TestCuttingEdgeCluster(t *testing.T) { "MngrUbuntu24": test.Platforms["Ubuntu24"].GetManager(), "WrkRhel10": test.Platforms["Rhel10"].GetWorker(), "WrkRocky10": test.Platforms["Rocky10"].GetWorker(), - "WrkSles15": test.Platforms["Sles15"].GetWorker(), + "WrkSles16": test.Platforms["Sles16"].GetWorker(), "WrkUbuntu24": test.Platforms["Ubuntu24"].GetWorker(), }, }) @@ -270,7 +275,7 @@ func TestFIPSCluster(t *testing.T) { SSHKeyAlgorithm: "rsa", Nodegroups: map[string]interface{}{ "MngrUbuntu22FIPS": test.Platforms["Ubuntu22FIPS"].GetManager(), - "WrkWin2025": test.Platforms["Windows2025"].GetWorker(), + "WrkWin2025": test.Platforms["Windows2025"].GetWorker(), }, }) } From 33a8927b71ac026a794d290e0f88b7ddce83014d Mon Sep 17 00:00:00 2001 From: James Nesbitt Date: Wed, 22 Jul 2026 18:05:09 +0300 Subject: [PATCH 5/5] smoke(cutting-edge): switch to ubuntu 26.04 (resolute) Adds a Ubuntu26 platform definition (ubuntu_26.04, codename resolute) and switches TestCuttingEdgeCluster's Ubuntu manager+worker from 24.04 to 26.04 - the current LTS as of 2026-07 (24.04 remains fully supported, just no longer the newest release). The ubuntu_26.04 key is already present in the pinned provision-aws module (>= v0.1.7), AMI pattern confirmed against a live published AMI (ubuntu-resolute-26.04-amd64-server-*, published as recently as 2026-07-22). NOTE: MCR has not published Docker EE packages for Ubuntu 26.04 yet (repos.mirantis.com/ubuntu/dists/ only has trusty/xenial/bionic/focal/ jammy/noble - no resolute). This node is expected to fail at Install MCR alongside the existing SLES16 and RHEL10/Rocky10 gaps, until MCR ships support. Flagged in the test's doc comment. --- test/platforms.go | 7 +++++++ test/smoke/smoke_test.go | 18 +++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/test/platforms.go b/test/platforms.go index 936a3644..f1e05a76 100644 --- a/test/platforms.go +++ b/test/platforms.go @@ -159,6 +159,13 @@ var Platforms = map[string]Platform{ Public: true, UserData: "sudo ufw allow 2377,7946,10250/tcp; sudo ufw allow 7946,4789/udp", }, + "Ubuntu26": { + Name: "ubuntu_26.04", + Count: 1, + VolumeSize: "100", + Public: true, + UserData: "sudo ufw allow 2377,7946,10250/tcp; sudo ufw allow 7946,4789/udp", + }, "Windows2025": { Name: "windows_2025", Count: 1, diff --git a/test/smoke/smoke_test.go b/test/smoke/smoke_test.go index 926655a0..084d20fc 100644 --- a/test/smoke/smoke_test.go +++ b/test/smoke/smoke_test.go @@ -191,15 +191,19 @@ func TestModernCluster(t *testing.T) { }) } -// TestCuttingEdgeCluster exercises rhel10/rocky10/ubuntu24 managers and workers +// TestCuttingEdgeCluster exercises rhel10/rocky10/ubuntu26 managers and workers // with sles16 as an additional worker, using the latest MCR and MKE versions. // The rhel_10/rocky_10 platform keys are available in // terraform-mirantis-provision-aws >= v0.1.7 (pinned in examples/terraform/aws-simple). // -// NOTE: as of 2026-07-22, MCR has not published Docker EE packages for SLES 16 -// (repos.mirantis.com/sles/ only has 12/12.3/15 - no 16 directory). This node -// is expected to fail at the Install MCR phase until MCR ships SLES 16 support; -// see also the RHEL10/Rocky10 MCR-daemon-start gap tracked separately. +// NOTE: as of 2026-07-22, MCR has not published Docker EE packages for either +// SLES 16 (repos.mirantis.com/sles/ only has 12/12.3/15 - no 16 directory) or +// Ubuntu 26.04 "resolute" (repos.mirantis.com/ubuntu/dists/ only has +// trusty/xenial/bionic/focal/jammy/noble - no resolute directory). Both nodes +// are expected to fail at the Install MCR phase until MCR ships support; see +// also the RHEL10/Rocky10 MCR-daemon-start gap (missing xt_* kernel modules +// break iptables, and MCR's nftables backend is incompatible with swarm mode) +// tracked separately. func TestCuttingEdgeCluster(t *testing.T) { runSmokeTest(t, smokeConfig{ // AWS LB/target-group names are capped at 32 chars: the stack name is @@ -214,11 +218,11 @@ func TestCuttingEdgeCluster(t *testing.T) { Nodegroups: map[string]interface{}{ "MngrRhel10": test.Platforms["Rhel10"].GetManager(), "MngrRocky10": test.Platforms["Rocky10"].GetManager(), - "MngrUbuntu24": test.Platforms["Ubuntu24"].GetManager(), + "MngrUbuntu26": test.Platforms["Ubuntu26"].GetManager(), "WrkRhel10": test.Platforms["Rhel10"].GetWorker(), "WrkRocky10": test.Platforms["Rocky10"].GetWorker(), "WrkSles16": test.Platforms["Sles16"].GetWorker(), - "WrkUbuntu24": test.Platforms["Ubuntu24"].GetWorker(), + "WrkUbuntu26": test.Platforms["Ubuntu26"].GetWorker(), }, }) }