From 723cadf750bf1d10bbf2fa45b3c00a933f88d8f4 Mon Sep 17 00:00:00 2001 From: SataQiu Date: Fri, 8 Jul 2022 16:49:07 +0800 Subject: [PATCH] kubeadm: respect user specified image repository when using Kubernetes ci version --- cmd/kubeadm/app/constants/constants.go | 3 + cmd/kubeadm/app/util/config/common.go | 4 +- cmd/kubeadm/app/util/config/common_test.go | 96 ++++++++++++++++++++++ 3 files changed, 101 insertions(+), 2 deletions(-) diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index ceed2ac2bb5..1176f5d11cc 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -364,6 +364,9 @@ const ( // TODO: Find a better place for this constant YAMLDocumentSeparator = "---\n" + // CIKubernetesVersionPrefix is the prefix for CI Kubernetes version + CIKubernetesVersionPrefix = "ci/" + // DefaultAPIServerBindAddress is the default bind address for the API Server DefaultAPIServerBindAddress = "0.0.0.0" diff --git a/cmd/kubeadm/app/util/config/common.go b/cmd/kubeadm/app/util/config/common.go index c8aba7e48e5..db4b600ea88 100644 --- a/cmd/kubeadm/app/util/config/common.go +++ b/cmd/kubeadm/app/util/config/common.go @@ -94,7 +94,7 @@ func NormalizeKubernetesVersion(cfg *kubeadmapi.ClusterConfiguration) error { isCIVersion := kubeadmutil.KubernetesIsCIVersion(cfg.KubernetesVersion) // Requested version is automatic CI build, thus use KubernetesCI Image Repository for core images - if isCIVersion { + if isCIVersion && cfg.ImageRepository == kubeadmapiv1.DefaultImageRepository { cfg.CIImageRepository = constants.DefaultCIImageRepository } @@ -106,7 +106,7 @@ func NormalizeKubernetesVersion(cfg *kubeadmapi.ClusterConfiguration) error { // Requested version is automatic CI build, thus mark CIKubernetesVersion as `ci/` if isCIVersion { - cfg.CIKubernetesVersion = fmt.Sprintf("ci/%s", ver) + cfg.CIKubernetesVersion = fmt.Sprintf("%s%s", constants.CIKubernetesVersionPrefix, ver) } cfg.KubernetesVersion = ver diff --git a/cmd/kubeadm/app/util/config/common_test.go b/cmd/kubeadm/app/util/config/common_test.go index b708657de71..50d0fa36c5c 100644 --- a/cmd/kubeadm/app/util/config/common_test.go +++ b/cmd/kubeadm/app/util/config/common_test.go @@ -18,6 +18,7 @@ package config import ( "fmt" + "reflect" "testing" "github.com/lithammer/dedent" @@ -26,6 +27,7 @@ import ( "k8s.io/apimachinery/pkg/util/version" apimachineryversion "k8s.io/apimachinery/pkg/version" + kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapiv1old "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2" kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" "k8s.io/kubernetes/cmd/kubeadm/app/constants" @@ -452,3 +454,97 @@ func TestIsKubeadmPrereleaseVersion(t *testing.T) { }) } } + +func TestNormalizeKubernetesVersion(t *testing.T) { + validVersion := fmt.Sprintf("v%v", constants.MinimumControlPlaneVersion) + validCIVersion := fmt.Sprintf("%s%s", constants.CIKubernetesVersionPrefix, validVersion) + tests := []struct { + name string + cfg *kubeadmapi.ClusterConfiguration + expectedCfg *kubeadmapi.ClusterConfiguration + expectErr bool + }{ + { + name: "normal version, default image repository", + cfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: validVersion, + ImageRepository: kubeadmapiv1.DefaultImageRepository, + }, + expectedCfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: validVersion, + CIKubernetesVersion: "", + ImageRepository: kubeadmapiv1.DefaultImageRepository, + CIImageRepository: "", + }, + expectErr: false, + }, + { + name: "normal version, custom image repository", + cfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: validVersion, + ImageRepository: "custom.repository", + }, + expectedCfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: validVersion, + CIKubernetesVersion: "", + ImageRepository: "custom.repository", + CIImageRepository: "", + }, + expectErr: false, + }, + { + name: "ci version, default image repository", + cfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: validCIVersion, + ImageRepository: kubeadmapiv1.DefaultImageRepository, + }, + expectedCfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: validVersion, + CIKubernetesVersion: validCIVersion, + ImageRepository: kubeadmapiv1.DefaultImageRepository, + CIImageRepository: constants.DefaultCIImageRepository, + }, + expectErr: false, + }, + { + name: "ci version, custom image repository", + cfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: validCIVersion, + ImageRepository: "custom.repository", + }, + expectedCfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: validVersion, + CIKubernetesVersion: validCIVersion, + ImageRepository: "custom.repository", + CIImageRepository: "", + }, + expectErr: false, + }, + { + name: "unsupported old version", + cfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: "v0.0.0", + ImageRepository: kubeadmapiv1.DefaultImageRepository, + }, + expectedCfg: &kubeadmapi.ClusterConfiguration{ + KubernetesVersion: "v0.0.0", + CIKubernetesVersion: "", + ImageRepository: kubeadmapiv1.DefaultImageRepository, + CIImageRepository: "", + }, + expectErr: true, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + err := NormalizeKubernetesVersion(tc.cfg) + if !reflect.DeepEqual(tc.cfg, tc.expectedCfg) { + t.Errorf("expected ClusterConfiguration: %#v, got %#v", tc.expectedCfg, tc.cfg) + } + if !tc.expectErr && err != nil { + t.Errorf("unexpected failure: %v", err) + } + }) + } +}