diff --git a/cmd/kubeadm/app/phases/upgrade/compute.go b/cmd/kubeadm/app/phases/upgrade/compute.go index dbe42f8d2f6..96c9e2d4189 100644 --- a/cmd/kubeadm/app/phases/upgrade/compute.go +++ b/cmd/kubeadm/app/phases/upgrade/compute.go @@ -25,7 +25,7 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/features" "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/dns" etcdutil "k8s.io/kubernetes/cmd/kubeadm/app/util/etcd" - "k8s.io/kubernetes/pkg/util/version" + versionutil "k8s.io/kubernetes/pkg/util/version" ) // Upgrade defines an upgrade possibility to upgrade from a current version to a new one @@ -279,22 +279,23 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA } func getBranchFromVersion(version string) string { - return strings.TrimPrefix(version, "v")[:4] + v := versionutil.MustParseGeneric(version) + return fmt.Sprintf("%d.%d", v.Major(), v.Minor()) } -func patchVersionBranchExists(clusterVersion, stableVersion *version.Version) bool { +func patchVersionBranchExists(clusterVersion, stableVersion *versionutil.Version) bool { return stableVersion.AtLeast(clusterVersion) } -func patchUpgradePossible(clusterVersion, patchVersion *version.Version) bool { +func patchUpgradePossible(clusterVersion, patchVersion *versionutil.Version) bool { return clusterVersion.LessThan(patchVersion) } -func rcUpgradePossible(clusterVersion, previousBranchLatestVersion *version.Version) bool { +func rcUpgradePossible(clusterVersion, previousBranchLatestVersion *versionutil.Version) bool { return strings.HasPrefix(previousBranchLatestVersion.PreRelease(), "rc") && clusterVersion.LessThan(previousBranchLatestVersion) } -func minorUpgradePossibleWithPatchRelease(stableVersion, patchVersion *version.Version) bool { +func minorUpgradePossibleWithPatchRelease(stableVersion, patchVersion *versionutil.Version) bool { return patchVersion.LessThan(stableVersion) } diff --git a/cmd/kubeadm/app/phases/upgrade/compute_test.go b/cmd/kubeadm/app/phases/upgrade/compute_test.go index 9d059ae3dec..7050ed636af 100644 --- a/cmd/kubeadm/app/phases/upgrade/compute_test.go +++ b/cmd/kubeadm/app/phases/upgrade/compute_test.go @@ -826,3 +826,56 @@ func TestKubeletUpgrade(t *testing.T) { } } } + +func TestGetBranchFromVersion(t *testing.T) { + testCases := []struct { + version string + expectedVersion string + }{ + { + version: "v1.9.5", + expectedVersion: "1.9", + }, + { + version: "v1.9.0-alpha.2", + expectedVersion: "1.9", + }, + { + version: "v1.9.0-beta.0", + expectedVersion: "1.9", + }, + { + version: "v1.9.0-rc.1", + expectedVersion: "1.9", + }, + { + version: "v1.12.5", + expectedVersion: "1.12", + }, + { + version: "v1.11.0-alpha.0", + expectedVersion: "1.11", + }, + + { + version: "v1.11.0-beta.1", + expectedVersion: "1.11", + }, + { + version: "v1.11.0-rc.0", + expectedVersion: "1.11", + }, + { + version: "1.12.5", + expectedVersion: "1.12", + }, + } + + for _, tc := range testCases { + v := getBranchFromVersion(tc.version) + if v != tc.expectedVersion { + t.Errorf("expected version %s, got %s", tc.expectedVersion, v) + } + } + +}