From 885f81dc512bcdac7e97ddf0826d372e84d35645 Mon Sep 17 00:00:00 2001 From: fabriziopandini Date: Fri, 23 Aug 2019 15:12:29 +0200 Subject: [PATCH] fix upgrade checks --- cmd/kubeadm/app/phases/upgrade/policy.go | 2 +- cmd/kubeadm/app/phases/upgrade/policy_test.go | 9 +++++++++ .../src/k8s.io/apimachinery/pkg/util/version/version.go | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cmd/kubeadm/app/phases/upgrade/policy.go b/cmd/kubeadm/app/phases/upgrade/policy.go index 876e1ad1282..ddeaf6779ec 100644 --- a/cmd/kubeadm/app/phases/upgrade/policy.go +++ b/cmd/kubeadm/app/phases/upgrade/policy.go @@ -71,7 +71,7 @@ func EnforceVersionPolicies(versionGetter VersionGetter, newK8sVersionStr string } // Make sure the new version is a supported version (higher than the minimum one supported) - if constants.MinimumControlPlaneVersion.AtLeast(newK8sVersion) { + if !newK8sVersion.AtLeast(constants.MinimumControlPlaneVersion) { // This must not happen, kubeadm always supports a minimum version; and we can't go below that skewErrors.Mandatory = append(skewErrors.Mandatory, errors.Errorf("Specified version to upgrade to %q is equal to or lower than the minimum supported version %q. Please specify a higher version to upgrade to", newK8sVersionStr, clusterVersionStr)) } diff --git a/cmd/kubeadm/app/phases/upgrade/policy_test.go b/cmd/kubeadm/app/phases/upgrade/policy_test.go index 1f11daf3409..a724136bde0 100644 --- a/cmd/kubeadm/app/phases/upgrade/policy_test.go +++ b/cmd/kubeadm/app/phases/upgrade/policy_test.go @@ -191,6 +191,15 @@ func TestEnforceVersionPolicies(t *testing.T) { newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(6).String(), expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm }, + { + name: "build release supported at MinimumControlPlaneVersion", + vg: &fakeVersionGetter{ + clusterVersion: constants.MinimumControlPlaneVersion.String(), + kubeletVersion: constants.MinimumControlPlaneVersion.String(), + kubeadmVersion: constants.MinimumControlPlaneVersion.WithBuildeMetadata("build").String(), + }, + newK8sVersion: constants.MinimumControlPlaneVersion.WithBuildeMetadata("build").String(), + }, } for _, rt := range tests { diff --git a/staging/src/k8s.io/apimachinery/pkg/util/version/version.go b/staging/src/k8s.io/apimachinery/pkg/util/version/version.go index 9bc928a4e82..8931719230b 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/version/version.go +++ b/staging/src/k8s.io/apimachinery/pkg/util/version/version.go @@ -183,6 +183,14 @@ func (v *Version) WithPreRelease(preRelease string) *Version { return &result } +// WithBuildeMetadata returns copy of the version object with requested buildMetadata +func (v *Version) WithBuildeMetadata(buildMetadata string) *Version { + result := *v + result.components = []uint{v.Major(), v.Minor(), v.Patch()} + result.buildMetadata = buildMetadata + return &result +} + // String converts a Version back to a string; note that for versions parsed with // ParseGeneric, this will not include the trailing uninterpreted portion of the version // number.