diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go index c0439cbc07a..bb30de78c39 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go @@ -39,7 +39,7 @@ const ( // DefaultClusterDNSIP defines default DNS IP DefaultClusterDNSIP = "10.96.0.10" // DefaultKubernetesVersion defines default kubernetes version - DefaultKubernetesVersion = "stable-1.10" + DefaultKubernetesVersion = "stable-1.11" // DefaultAPIBindPort defines default API port DefaultAPIBindPort = 6443 // DefaultAuthorizationModes defines default authorization modes diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go index f085904efbd..c9b8980bdcd 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go @@ -38,7 +38,7 @@ const ( // DefaultClusterDNSIP defines default DNS IP DefaultClusterDNSIP = "10.96.0.10" // DefaultKubernetesVersion defines default kubernetes version - DefaultKubernetesVersion = "stable-1.10" + DefaultKubernetesVersion = "stable-1.11" // DefaultAPIBindPort defines default API port DefaultAPIBindPort = 6443 // DefaultCertificatesDir defines default certificate directory diff --git a/cmd/kubeadm/app/cmd/config.go b/cmd/kubeadm/app/cmd/config.go index e8874a1a591..91cb0963274 100644 --- a/cmd/kubeadm/app/cmd/config.go +++ b/cmd/kubeadm/app/cmd/config.go @@ -358,7 +358,7 @@ func NewCmdConfigImages(out io.Writer) *cobra.Command { Short: "Interact with container images used by kubeadm.", RunE: cmdutil.SubCmdRunE("images"), } - cmd.AddCommand(NewCmdConfigImagesList(out)) + cmd.AddCommand(NewCmdConfigImagesList(out, nil)) cmd.AddCommand(NewCmdConfigImagesPull()) return cmd } @@ -416,12 +416,18 @@ func (ip *ImagesPull) PullAll() error { } // NewCmdConfigImagesList returns the "kubeadm config images list" command -func NewCmdConfigImagesList(out io.Writer) *cobra.Command { +func NewCmdConfigImagesList(out io.Writer, mockK8sVersion *string) *cobra.Command { cfg := &kubeadmapiv1alpha2.MasterConfiguration{} kubeadmscheme.Scheme.Default(cfg) var cfgPath, featureGatesString string var err error + // This just sets the kubernetes version for unit testing so kubeadm won't try to + // lookup the latest release from the internet. + if mockK8sVersion != nil { + cfg.KubernetesVersion = *mockK8sVersion + } + cmd := &cobra.Command{ Use: "list", Short: "Print a list of images kubeadm will use. The configuration file is used in case any images or image repositories are customized.", diff --git a/cmd/kubeadm/app/cmd/config_test.go b/cmd/kubeadm/app/cmd/config_test.go index 77b0ce7f7aa..18db0ec99ca 100644 --- a/cmd/kubeadm/app/cmd/config_test.go +++ b/cmd/kubeadm/app/cmd/config_test.go @@ -34,11 +34,15 @@ import ( const ( defaultNumberOfImages = 8 + // dummyKubernetesVersion is just used for unit testing, in order to not make + // kubeadm lookup dl.k8s.io to resolve what the latest stable release is + dummyKubernetesVersion = "v1.10.0" ) func TestNewCmdConfigImagesList(t *testing.T) { var output bytes.Buffer - images := cmd.NewCmdConfigImagesList(&output) + mockK8sVersion := dummyKubernetesVersion + images := cmd.NewCmdConfigImagesList(&output, &mockK8sVersion) images.Run(nil, nil) actual := strings.Split(output.String(), "\n") if len(actual) != defaultNumberOfImages { @@ -54,11 +58,6 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) { expectedImageSubstrings []string configContents []byte }{ - { - name: "empty config contents", - expectedImageCount: defaultNumberOfImages, - configContents: []byte{}, - }, { name: "set k8s version", expectedImageCount: defaultNumberOfImages, @@ -68,7 +67,7 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) { configContents: []byte(dedent.Dedent(` apiVersion: kubeadm.k8s.io/v1alpha2 kind: MasterConfiguration - kubernetesVersion: 1.10.1 + kubernetesVersion: v1.10.1 `)), }, { @@ -80,8 +79,9 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) { configContents: []byte(dedent.Dedent(` apiVersion: kubeadm.k8s.io/v1alpha2 kind: MasterConfiguration + kubernetesVersion: v1.11.0 featureGates: - CoreDNS: True + CoreDNS: True `)), }, } @@ -100,7 +100,9 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) { t.Fatalf("Failed writing a config file: %v", err) } - i, err := cmd.NewImagesList(configFilePath, &kubeadmapiv1alpha2.MasterConfiguration{}) + i, err := cmd.NewImagesList(configFilePath, &kubeadmapiv1alpha2.MasterConfiguration{ + KubernetesVersion: dummyKubernetesVersion, + }) if err != nil { t.Fatalf("Failed getting the kubeadm images command: %v", err) } @@ -131,6 +133,9 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) { { name: "empty config", expectedImages: defaultNumberOfImages, + cfg: kubeadmapiv1alpha2.MasterConfiguration{ + KubernetesVersion: dummyKubernetesVersion, + }, }, { name: "external etcd configuration", @@ -140,6 +145,7 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) { Endpoints: []string{"https://some.etcd.com:2379"}, }, }, + KubernetesVersion: dummyKubernetesVersion, }, expectedImages: defaultNumberOfImages - 1, }, @@ -149,6 +155,7 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) { FeatureGates: map[string]bool{ features.CoreDNS: true, }, + KubernetesVersion: dummyKubernetesVersion, }, expectedImages: defaultNumberOfImages, }, @@ -202,6 +209,7 @@ func TestMigrate(t *testing.T) { cfg := []byte(dedent.Dedent(` apiVersion: kubeadm.k8s.io/v1alpha2 kind: MasterConfiguration + kubernetesVersion: v1.10.0 `)) configFile, cleanup := tempConfig(t, cfg) defer cleanup() diff --git a/cmd/kubeadm/test/util.go b/cmd/kubeadm/test/util.go index cb7ae225a68..afe20702cd0 100644 --- a/cmd/kubeadm/test/util.go +++ b/cmd/kubeadm/test/util.go @@ -61,6 +61,7 @@ func SetupMasterConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.M bindPort: {{.API.BindPort}} nodeRegistration: name: {{.NodeRegistration.Name}} + kubernetesVersion: v1.10.0 `))) f, err := os.Create(cfgPath)