Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: provide Kubernets/Talos version compatibility for 1.8 #8574

Merged
merged 1 commit into from
Apr 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pkg/machinery/compatibility/kubernetes_version.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/siderolabs/talos/pkg/machinery/compatibility/talos15"
"github.com/siderolabs/talos/pkg/machinery/compatibility/talos16"
"github.com/siderolabs/talos/pkg/machinery/compatibility/talos17"
"github.com/siderolabs/talos/pkg/machinery/compatibility/talos18"
)

// KubernetesVersion embeds Kubernetes version.
Expand Down Expand Up @@ -56,6 +57,8 @@ func (v *KubernetesVersion) SupportedWith(target *TalosVersion) error {
minK8sVersion, maxK8sVersion = talos16.MinimumKubernetesVersion, talos16.MaximumKubernetesVersion
case talos17.MajorMinor: // upgrades to 1.7.x
minK8sVersion, maxK8sVersion = talos17.MinimumKubernetesVersion, talos17.MaximumKubernetesVersion
case talos18.MajorMinor: // upgrades to 1.8.x
minK8sVersion, maxK8sVersion = talos18.MinimumKubernetesVersion, talos18.MaximumKubernetesVersion
default:
return fmt.Errorf("compatibility with version %s is not supported", target.String())
}
Expand Down
33 changes: 33 additions & 0 deletions pkg/machinery/compatibility/kubernetes_version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,39 @@ func TestKubernetesCompatibility17(t *testing.T) {
}
}

func TestKubernetesCompatibility18(t *testing.T) {
for _, tt := range []kubernetesVersionTest{
{
kubernetesVersion: "1.27.1",
target: "1.8.0",
},
{
kubernetesVersion: "1.26.1",
target: "1.8.0",
},
{
kubernetesVersion: "1.30.3",
target: "1.8.0-beta.0",
},
{
kubernetesVersion: "1.31.0-rc.0",
target: "1.8.7",
},
{
kubernetesVersion: "1.32.0-alpha.0",
target: "1.8.0",
expectedError: "version of Kubernetes 1.32.0-alpha.0 is too new to be used with Talos 1.8.0",
},
{
kubernetesVersion: "1.25.1",
target: "1.8.0",
expectedError: "version of Kubernetes 1.25.1 is too old to be used with Talos 1.8.0",
},
} {
runKubernetesVersionTest(t, tt)
}
}

func TestKubernetesCompatibilityUnsupported(t *testing.T) {
for _, tt := range []kubernetesVersionTest{
{
Expand Down
28 changes: 28 additions & 0 deletions pkg/machinery/compatibility/talos18/talos18.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

// Package talos18 provides compatibility constants for Talos 1.8.
package talos18

import (
"github.com/blang/semver/v4"
)

// MajorMinor is the major.minor version of Talos 1.8.
var MajorMinor = [2]uint64{1, 8}

// MinimumHostUpgradeVersion is the minimum version of Talos that can be upgraded to 1.8.
var MinimumHostUpgradeVersion = semver.MustParse("1.5.0")

// MaximumHostDowngradeVersion is the maximum (not inclusive) version of Talos that can be downgraded to 1.8.
var MaximumHostDowngradeVersion = semver.MustParse("1.10.0")

// DeniedHostUpgradeVersions are the versions of Talos that cannot be upgraded to 1.8.
var DeniedHostUpgradeVersions = []semver.Version{}

// MinimumKubernetesVersion is the minimum version of Kubernetes is supported with 1.8.
var MinimumKubernetesVersion = semver.MustParse("1.26.0")

// MaximumKubernetesVersion is the maximum version of Kubernetes is supported with 1.8.
var MaximumKubernetesVersion = semver.MustParse("1.31.99")
4 changes: 4 additions & 0 deletions pkg/machinery/compatibility/talos_version.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"github.com/siderolabs/talos/pkg/machinery/compatibility/talos15"
"github.com/siderolabs/talos/pkg/machinery/compatibility/talos16"
"github.com/siderolabs/talos/pkg/machinery/compatibility/talos17"
"github.com/siderolabs/talos/pkg/machinery/compatibility/talos18"
)

// TalosVersion embeds Talos version.
Expand Down Expand Up @@ -79,6 +80,9 @@ func (v *TalosVersion) UpgradeableFrom(host *TalosVersion) error {
case talos17.MajorMinor: // upgrades to 1.7.x
minHostUpgradeVersion, maxHostDowngradeVersion = talos17.MinimumHostUpgradeVersion, talos17.MaximumHostDowngradeVersion
deniedHostUpgradeVersions = talos17.DeniedHostUpgradeVersions
case talos18.MajorMinor: // upgrades to 1.8.x
minHostUpgradeVersion, maxHostDowngradeVersion = talos18.MinimumHostUpgradeVersion, talos18.MaximumHostDowngradeVersion
deniedHostUpgradeVersions = talos18.DeniedHostUpgradeVersions
default:
return fmt.Errorf("upgrades to version %s are not supported", v.version.String())
}
Expand Down
49 changes: 45 additions & 4 deletions pkg/machinery/compatibility/talos_version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,18 +245,59 @@ func TestTalosUpgradeCompatibility17(t *testing.T) {
}
}

func TestTalosUpgradeCompatibilityUnsupported(t *testing.T) {
func TestTalosUpgradeCompatibility18(t *testing.T) {
for _, tt := range []talosVersionTest{
{
host: "1.3.0",
target: "1.8.0-alpha.0",
expectedError: `upgrades to version 1.8.0-alpha.0 are not supported`,
host: "1.6.0",
target: "1.8.0",
},
{
host: "1.5.0-alpha.0",
target: "1.8.0",
},
{
host: "1.5.0",
target: "1.8.0-alpha.0",
},
{
host: "1.7.0",
target: "1.8.1",
},
{
host: "1.7.0-beta.0",
target: "1.8.0",
},
{
host: "1.9.5",
target: "1.8.3",
},
{
host: "1.4.0",
target: "1.8.0",
expectedError: `host version 1.4.0 is too old to upgrade to Talos 1.8.0`,
},
{
host: "1.10.0-alpha.0",
target: "1.8.0",
expectedError: `host version 1.10.0-alpha.0 is too new to downgrade to Talos 1.8.0`,
},
} {
runTalosVersionTest(t, tt)
}
}

func TestTalosUpgradeCompatibilityUnsupported(t *testing.T) {
for _, tt := range []talosVersionTest{
{
host: "1.3.0",
target: "1.9.0-alpha.0",
expectedError: `upgrades to version 1.9.0-alpha.0 are not supported`,
},
{
host: "1.4.0",
target: "1.10.0-alpha.0",
expectedError: `upgrades to version 1.10.0-alpha.0 are not supported`,
},
} {
runTalosVersionTest(t, tt)
}
Expand Down