Merge pull request #83314 from fabriziopandini/add-etcd-version

kubeadm: add 1.18 entry in the etcd map
This commit is contained in:
Kubernetes Prow Robot 2019-10-04 08:50:18 -07:00 committed by GitHub
commit 7f6d7afb8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 274 additions and 243 deletions

View File

@ -422,12 +422,12 @@ var (
// SupportedEtcdVersion lists officially supported etcd versions with corresponding Kubernetes releases // SupportedEtcdVersion lists officially supported etcd versions with corresponding Kubernetes releases
SupportedEtcdVersion = map[uint8]string{ SupportedEtcdVersion = map[uint8]string{
12: "3.2.24",
13: "3.2.24", 13: "3.2.24",
14: "3.3.10", 14: "3.3.10",
15: "3.3.10", 15: "3.3.10",
16: "3.3.15-0", 16: "3.3.15-0",
17: "3.3.15-0", 17: "3.3.15-0",
18: "3.3.15-0",
} }
// KubeadmCertsClusterRoleName sets the name for the ClusterRole that allows // KubeadmCertsClusterRoleName sets the name for the ClusterRole that allows

View File

@ -103,17 +103,17 @@ func TestGetEtcdImage(t *testing.T) {
{ {
cfg: &kubeadmapi.ClusterConfiguration{ cfg: &kubeadmapi.ClusterConfiguration{
ImageRepository: "real.repo", ImageRepository: "real.repo",
KubernetesVersion: "1.12.0", KubernetesVersion: "1.16.0",
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{}, Local: &kubeadmapi.LocalEtcd{},
}, },
}, },
expected: "real.repo/etcd:3.2.24", expected: "real.repo/etcd:3.3.15-0",
}, },
{ {
cfg: &kubeadmapi.ClusterConfiguration{ cfg: &kubeadmapi.ClusterConfiguration{
ImageRepository: "real.repo", ImageRepository: "real.repo",
KubernetesVersion: "1.12.0", KubernetesVersion: "1.16.0",
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ImageMeta: kubeadmapi.ImageMeta{ ImageMeta: kubeadmapi.ImageMeta{
@ -127,7 +127,7 @@ func TestGetEtcdImage(t *testing.T) {
{ {
cfg: &kubeadmapi.ClusterConfiguration{ cfg: &kubeadmapi.ClusterConfiguration{
ImageRepository: "real.repo", ImageRepository: "real.repo",
KubernetesVersion: "1.12.0", KubernetesVersion: "1.16.0",
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ImageMeta: kubeadmapi.ImageMeta{ ImageMeta: kubeadmapi.ImageMeta{
@ -136,7 +136,7 @@ func TestGetEtcdImage(t *testing.T) {
}, },
}, },
}, },
expected: "override/etcd:3.2.24", expected: "override/etcd:3.3.15-0",
}, },
{ {
expected: GetGenericImage(gcrPrefix, "etcd", constants.DefaultEtcdVersion), expected: GetGenericImage(gcrPrefix, "etcd", constants.DefaultEtcdVersion),

View File

@ -19,6 +19,7 @@ package upgrade
import ( import (
"fmt" "fmt"
"reflect" "reflect"
"strings"
"testing" "testing"
"time" "time"
@ -57,7 +58,7 @@ func (f *fakeVersionGetter) VersionFromCILabel(ciVersionLabel, _ string) (string
if ciVersionLabel == "latest" { if ciVersionLabel == "latest" {
return f.latestVersion, versionutil.MustParseSemantic(f.latestVersion), nil return f.latestVersion, versionutil.MustParseSemantic(f.latestVersion), nil
} }
if ciVersionLabel == "latest-1.11" { if f.latestDevBranchVersion != "" && strings.HasPrefix(ciVersionLabel, "latest-") {
return f.latestDevBranchVersion, versionutil.MustParseSemantic(f.latestDevBranchVersion), nil return f.latestDevBranchVersion, versionutil.MustParseSemantic(f.latestDevBranchVersion), nil
} }
return f.stablePatchVersion, versionutil.MustParseSemantic(f.stablePatchVersion), nil return f.stablePatchVersion, versionutil.MustParseSemantic(f.stablePatchVersion), nil
@ -70,6 +71,8 @@ func (f *fakeVersionGetter) KubeletVersions() (map[string]uint16, error) {
}, nil }, nil
} }
const fakeCurrentEtcdVersion = "3.1.12"
type fakeEtcdClient struct { type fakeEtcdClient struct {
TLS bool TLS bool
mismatchedVersions bool mismatchedVersions bool
@ -88,19 +91,19 @@ func (f fakeEtcdClient) GetVersion() (string, error) {
if f.mismatchedVersions { if f.mismatchedVersions {
return "", errors.Errorf("etcd cluster contains endpoints with mismatched versions: %v", versions) return "", errors.Errorf("etcd cluster contains endpoints with mismatched versions: %v", versions)
} }
return "3.1.12", nil return fakeCurrentEtcdVersion, nil
} }
func (f fakeEtcdClient) GetClusterVersions() (map[string]string, error) { func (f fakeEtcdClient) GetClusterVersions() (map[string]string, error) {
if f.mismatchedVersions { if f.mismatchedVersions {
return map[string]string{ return map[string]string{
"foo": "3.1.12", "foo": fakeCurrentEtcdVersion,
"bar": "3.2.0", "bar": "3.2.0",
}, nil }, nil
} }
return map[string]string{ return map[string]string{
"foo": "3.1.12", "foo": fakeCurrentEtcdVersion,
"bar": "3.1.12", "bar": fakeCurrentEtcdVersion,
}, nil }, nil
} }
@ -122,7 +125,35 @@ func getEtcdVersion(v *versionutil.Version) string {
return constants.SupportedEtcdVersion[uint8(v.Minor())] return constants.SupportedEtcdVersion[uint8(v.Minor())]
} }
const fakeCurrentCoreDNSVersion = "1.0.6"
const fakeCurrentKubeDNSVersion = "1.14.7"
func TestGetAvailableUpgrades(t *testing.T) { func TestGetAvailableUpgrades(t *testing.T) {
// constansts for test cases
// variables are in the form v{MAJOR}{MINOR}{PATCH}, where MINOR is a variable so test are automatically uptodate to the latest MinimumControlPlaneVersion/
// v1.X series, e.g. v1.14
v1X0 := constants.MinimumControlPlaneVersion.WithMinor(constants.MinimumControlPlaneVersion.Minor() - 1)
v1X5 := v1X0.WithPatch(5)
// v1.Y series, where Y = X+1, e.g. v1.15
v1Y0 := constants.MinimumControlPlaneVersion
v1Y0alpha0 := v1Y0.WithPreRelease("alpha.0")
v1Y0alpha1 := v1Y0.WithPreRelease("alpha.1")
v1Y1 := v1Y0.WithPatch(1)
v1Y2 := v1Y0.WithPatch(2)
v1Y3 := v1Y0.WithPatch(3)
v1Y5 := v1Y0.WithPatch(5)
// v1.Z series, where Z = Y+1, e.g. v1.16
v1Z0 := constants.CurrentKubernetesVersion
v1Z0alpha1 := v1Z0.WithPreRelease("alpha.1")
v1Z0alpha2 := v1Z0.WithPreRelease("alpha.2")
v1Z0beta1 := v1Z0.WithPreRelease("beta.1")
v1Z0rc1 := v1Z0.WithPreRelease("rc.1")
v1Z1 := v1Z0.WithPatch(1)
etcdClient := fakeEtcdClient{} etcdClient := fakeEtcdClient{}
tests := []struct { tests := []struct {
name string name string
@ -138,15 +169,15 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "no action needed, already up-to-date", name: "no action needed, already up-to-date",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.String(), clusterVersion: v1Y0.String(),
kubeletVersion: constants.MinimumKubeletVersion.String(), kubeletVersion: v1Y0.String(),
kubeadmVersion: constants.MinimumControlPlaneVersion.String(), kubeadmVersion: v1Y0.String(),
stablePatchVersion: constants.MinimumControlPlaneVersion.String(), stablePatchVersion: v1Y0.String(),
stableVersion: constants.MinimumControlPlaneVersion.String(), stableVersion: v1Y0.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "v1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{}, expectedUpgrades: []Upgrade{},
allowExperimental: false, allowExperimental: false,
@ -156,35 +187,35 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "simple patch version upgrade", name: "simple patch version upgrade",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), clusterVersion: v1Y1.String(),
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(1).String(), // the kubelet are on the same version as the control plane kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), kubeadmVersion: v1Y2.String(),
stablePatchVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), stablePatchVersion: v1Y3.String(),
stableVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), stableVersion: v1Y3.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: fmt.Sprintf("version in the v%d.%d series", constants.MinimumControlPlaneVersion.Major(), constants.MinimumControlPlaneVersion.Minor()), Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), KubeVersion: v1Y1.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumKubeletVersion.WithPatch(1).String(): 1, v1Y1.String(): 1,
}, },
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), KubeadmVersion: v1Y2.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), KubeVersion: v1Y3.String(),
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), KubeadmVersion: v1Y3.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: getEtcdVersion(constants.MinimumControlPlaneVersion), EtcdVersion: getEtcdVersion(v1Y3),
}, },
}, },
}, },
@ -195,35 +226,35 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "no version provided to offline version getter does not change behavior", name: "no version provided to offline version getter does not change behavior",
vg: NewOfflineVersionGetter(&fakeVersionGetter{ vg: NewOfflineVersionGetter(&fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), clusterVersion: v1Y1.String(),
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(1).String(), // the kubelet are on the same version as the control plane kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), kubeadmVersion: v1Y2.String(),
stablePatchVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), stablePatchVersion: v1Y3.String(),
stableVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), stableVersion: v1Y3.String(),
}, ""), }, ""),
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: fmt.Sprintf("version in the v%d.%d series", constants.MinimumControlPlaneVersion.Major(), constants.MinimumControlPlaneVersion.Minor()), Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), KubeVersion: v1Y1.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumKubeletVersion.WithPatch(1).String(): 1, v1Y1.String(): 1,
}, },
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), KubeadmVersion: v1Y2.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), KubeVersion: v1Y3.String(),
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), KubeadmVersion: v1Y3.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: getEtcdVersion(constants.MinimumControlPlaneVersion), EtcdVersion: getEtcdVersion(v1Y3),
}, },
}, },
}, },
@ -234,35 +265,35 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "minor version upgrade only", name: "minor version upgrade only",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), clusterVersion: v1Y1.String(),
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(1).String(), // the kubelet are on the same version as the control plane kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
kubeadmVersion: constants.CurrentKubernetesVersion.String(), kubeadmVersion: v1Z0.String(),
stablePatchVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), stablePatchVersion: v1Y1.String(),
stableVersion: constants.CurrentKubernetesVersion.String(), stableVersion: v1Z0.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: "stable version", Description: "stable version",
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), KubeVersion: v1Y1.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumKubeletVersion.WithPatch(1).String(): 1, v1Y1.String(): 1,
}, },
KubeadmVersion: constants.CurrentKubernetesVersion.String(), KubeadmVersion: v1Z0.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.CurrentKubernetesVersion.String(), KubeVersion: v1Z0.String(),
KubeadmVersion: constants.CurrentKubernetesVersion.String(), KubeadmVersion: v1Z0.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: getEtcdVersion(constants.CurrentKubernetesVersion), EtcdVersion: getEtcdVersion(v1Z0),
}, },
}, },
}, },
@ -273,55 +304,55 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "both minor version upgrade and patch version upgrade available", name: "both minor version upgrade and patch version upgrade available",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), clusterVersion: v1Y3.String(),
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), // the kubelet are on the same version as the control plane kubeletVersion: v1Y3.String(), // the kubelet are on the same version as the control plane
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), kubeadmVersion: v1Y5.String(),
stablePatchVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), stablePatchVersion: v1Y5.String(),
stableVersion: constants.CurrentKubernetesVersion.WithPatch(1).String(), stableVersion: v1Z1.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: fmt.Sprintf("version in the v%d.%d series", constants.MinimumControlPlaneVersion.Major(), constants.MinimumControlPlaneVersion.Minor()), Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), KubeVersion: v1Y3.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumKubeletVersion.WithPatch(3).String(): 1, v1Y3.String(): 1,
}, },
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), KubeadmVersion: v1Y5.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), KubeVersion: v1Y5.String(),
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), // Note: The kubeadm version mustn't be "downgraded" here KubeadmVersion: v1Y5.String(), // Note: The kubeadm version mustn't be "downgraded" here
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: getEtcdVersion(constants.MinimumControlPlaneVersion), EtcdVersion: getEtcdVersion(v1Y5),
}, },
}, },
{ {
Description: "stable version", Description: "stable version",
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), KubeVersion: v1Y3.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumKubeletVersion.WithPatch(3).String(): 1, v1Y3.String(): 1,
}, },
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), KubeadmVersion: v1Y5.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.CurrentKubernetesVersion.WithPatch(1).String(), KubeVersion: v1Z1.String(),
KubeadmVersion: constants.CurrentKubernetesVersion.WithPatch(1).String(), KubeadmVersion: v1Z1.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: getEtcdVersion(constants.CurrentKubernetesVersion), EtcdVersion: getEtcdVersion(v1Z1),
}, },
}, },
}, },
@ -332,16 +363,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "allow experimental upgrades, but no upgrade available", name: "allow experimental upgrades, but no upgrade available",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.0-alpha.2", clusterVersion: v1Z0alpha2.String(),
kubeletVersion: "v1.10.5", kubeletVersion: v1Y5.String(),
kubeadmVersion: "v1.10.5", kubeadmVersion: v1Y5.String(),
stablePatchVersion: "v1.10.5", stablePatchVersion: v1Y5.String(),
stableVersion: "v1.10.5", stableVersion: v1Y5.String(),
latestVersion: "v1.11.0-alpha.2", latestVersion: v1Z0alpha2.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "v1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{}, expectedUpgrades: []Upgrade{},
allowExperimental: true, allowExperimental: true,
@ -351,36 +382,36 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "upgrade to an unstable version should be supported", name: "upgrade to an unstable version should be supported",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), clusterVersion: v1Y5.String(),
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(5).String(), kubeletVersion: v1Y5.String(),
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), kubeadmVersion: v1Y5.String(),
stablePatchVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), stablePatchVersion: v1Y5.String(),
stableVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), stableVersion: v1Y5.String(),
latestVersion: constants.CurrentKubernetesVersion.WithPreRelease("alpha.2").String(), latestVersion: v1Z0alpha2.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: "experimental version", Description: "experimental version",
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), KubeVersion: v1Y5.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumControlPlaneVersion.WithPatch(5).String(): 1, v1Y5.String(): 1,
}, },
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), KubeadmVersion: v1Y5.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.CurrentKubernetesVersion.WithPreRelease("alpha.2").String(), KubeVersion: v1Z0alpha2.String(),
KubeadmVersion: constants.CurrentKubernetesVersion.WithPreRelease("alpha.2").String(), KubeadmVersion: v1Z0alpha2.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: getEtcdVersion(constants.CurrentKubernetesVersion), EtcdVersion: getEtcdVersion(v1Z0alpha2),
}, },
}, },
}, },
@ -391,36 +422,36 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "upgrade from an unstable version to an unstable version should be supported", name: "upgrade from an unstable version to an unstable version should be supported",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: constants.CurrentKubernetesVersion.WithPreRelease("alpha.1").String(), clusterVersion: v1Z0alpha1.String(),
kubeletVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), kubeletVersion: v1Y5.String(),
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), kubeadmVersion: v1Y5.String(),
stablePatchVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), stablePatchVersion: v1Y5.String(),
stableVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), stableVersion: v1Y5.String(),
latestVersion: constants.CurrentKubernetesVersion.WithPreRelease("alpha.2").String(), latestVersion: v1Z0alpha2.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: "experimental version", Description: "experimental version",
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.CurrentKubernetesVersion.WithPreRelease("alpha.1").String(), KubeVersion: v1Z0alpha1.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumControlPlaneVersion.WithPatch(5).String(): 1, v1Y5.String(): 1,
}, },
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), KubeadmVersion: v1Y5.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.CurrentKubernetesVersion.WithPreRelease("alpha.2").String(), KubeVersion: v1Z0alpha2.String(),
KubeadmVersion: constants.CurrentKubernetesVersion.WithPreRelease("alpha.2").String(), KubeadmVersion: v1Z0alpha2.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: getEtcdVersion(constants.CurrentKubernetesVersion), EtcdVersion: getEtcdVersion(v1Z0alpha2),
}, },
}, },
}, },
@ -431,37 +462,37 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "v1.X.0-alpha.0 should be ignored", name: "v1.X.0-alpha.0 should be ignored",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.5", clusterVersion: v1X5.String(),
kubeletVersion: "v1.11.5", kubeletVersion: v1X5.String(),
kubeadmVersion: "v1.11.5", kubeadmVersion: v1X5.String(),
stablePatchVersion: "v1.11.5", stablePatchVersion: v1X5.String(),
stableVersion: "v1.11.5", stableVersion: v1X5.String(),
latestDevBranchVersion: "v1.13.0-beta.1", latestDevBranchVersion: v1Z0beta1.String(),
latestVersion: "v1.12.0-alpha.0", latestVersion: v1Y0alpha0.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: "experimental version", Description: "experimental version",
Before: ClusterState{ Before: ClusterState{
KubeVersion: "v1.11.5", KubeVersion: v1X5.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
"v1.11.5": 1, v1X5.String(): 1,
}, },
KubeadmVersion: "v1.11.5", KubeadmVersion: v1X5.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: "v1.13.0-beta.1", KubeVersion: v1Z0beta1.String(),
KubeadmVersion: "v1.13.0-beta.1", KubeadmVersion: v1Z0beta1.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: "3.2.24", EtcdVersion: getEtcdVersion(v1Z0beta1),
}, },
}, },
}, },
@ -472,37 +503,37 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "upgrade to an RC version should be supported", name: "upgrade to an RC version should be supported",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.5", clusterVersion: v1X5.String(),
kubeletVersion: "v1.11.5", kubeletVersion: v1X5.String(),
kubeadmVersion: "v1.11.5", kubeadmVersion: v1X5.String(),
stablePatchVersion: "v1.11.5", stablePatchVersion: v1X5.String(),
stableVersion: "v1.11.5", stableVersion: v1X5.String(),
latestDevBranchVersion: "v1.13.0-rc.1", latestDevBranchVersion: v1Z0rc1.String(),
latestVersion: "v1.12.0-alpha.1", latestVersion: v1Y0alpha1.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: "release candidate version", Description: "release candidate version",
Before: ClusterState{ Before: ClusterState{
KubeVersion: "v1.11.5", KubeVersion: v1X5.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
"v1.11.5": 1, v1X5.String(): 1,
}, },
KubeadmVersion: "v1.11.5", KubeadmVersion: v1X5.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: "v1.13.0-rc.1", KubeVersion: v1Z0rc1.String(),
KubeadmVersion: "v1.13.0-rc.1", KubeadmVersion: v1Z0rc1.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: "3.2.24", EtcdVersion: getEtcdVersion(v1Z0rc1),
}, },
}, },
}, },
@ -513,37 +544,37 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "it is possible (but very uncommon) that the latest version from the previous branch is an rc and the current latest version is alpha.0. In that case, show the RC", name: "it is possible (but very uncommon) that the latest version from the previous branch is an rc and the current latest version is alpha.0. In that case, show the RC",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.5", clusterVersion: v1X5.String(),
kubeletVersion: "v1.11.5", kubeletVersion: v1X5.String(),
kubeadmVersion: "v1.11.5", kubeadmVersion: v1X5.String(),
stablePatchVersion: "v1.11.5", stablePatchVersion: v1X5.String(),
stableVersion: "v1.11.5", stableVersion: v1X5.String(),
latestDevBranchVersion: "v1.13.6-rc.1", latestDevBranchVersion: v1Z0rc1.String(),
latestVersion: "v1.12.1-alpha.0", latestVersion: v1Y0alpha0.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: "experimental version", // Note that this is considered an experimental version in this uncommon scenario Description: "experimental version", // Note that this is considered an experimental version in this uncommon scenario
Before: ClusterState{ Before: ClusterState{
KubeVersion: "v1.11.5", KubeVersion: v1X5.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
"v1.11.5": 1, v1X5.String(): 1,
}, },
KubeadmVersion: "v1.11.5", KubeadmVersion: v1X5.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: "v1.13.6-rc.1", KubeVersion: v1Z0rc1.String(),
KubeadmVersion: "v1.13.6-rc.1", KubeadmVersion: v1Z0rc1.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: "3.2.24", EtcdVersion: getEtcdVersion(v1Z0rc1),
}, },
}, },
}, },
@ -554,57 +585,57 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "upgrade to an RC version should be supported. There may also be an even newer unstable version.", name: "upgrade to an RC version should be supported. There may also be an even newer unstable version.",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.5", clusterVersion: v1X5.String(),
kubeletVersion: "v1.11.5", kubeletVersion: v1X5.String(),
kubeadmVersion: "v1.11.5", kubeadmVersion: v1X5.String(),
stablePatchVersion: "v1.11.5", stablePatchVersion: v1X5.String(),
stableVersion: "v1.11.5", stableVersion: v1X5.String(),
latestDevBranchVersion: "v1.13.0-rc.1", latestDevBranchVersion: v1Z0rc1.String(),
latestVersion: "v1.12.0-alpha.2", latestVersion: v1Y0alpha1.String(),
}, },
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: "release candidate version", Description: "release candidate version",
Before: ClusterState{ Before: ClusterState{
KubeVersion: "v1.11.5", KubeVersion: v1X5.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
"v1.11.5": 1, v1X5.String(): 1,
}, },
KubeadmVersion: "v1.11.5", KubeadmVersion: v1X5.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: "v1.13.0-rc.1", KubeVersion: v1Z0rc1.String(),
KubeadmVersion: "v1.13.0-rc.1", KubeadmVersion: v1Z0rc1.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: "3.2.24", EtcdVersion: getEtcdVersion(v1Z0rc1),
}, },
}, },
{ {
Description: "experimental version", Description: "experimental version",
Before: ClusterState{ Before: ClusterState{
KubeVersion: "v1.11.5", KubeVersion: v1X5.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
"v1.11.5": 1, v1X5.String(): 1,
}, },
KubeadmVersion: "v1.11.5", KubeadmVersion: v1X5.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: "v1.12.0-alpha.2", KubeVersion: v1Y0alpha1.String(),
KubeadmVersion: "v1.12.0-alpha.2", KubeadmVersion: v1Y0alpha1.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: "3.2.24", EtcdVersion: getEtcdVersion(v1Y0alpha1),
}, },
}, },
}, },
@ -616,11 +647,11 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "Upgrades with external etcd with mismatched versions should not be allowed.", name: "Upgrades with external etcd with mismatched versions should not be allowed.",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), clusterVersion: v1Y3.String(),
kubeletVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), kubeletVersion: v1Y3.String(),
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), kubeadmVersion: v1Y3.String(),
stablePatchVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), stablePatchVersion: v1Y3.String(),
stableVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), stableVersion: v1Y3.String(),
}, },
allowRCs: false, allowRCs: false,
allowExperimental: false, allowExperimental: false,
@ -631,33 +662,33 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "offline version getter", name: "offline version getter",
vg: NewOfflineVersionGetter(&fakeVersionGetter{ vg: NewOfflineVersionGetter(&fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), clusterVersion: v1Y1.String(),
kubeletVersion: constants.MinimumKubeletVersion.String(), kubeletVersion: v1Y0.String(),
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), kubeadmVersion: v1Y1.String(),
}, constants.CurrentKubernetesVersion.WithPatch(1).String()), }, v1Z1.String()),
etcdClient: etcdClient, etcdClient: etcdClient,
beforeDNSType: kubeadmapi.CoreDNS, beforeDNSType: kubeadmapi.CoreDNS,
beforeDNSVersion: "1.0.6", beforeDNSVersion: fakeCurrentCoreDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: fmt.Sprintf("version in the v%d.%d series", constants.MinimumControlPlaneVersion.Major(), constants.MinimumControlPlaneVersion.Minor()), Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), KubeVersion: v1Y1.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumKubeletVersion.String(): 1, v1Y0.String(): 1,
}, },
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), KubeadmVersion: v1Y1.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: "1.0.6", DNSVersion: fakeCurrentCoreDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.CurrentKubernetesVersion.WithPatch(1).String(), KubeVersion: v1Z1.String(),
KubeadmVersion: constants.CurrentKubernetesVersion.WithPatch(1).String(), KubeadmVersion: v1Z1.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: getEtcdVersion(constants.CurrentKubernetesVersion), EtcdVersion: getEtcdVersion(v1Z1),
}, },
}, },
}, },
@ -665,36 +696,36 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "kubedns to coredns", name: "kubedns to coredns",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), clusterVersion: v1Y2.String(),
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(2).String(), // the kubelet are on the same version as the control plane kubeletVersion: v1Y2.String(), // the kubelet are on the same version as the control plane
kubeadmVersion: constants.CurrentKubernetesVersion.String(), kubeadmVersion: v1Z0.String(),
stablePatchVersion: constants.CurrentKubernetesVersion.String(), stablePatchVersion: v1Z0.String(),
stableVersion: constants.CurrentKubernetesVersion.String(), stableVersion: v1Z0.String(),
}, },
etcdClient: etcdClient, etcdClient: etcdClient,
beforeDNSType: kubeadmapi.KubeDNS, beforeDNSType: kubeadmapi.KubeDNS,
beforeDNSVersion: "1.14.7", beforeDNSVersion: fakeCurrentKubeDNSVersion,
dnsType: kubeadmapi.CoreDNS, dnsType: kubeadmapi.CoreDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: fmt.Sprintf("version in the v%d.%d series", constants.MinimumControlPlaneVersion.Major(), constants.MinimumControlPlaneVersion.Minor()), Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), KubeVersion: v1Y2.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumControlPlaneVersion.WithPatch(2).String(): 1, v1Y2.String(): 1,
}, },
KubeadmVersion: constants.CurrentKubernetesVersion.String(), KubeadmVersion: v1Z0.String(),
DNSType: kubeadmapi.KubeDNS, DNSType: kubeadmapi.KubeDNS,
DNSVersion: "1.14.7", DNSVersion: fakeCurrentKubeDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.CurrentKubernetesVersion.String(), KubeVersion: v1Z0.String(),
KubeadmVersion: constants.CurrentKubernetesVersion.String(), KubeadmVersion: v1Z0.String(),
DNSType: kubeadmapi.CoreDNS, DNSType: kubeadmapi.CoreDNS,
DNSVersion: constants.CoreDNSVersion, DNSVersion: constants.CoreDNSVersion,
EtcdVersion: getEtcdVersion(constants.CurrentKubernetesVersion), EtcdVersion: getEtcdVersion(v1Z0),
}, },
}, },
}, },
@ -702,36 +733,36 @@ func TestGetAvailableUpgrades(t *testing.T) {
{ {
name: "keep coredns", name: "keep coredns",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), clusterVersion: v1Y2.String(),
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(2).String(), // the kubelet are on the same version as the control plane kubeletVersion: v1Y2.String(), // the kubelet are on the same version as the control plane
kubeadmVersion: constants.CurrentKubernetesVersion.String(), kubeadmVersion: v1Z0.String(),
stablePatchVersion: constants.CurrentKubernetesVersion.String(), stablePatchVersion: v1Z0.String(),
stableVersion: constants.CurrentKubernetesVersion.String(), stableVersion: v1Z0.String(),
}, },
etcdClient: etcdClient, etcdClient: etcdClient,
beforeDNSType: kubeadmapi.KubeDNS, beforeDNSType: kubeadmapi.KubeDNS,
beforeDNSVersion: "1.14.7", beforeDNSVersion: fakeCurrentKubeDNSVersion,
dnsType: kubeadmapi.KubeDNS, dnsType: kubeadmapi.KubeDNS,
expectedUpgrades: []Upgrade{ expectedUpgrades: []Upgrade{
{ {
Description: fmt.Sprintf("version in the v%d.%d series", constants.MinimumControlPlaneVersion.Major(), constants.MinimumControlPlaneVersion.Minor()), Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
Before: ClusterState{ Before: ClusterState{
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), KubeVersion: v1Y2.String(),
KubeletVersions: map[string]uint16{ KubeletVersions: map[string]uint16{
constants.MinimumControlPlaneVersion.WithPatch(2).String(): 1, v1Y2.String(): 1,
}, },
KubeadmVersion: constants.CurrentKubernetesVersion.String(), KubeadmVersion: v1Z0.String(),
DNSType: kubeadmapi.KubeDNS, DNSType: kubeadmapi.KubeDNS,
DNSVersion: "1.14.7", DNSVersion: fakeCurrentKubeDNSVersion,
EtcdVersion: "3.1.12", EtcdVersion: fakeCurrentEtcdVersion,
}, },
After: ClusterState{ After: ClusterState{
KubeVersion: constants.CurrentKubernetesVersion.String(), KubeVersion: v1Z0.String(),
KubeadmVersion: constants.CurrentKubernetesVersion.String(), KubeadmVersion: v1Z0.String(),
DNSType: kubeadmapi.KubeDNS, DNSType: kubeadmapi.KubeDNS,
DNSVersion: "1.14.13", DNSVersion: constants.KubeDNSVersion,
EtcdVersion: getEtcdVersion(constants.CurrentKubernetesVersion), EtcdVersion: getEtcdVersion(v1Z0),
}, },
}, },
}, },