diff --git a/.github/workflows/smoke-tests.yaml b/.github/workflows/smoke-tests.yaml index 6e4b81b7..b334de76 100644 --- a/.github/workflows/smoke-tests.yaml +++ b/.github/workflows/smoke-tests.yaml @@ -66,6 +66,29 @@ 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: | + 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..382eca93 100644 --- a/Makefile +++ b/Makefile @@ -52,6 +52,16 @@ 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 + .PHONY: smoke-modern smoke-modern: go test -count=1 -v ./test/smoke/... -run TestModernCluster -timeout 50m 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/platforms.go b/test/platforms.go index a33ce350..f1e05a76 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, @@ -117,6 +124,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, @@ -138,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, @@ -153,4 +181,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 be00f35d..084d20fc 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, }, } @@ -191,6 +191,42 @@ func TestModernCluster(t *testing.T) { }) } +// 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 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 + // "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", + SSHKeyAlgorithm: "ed25519", + Nodegroups: map[string]interface{}{ + "MngrRhel10": test.Platforms["Rhel10"].GetManager(), + "MngrRocky10": test.Platforms["Rocky10"].GetManager(), + "MngrUbuntu26": test.Platforms["Ubuntu26"].GetManager(), + "WrkRhel10": test.Platforms["Rhel10"].GetWorker(), + "WrkRocky10": test.Platforms["Rocky10"].GetWorker(), + "WrkSles16": test.Platforms["Sles16"].GetWorker(), + "WrkUbuntu26": test.Platforms["Ubuntu26"].GetWorker(), + }, + }) +} + // TestLegacyCluster exercises rhel8/rocky8/ubuntu22 managers and workers // with MCR stable-25.0 and MKE 3.8.8. func TestLegacyCluster(t *testing.T) { @@ -243,7 +279,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(), }, }) }