diff --git a/cmd/kubeadm/app/apis/kubeadm/validation/validation.go b/cmd/kubeadm/app/apis/kubeadm/validation/validation.go index 77313e1f3c2..1d2f56f28a3 100644 --- a/cmd/kubeadm/app/apis/kubeadm/validation/validation.go +++ b/cmd/kubeadm/app/apis/kubeadm/validation/validation.go @@ -25,10 +25,26 @@ import ( "k8s.io/kubernetes/pkg/registry/core/service/ipallocator" ) +// TODO: Break out the cloudprovider functionality out of core and only support the new flow +// described in https://github.com/kubernetes/community/pull/128 +var cloudproviders = []string{ + "aws", + "azure", + "cloudstack", + "gce", + "mesos", + "openstack", + "ovirt", + "photon", + "rackspace", + "vsphere", +} + func ValidateMasterConfiguration(c *kubeadm.MasterConfiguration) field.ErrorList { allErrs := field.ErrorList{} allErrs = append(allErrs, ValidateDiscovery(&c.Discovery, field.NewPath("discovery"))...) allErrs = append(allErrs, ValidateDiscovery(&c.Discovery, field.NewPath("service subnet"))...) + allErrs = append(allErrs, ValidateCloudProvider(c.CloudProvider, field.NewPath("cloudprovider"))...) return allErrs } @@ -91,3 +107,15 @@ func ValidateServiceSubnet(subnet string, fldPath *field.Path) field.ErrorList { } return field.ErrorList{} } + +func ValidateCloudProvider(provider string, fldPath *field.Path) field.ErrorList { + if len(provider) == 0 { + return field.ErrorList{} + } + for _, supported := range cloudproviders { + if provider == supported { + return field.ErrorList{} + } + } + return field.ErrorList{field.Invalid(fldPath, nil, "cloudprovider not supported")} +} diff --git a/cmd/kubeadm/app/apis/kubeadm/validation/validation_test.go b/cmd/kubeadm/app/apis/kubeadm/validation/validation_test.go index f295c22275a..54bed3b1890 100644 --- a/cmd/kubeadm/app/apis/kubeadm/validation/validation_test.go +++ b/cmd/kubeadm/app/apis/kubeadm/validation/validation_test.go @@ -71,6 +71,30 @@ func TestValidateServiceSubnet(t *testing.T) { } } +func TestValidateCloudProvider(t *testing.T) { + var tests = []struct { + s string + f *field.Path + expected bool + }{ + {"", nil, true}, // if not provided, ok, it's optional + {"1234", nil, false}, // not supported + {"awws", nil, false}, // not supported + {"aws", nil, true}, // supported + {"gce", nil, true}, // supported + } + for _, rt := range tests { + actual := ValidateCloudProvider(rt.s, rt.f) + if (len(actual) == 0) != rt.expected { + t.Errorf( + "failed ValidateCloudProvider:\n\texpected: %t\n\t actual: %t", + rt.expected, + (len(actual) == 0), + ) + } + } +} + func TestValidateMasterConfiguration(t *testing.T) { var tests = []struct { s *kubeadm.MasterConfiguration diff --git a/cmd/kubeadm/app/cmd/BUILD b/cmd/kubeadm/app/cmd/BUILD index b41ce591770..83d8e2b9db4 100644 --- a/cmd/kubeadm/app/cmd/BUILD +++ b/cmd/kubeadm/app/cmd/BUILD @@ -24,7 +24,6 @@ go_library( "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/apis/kubeadm/v1alpha1:go_default_library", "//cmd/kubeadm/app/apis/kubeadm/validation:go_default_library", - "//cmd/kubeadm/app/cmd/flags:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/discovery:go_default_library", "//cmd/kubeadm/app/master:go_default_library", @@ -79,9 +78,6 @@ filegroup( filegroup( name = "all-srcs", - srcs = [ - ":package-srcs", - "//cmd/kubeadm/app/cmd/flags:all-srcs", - ], + srcs = [":package-srcs"], tags = ["automanaged"], ) diff --git a/cmd/kubeadm/app/cmd/flags/BUILD b/cmd/kubeadm/app/cmd/flags/BUILD deleted file mode 100644 index 449dd8f9a04..00000000000 --- a/cmd/kubeadm/app/cmd/flags/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -licenses(["notice"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = ["cloudprovider.go"], - tags = ["automanaged"], - deps = ["//vendor:github.com/spf13/pflag"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/cmd/kubeadm/app/cmd/flags/cloudprovider.go b/cmd/kubeadm/app/cmd/flags/cloudprovider.go deleted file mode 100644 index 0058344fb79..00000000000 --- a/cmd/kubeadm/app/cmd/flags/cloudprovider.go +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package flags - -import ( - "fmt" - - "github.com/spf13/pflag" -) - -var cloudproviders = []string{ - "aws", - "azure", - "cloudstack", - "gce", - "mesos", - "openstack", - "ovirt", - "photon", - "rackspace", - "vsphere", -} - -func NewCloudProviderFlag(provider *string) pflag.Value { - return &cloudProviderValue{provider: provider} -} - -type cloudProviderValue struct { - provider *string -} - -func (c *cloudProviderValue) String() string { - return *c.provider -} - -func (c *cloudProviderValue) Set(s string) error { - if ValidateCloudProvider(s) { - *c.provider = s - return nil - } - - return fmt.Errorf("cloud provider %q is not supported, you can use any of %v", s, cloudproviders) -} - -func (c *cloudProviderValue) Type() string { - return "cloudprovider" -} - -func ValidateCloudProvider(provider string) bool { - for _, supported := range cloudproviders { - if provider == supported { - return true - } - } - return false -} diff --git a/cmd/kubeadm/app/cmd/init.go b/cmd/kubeadm/app/cmd/init.go index a3de0f94445..50e32f1e669 100644 --- a/cmd/kubeadm/app/cmd/init.go +++ b/cmd/kubeadm/app/cmd/init.go @@ -30,7 +30,6 @@ import ( kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapiext "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1" "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" - "k8s.io/kubernetes/cmd/kubeadm/app/cmd/flags" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/discovery" kubemaster "k8s.io/kubernetes/cmd/kubeadm/app/master" @@ -106,11 +105,6 @@ func NewCmdInit(out io.Writer) *cobra.Command { &cfg.Networking.DNSDomain, "service-dns-domain", cfg.Networking.DNSDomain, `Use alternative domain for services, e.g. "myorg.internal"`, ) - cmd.PersistentFlags().Var( - flags.NewCloudProviderFlag(&cfg.CloudProvider), "cloud-provider", - `Enable cloud provider features (external load-balancers, storage, etc). Note that you have to configure all kubelets manually`, - ) - cmd.PersistentFlags().StringVar( &cfg.KubernetesVersion, "use-kubernetes-version", cfg.KubernetesVersion, `Choose a specific Kubernetes version for the control plane`,