diff --git a/cmd/kubeadm/app/apis/kubeadm/BUILD b/cmd/kubeadm/app/apis/kubeadm/BUILD index fe8250a359d..52e63444b4a 100644 --- a/cmd/kubeadm/app/apis/kubeadm/BUILD +++ b/cmd/kubeadm/app/apis/kubeadm/BUILD @@ -13,7 +13,6 @@ load( go_library( name = "go_default_library", srcs = [ - "defaults.go", "doc.go", "env.go", "register.go", diff --git a/cmd/kubeadm/app/apis/kubeadm/defaults.go b/cmd/kubeadm/app/apis/kubeadm/defaults.go deleted file mode 100644 index 7077ec48e0b..00000000000 --- a/cmd/kubeadm/app/apis/kubeadm/defaults.go +++ /dev/null @@ -1,25 +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 kubeadm - -const ( - DefaultServiceDNSDomain = "cluster.local" - DefaultServicesSubnet = "10.96.0.0/12" - DefaultKubernetesVersion = "v1.4.4" - DefaultAPIBindPort = 6443 - DefaultDiscoveryBindPort = 9898 -) diff --git a/cmd/kubeadm/app/apis/kubeadm/register.go b/cmd/kubeadm/app/apis/kubeadm/register.go index 359ee2f572e..0492a87a15f 100644 --- a/cmd/kubeadm/app/apis/kubeadm/register.go +++ b/cmd/kubeadm/app/apis/kubeadm/register.go @@ -22,17 +22,17 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -var ( - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme -) - // GroupName is the group name use in this package const GroupName = "kubeadm.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + // Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/BUILD b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/BUILD index 972efe1cc00..0ce0637bf50 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/BUILD +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/BUILD @@ -13,9 +13,11 @@ load( go_library( name = "go_default_library", srcs = [ + "defaults.go", "doc.go", "register.go", "types.go", + "zz_generated.defaults.go", ], tags = ["automanaged"], deps = [ diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go new file mode 100644 index 00000000000..1c44d2dbb95 --- /dev/null +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go @@ -0,0 +1,69 @@ +/* +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 v1alpha1 + +import ( + "k8s.io/kubernetes/pkg/runtime" +) + +const ( + DefaultServiceDNSDomain = "cluster.local" + DefaultServicesSubnet = "10.96.0.0/12" + DefaultKubernetesVersion = "v1.4.4" + DefaultAPIBindPort = 6443 + DefaultDiscoveryBindPort = 9898 +) + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + RegisterDefaults(scheme) + return scheme.AddDefaultingFuncs( + SetDefaults_MasterConfiguration, + SetDefaults_NodeConfiguration, + ) +} + +func SetDefaults_MasterConfiguration(obj *MasterConfiguration) { + if obj.KubernetesVersion == "" { + obj.KubernetesVersion = DefaultKubernetesVersion + } + + if obj.API.BindPort == 0 { + obj.API.BindPort = DefaultAPIBindPort + } + + if obj.Discovery.BindPort == 0 { + obj.Discovery.BindPort = DefaultDiscoveryBindPort + } + + if obj.Networking.ServiceSubnet == "" { + obj.Networking.ServiceSubnet = DefaultServicesSubnet + } + + if obj.Networking.DNSDomain == "" { + obj.Networking.DNSDomain = DefaultServiceDNSDomain + } +} + +func SetDefaults_NodeConfiguration(obj *NodeConfiguration) { + if obj.APIPort == 0 { + obj.APIPort = DefaultAPIBindPort + } + + if obj.DiscoveryPort == 0 { + obj.DiscoveryPort = DefaultDiscoveryBindPort + } +} diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/doc.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/doc.go index 2ea84b3f247..0da2cf479a1 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/doc.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/doc.go @@ -14,5 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ +// +k8s:defaulter-gen=TypeMeta // +groupName=kubeadm.k8s.io package v1alpha1 // import "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1" diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/register.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/register.go index 2a1ab13bbea..cda6b3c67cb 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/register.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/register.go @@ -22,17 +22,17 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -var ( - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme -) - // GroupName is the group name use in this package const GroupName = "kubeadm.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + // Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.defaults.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.defaults.go new file mode 100644 index 00000000000..ead6c7e92bf --- /dev/null +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.defaults.go @@ -0,0 +1,42 @@ +// +build !ignore_autogenerated + +/* +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. +*/ + +// This file was autogenerated by defaulter-gen. Do not edit it manually! + +package v1alpha1 + +import ( + runtime "k8s.io/kubernetes/pkg/runtime" +) + +// RegisterDefaults adds defaulters functions to the given scheme. +// Public to allow building arbitrary schemes. +// All generated defaulters are covering - they call all nested defaulters. +func RegisterDefaults(scheme *runtime.Scheme) error { + scheme.AddTypeDefaultingFunc(&MasterConfiguration{}, func(obj interface{}) { SetObjectDefaults_MasterConfiguration(obj.(*MasterConfiguration)) }) + scheme.AddTypeDefaultingFunc(&NodeConfiguration{}, func(obj interface{}) { SetObjectDefaults_NodeConfiguration(obj.(*NodeConfiguration)) }) + return nil +} + +func SetObjectDefaults_MasterConfiguration(in *MasterConfiguration) { + SetDefaults_MasterConfiguration(in) +} + +func SetObjectDefaults_NodeConfiguration(in *NodeConfiguration) { + SetDefaults_NodeConfiguration(in) +} diff --git a/cmd/kubeadm/app/cmd/BUILD b/cmd/kubeadm/app/cmd/BUILD index 2edf2c923e4..234ae8cd022 100644 --- a/cmd/kubeadm/app/cmd/BUILD +++ b/cmd/kubeadm/app/cmd/BUILD @@ -22,6 +22,7 @@ go_library( tags = ["automanaged"], deps = [ "//cmd/kubeadm/app/apis/kubeadm:go_default_library", + "//cmd/kubeadm/app/apis/kubeadm/v1alpha1:go_default_library", "//cmd/kubeadm/app/master:go_default_library", "//cmd/kubeadm/app/node:go_default_library", "//cmd/kubeadm/app/preflight:go_default_library", diff --git a/cmd/kubeadm/app/cmd/init.go b/cmd/kubeadm/app/cmd/init.go index ce0a524b471..6107f589427 100644 --- a/cmd/kubeadm/app/cmd/init.go +++ b/cmd/kubeadm/app/cmd/init.go @@ -27,6 +27,7 @@ import ( "github.com/spf13/cobra" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + kubeadmapiext "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1" kubemaster "k8s.io/kubernetes/cmd/kubeadm/app/master" "k8s.io/kubernetes/cmd/kubeadm/app/preflight" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -61,92 +62,96 @@ var ( // NewCmdInit returns "kubeadm init" command. func NewCmdInit(out io.Writer) *cobra.Command { - cfg := &kubeadmapi.MasterConfiguration{} + versioned := &kubeadmapiext.MasterConfiguration{} + api.Scheme.Default(versioned) + cfg := kubeadmapi.MasterConfiguration{} + api.Scheme.Convert(versioned, &cfg, nil) + var cfgPath string var skipPreFlight bool cmd := &cobra.Command{ Use: "init", Short: "Run this in order to set up the Kubernetes master", Run: func(cmd *cobra.Command, args []string) { - i, err := NewInit(cfgPath, cfg, skipPreFlight) + i, err := NewInit(cfgPath, &cfg, skipPreFlight) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(i.Run(out)) }, } cmd.PersistentFlags().StringVar( - &cfg.Secrets.GivenToken, "token", "", + &cfg.Secrets.GivenToken, "token", cfg.Secrets.GivenToken, "Shared secret used to secure cluster bootstrap; if none is provided, one will be generated for you", ) cmd.PersistentFlags().StringSliceVar( - &cfg.API.AdvertiseAddresses, "api-advertise-addresses", []string{}, + &cfg.API.AdvertiseAddresses, "api-advertise-addresses", cfg.API.AdvertiseAddresses, "The IP addresses to advertise, in case autodetection fails", ) cmd.PersistentFlags().StringSliceVar( - &cfg.API.ExternalDNSNames, "api-external-dns-names", []string{}, + &cfg.API.ExternalDNSNames, "api-external-dns-names", cfg.API.ExternalDNSNames, "The DNS names to advertise, in case you have configured them yourself", ) cmd.PersistentFlags().StringVar( - &cfg.Networking.ServiceSubnet, "service-cidr", kubeadmapi.DefaultServicesSubnet, + &cfg.Networking.ServiceSubnet, "service-cidr", cfg.Networking.ServiceSubnet, "Use alternative range of IP address for service VIPs", ) cmd.PersistentFlags().StringVar( - &cfg.Networking.PodSubnet, "pod-network-cidr", "", + &cfg.Networking.PodSubnet, "pod-network-cidr", cfg.Networking.PodSubnet, "Specify range of IP addresses for the pod network; if set, the control plane will automatically allocate CIDRs for every node", ) cmd.PersistentFlags().StringVar( - &cfg.Networking.DNSDomain, "service-dns-domain", kubeadmapi.DefaultServiceDNSDomain, + &cfg.Networking.DNSDomain, "service-dns-domain", cfg.Networking.DNSDomain, `Use alternative domain for services, e.g. "myorg.internal"`, ) cmd.PersistentFlags().StringVar( - &cfg.CloudProvider, "cloud-provider", "", + &cfg.CloudProvider, "cloud-provider", cfg.CloudProvider, `Enable cloud provider features (external load-balancers, storage, etc), e.g. "gce"`, ) cmd.PersistentFlags().StringVar( - &cfg.KubernetesVersion, "use-kubernetes-version", kubeadmapi.DefaultKubernetesVersion, + &cfg.KubernetesVersion, "use-kubernetes-version", cfg.KubernetesVersion, `Choose a specific Kubernetes version for the control plane`, ) - cmd.PersistentFlags().StringVar(&cfgPath, "config", "", "Path to kubeadm config file") + cmd.PersistentFlags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file") // TODO (phase1+) @errordeveloper make the flags below not show up in --help but rather on --advanced-help cmd.PersistentFlags().StringSliceVar( - &cfg.Etcd.Endpoints, "external-etcd-endpoints", []string{}, + &cfg.Etcd.Endpoints, "external-etcd-endpoints", cfg.Etcd.Endpoints, "etcd endpoints to use, in case you have an external cluster", ) cmd.PersistentFlags().MarkDeprecated("external-etcd-endpoints", "this flag will be removed when componentconfig exists") cmd.PersistentFlags().StringVar( - &cfg.Etcd.CAFile, "external-etcd-cafile", "", + &cfg.Etcd.CAFile, "external-etcd-cafile", cfg.Etcd.CAFile, "etcd certificate authority certificate file. Note: The path must be in /etc/ssl/certs", ) cmd.PersistentFlags().MarkDeprecated("external-etcd-cafile", "this flag will be removed when componentconfig exists") cmd.PersistentFlags().StringVar( - &cfg.Etcd.CertFile, "external-etcd-certfile", "", + &cfg.Etcd.CertFile, "external-etcd-certfile", cfg.Etcd.CertFile, "etcd client certificate file. Note: The path must be in /etc/ssl/certs", ) cmd.PersistentFlags().MarkDeprecated("external-etcd-certfile", "this flag will be removed when componentconfig exists") cmd.PersistentFlags().StringVar( - &cfg.Etcd.KeyFile, "external-etcd-keyfile", "", + &cfg.Etcd.KeyFile, "external-etcd-keyfile", cfg.Etcd.KeyFile, "etcd client key file. Note: The path must be in /etc/ssl/certs", ) cmd.PersistentFlags().MarkDeprecated("external-etcd-keyfile", "this flag will be removed when componentconfig exists") cmd.PersistentFlags().BoolVar( - &skipPreFlight, "skip-preflight-checks", false, + &skipPreFlight, "skip-preflight-checks", skipPreFlight, "skip preflight checks normally run before modifying the system", ) cmd.PersistentFlags().Int32Var( - &cfg.API.BindPort, "api-port", kubeadmapi.DefaultAPIBindPort, + &cfg.API.BindPort, "api-port", cfg.API.BindPort, "Port for API to bind to", ) cmd.PersistentFlags().Int32Var( - &cfg.Discovery.BindPort, "discovery-port", kubeadmapi.DefaultDiscoveryBindPort, + &cfg.Discovery.BindPort, "discovery-port", cfg.Discovery.BindPort, "Port for JWS discovery service to bind to", ) @@ -202,8 +207,8 @@ func NewInit(cfgPath string, cfg *kubeadmapi.MasterConfiguration, skipPreFlight // joinArgsData denotes a data object which is needed by function generateJoinArgs to generate kubeadm join arguments. type joinArgsData struct { Cfg *kubeadmapi.MasterConfiguration - DefaultAPIBindPort uint - DefaultDiscoveryBindPort uint + DefaultAPIBindPort int32 + DefaultDiscoveryBindPort int32 } // Run executes master node provisioning, including certificates, needed static pod manifests, etc. @@ -259,7 +264,7 @@ func (i *Init) Run(out io.Writer) error { return err } - data := joinArgsData{i.cfg, kubeadmapi.DefaultAPIBindPort, kubeadmapi.DefaultDiscoveryBindPort} + data := joinArgsData{i.cfg, kubeadmapiext.DefaultAPIBindPort, kubeadmapiext.DefaultDiscoveryBindPort} if joinArgs, err := generateJoinArgs(data); err != nil { return err } else { diff --git a/cmd/kubeadm/app/cmd/join.go b/cmd/kubeadm/app/cmd/join.go index 20abdff6e6b..51796084ef1 100644 --- a/cmd/kubeadm/app/cmd/join.go +++ b/cmd/kubeadm/app/cmd/join.go @@ -25,6 +25,7 @@ import ( "github.com/spf13/cobra" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + kubeadmapiext "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1" kubenode "k8s.io/kubernetes/cmd/kubeadm/app/node" "k8s.io/kubernetes/cmd/kubeadm/app/preflight" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -45,25 +46,30 @@ var ( // NewCmdJoin returns "kubeadm join" command. func NewCmdJoin(out io.Writer) *cobra.Command { - cfg := &kubeadmapi.NodeConfiguration{} + versioned := &kubeadmapiext.NodeConfiguration{} + api.Scheme.Default(versioned) + cfg := kubeadmapi.NodeConfiguration{} + api.Scheme.Convert(versioned, &cfg, nil) + var skipPreFlight bool var cfgPath string + cmd := &cobra.Command{ Use: "join", Short: "Run this on any machine you wish to join an existing cluster", Run: func(cmd *cobra.Command, args []string) { - j, err := NewJoin(cfgPath, args, cfg, skipPreFlight) + j, err := NewJoin(cfgPath, args, &cfg, skipPreFlight) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(j.Run(out)) }, } cmd.PersistentFlags().StringVar( - &cfg.Secrets.GivenToken, "token", "", + &cfg.Secrets.GivenToken, "token", cfg.Secrets.GivenToken, "(required) Shared secret used to secure bootstrap. Must match the output of 'kubeadm init'", ) - cmd.PersistentFlags().StringVar(&cfgPath, "config", "", "Path to kubeadm config file") + cmd.PersistentFlags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file") cmd.PersistentFlags().BoolVar( &skipPreFlight, "skip-preflight-checks", false, @@ -71,12 +77,12 @@ func NewCmdJoin(out io.Writer) *cobra.Command { ) cmd.PersistentFlags().Int32Var( - &cfg.APIPort, "api-port", kubeadmapi.DefaultAPIBindPort, + &cfg.APIPort, "api-port", cfg.APIPort, "(optional) API server port on the master", ) cmd.PersistentFlags().Int32Var( - &cfg.DiscoveryPort, "discovery-port", kubeadmapi.DefaultDiscoveryBindPort, + &cfg.DiscoveryPort, "discovery-port", cfg.DiscoveryPort, "(optional) Discovery port on the master", ) diff --git a/cmd/kubeadm/app/master/BUILD b/cmd/kubeadm/app/master/BUILD index 263af4f7cfb..2961f2bb200 100644 --- a/cmd/kubeadm/app/master/BUILD +++ b/cmd/kubeadm/app/master/BUILD @@ -24,6 +24,7 @@ go_library( tags = ["automanaged"], deps = [ "//cmd/kubeadm/app/apis/kubeadm:go_default_library", + "//cmd/kubeadm/app/apis/kubeadm/v1alpha1:go_default_library", "//cmd/kubeadm/app/images:go_default_library", "//cmd/kubeadm/app/util:go_default_library", "//pkg/api:go_default_library", diff --git a/cmd/kubeadm/app/master/discovery.go b/cmd/kubeadm/app/master/discovery.go index 563716430d3..2c2c5b88eef 100644 --- a/cmd/kubeadm/app/master/discovery.go +++ b/cmd/kubeadm/app/master/discovery.go @@ -23,6 +23,7 @@ import ( "time" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + kubeadmapiext "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" @@ -79,7 +80,7 @@ func newKubeDiscoveryPodSpec(cfg *kubeadmapi.MasterConfiguration) api.PodSpec { Ports: []api.ContainerPort{ // TODO when CNI issue (#31307) is resolved, we should consider adding // `HostIP: s.API.AdvertiseAddrs[0]`, if there is only one address` - {Name: "http", ContainerPort: kubeadmapi.DefaultDiscoveryBindPort, HostPort: cfg.Discovery.BindPort}, + {Name: "http", ContainerPort: kubeadmapiext.DefaultDiscoveryBindPort, HostPort: cfg.Discovery.BindPort}, }, SecurityContext: &api.SecurityContext{ SELinuxOptions: &api.SELinuxOptions{ diff --git a/pkg/api/defaulting_test.go b/pkg/api/defaulting_test.go index bd1cc096a55..ab81d00b5bd 100644 --- a/pkg/api/defaulting_test.go +++ b/pkg/api/defaulting_test.go @@ -53,44 +53,48 @@ func TestVerifyDefaulting(t *testing.T) { func TestDefaulting(t *testing.T) { // these are the known types with defaulters - you must add to this list if you add a top level defaulter typesWithDefaulting := map[unversioned.GroupVersionKind]struct{}{ - {Group: "", Version: "v1", Kind: "ConfigMap"}: {}, - {Group: "", Version: "v1", Kind: "ConfigMapList"}: {}, - {Group: "", Version: "v1", Kind: "Endpoints"}: {}, - {Group: "", Version: "v1", Kind: "EndpointsList"}: {}, - {Group: "", Version: "v1", Kind: "Namespace"}: {}, - {Group: "", Version: "v1", Kind: "NamespaceList"}: {}, - {Group: "", Version: "v1", Kind: "Node"}: {}, - {Group: "", Version: "v1", Kind: "NodeList"}: {}, - {Group: "", Version: "v1", Kind: "PersistentVolume"}: {}, - {Group: "", Version: "v1", Kind: "PersistentVolumeList"}: {}, - {Group: "", Version: "v1", Kind: "PersistentVolumeClaim"}: {}, - {Group: "", Version: "v1", Kind: "PersistentVolumeClaimList"}: {}, - {Group: "", Version: "v1", Kind: "PodAttachOptions"}: {}, - {Group: "", Version: "v1", Kind: "PodExecOptions"}: {}, - {Group: "", Version: "v1", Kind: "Pod"}: {}, - {Group: "", Version: "v1", Kind: "PodList"}: {}, - {Group: "", Version: "v1", Kind: "PodTemplate"}: {}, - {Group: "", Version: "v1", Kind: "PodTemplateList"}: {}, - {Group: "", Version: "v1", Kind: "ReplicationController"}: {}, - {Group: "", Version: "v1", Kind: "ReplicationControllerList"}: {}, - {Group: "", Version: "v1", Kind: "Secret"}: {}, - {Group: "", Version: "v1", Kind: "SecretList"}: {}, - {Group: "", Version: "v1", Kind: "Service"}: {}, - {Group: "", Version: "v1", Kind: "ServiceList"}: {}, - {Group: "apps", Version: "v1alpha1", Kind: "StatefulSet"}: {}, - {Group: "apps", Version: "v1alpha1", Kind: "StatefulSetList"}: {}, - {Group: "autoscaling", Version: "v1", Kind: "HorizontalPodAutoscaler"}: {}, - {Group: "autoscaling", Version: "v1", Kind: "HorizontalPodAutoscalerList"}: {}, - {Group: "batch", Version: "v1", Kind: "Job"}: {}, - {Group: "batch", Version: "v1", Kind: "JobList"}: {}, - {Group: "batch", Version: "v2alpha1", Kind: "Job"}: {}, - {Group: "batch", Version: "v2alpha1", Kind: "JobList"}: {}, - {Group: "batch", Version: "v2alpha1", Kind: "JobTemplate"}: {}, - {Group: "batch", Version: "v2alpha1", Kind: "ScheduledJob"}: {}, - {Group: "batch", Version: "v2alpha1", Kind: "ScheduledJobList"}: {}, - {Group: "componentconfig", Version: "v1alpha1", Kind: "KubeProxyConfiguration"}: {}, - {Group: "componentconfig", Version: "v1alpha1", Kind: "KubeSchedulerConfiguration"}: {}, - {Group: "componentconfig", Version: "v1alpha1", Kind: "KubeletConfiguration"}: {}, + {Group: "", Version: "v1", Kind: "ConfigMap"}: {}, + {Group: "", Version: "v1", Kind: "ConfigMapList"}: {}, + {Group: "", Version: "v1", Kind: "Endpoints"}: {}, + {Group: "", Version: "v1", Kind: "EndpointsList"}: {}, + {Group: "", Version: "v1", Kind: "Namespace"}: {}, + {Group: "", Version: "v1", Kind: "NamespaceList"}: {}, + {Group: "", Version: "v1", Kind: "Node"}: {}, + {Group: "", Version: "v1", Kind: "NodeList"}: {}, + {Group: "", Version: "v1", Kind: "PersistentVolume"}: {}, + {Group: "", Version: "v1", Kind: "PersistentVolumeList"}: {}, + {Group: "", Version: "v1", Kind: "PersistentVolumeClaim"}: {}, + {Group: "", Version: "v1", Kind: "PersistentVolumeClaimList"}: {}, + {Group: "", Version: "v1", Kind: "PodAttachOptions"}: {}, + {Group: "", Version: "v1", Kind: "PodExecOptions"}: {}, + {Group: "", Version: "v1", Kind: "Pod"}: {}, + {Group: "", Version: "v1", Kind: "PodList"}: {}, + {Group: "", Version: "v1", Kind: "PodTemplate"}: {}, + {Group: "", Version: "v1", Kind: "PodTemplateList"}: {}, + {Group: "", Version: "v1", Kind: "ReplicationController"}: {}, + {Group: "", Version: "v1", Kind: "ReplicationControllerList"}: {}, + {Group: "", Version: "v1", Kind: "Secret"}: {}, + {Group: "", Version: "v1", Kind: "SecretList"}: {}, + {Group: "", Version: "v1", Kind: "Service"}: {}, + {Group: "", Version: "v1", Kind: "ServiceList"}: {}, + {Group: "apps", Version: "v1alpha1", Kind: "StatefulSet"}: {}, + {Group: "apps", Version: "v1alpha1", Kind: "StatefulSetList"}: {}, + {Group: "autoscaling", Version: "v1", Kind: "HorizontalPodAutoscaler"}: {}, + {Group: "autoscaling", Version: "v1", Kind: "HorizontalPodAutoscalerList"}: {}, + {Group: "batch", Version: "v1", Kind: "Job"}: {}, + {Group: "batch", Version: "v1", Kind: "JobList"}: {}, + {Group: "batch", Version: "v2alpha1", Kind: "Job"}: {}, + {Group: "batch", Version: "v2alpha1", Kind: "JobList"}: {}, + {Group: "batch", Version: "v2alpha1", Kind: "JobTemplate"}: {}, + {Group: "batch", Version: "v2alpha1", Kind: "ScheduledJob"}: {}, + {Group: "batch", Version: "v2alpha1", Kind: "ScheduledJobList"}: {}, + {Group: "componentconfig", Version: "v1alpha1", Kind: "KubeProxyConfiguration"}: {}, + {Group: "componentconfig", Version: "v1alpha1", Kind: "KubeSchedulerConfiguration"}: {}, + {Group: "componentconfig", Version: "v1alpha1", Kind: "KubeletConfiguration"}: {}, + {Group: "kubeadm.k8s.io", Version: "v1alpha1", Kind: "MasterConfiguration"}: {}, + // This object contains only int fields which currently breaks the defaulting test because + // it's pretty stupid. Once we add non integer fields, we should uncomment this. + // {Group: "kubeadm.k8s.io", Version: "v1alpha1", Kind: "NodeConfiguration"}: {}, {Group: "extensions", Version: "v1beta1", Kind: "DaemonSet"}: {}, {Group: "extensions", Version: "v1beta1", Kind: "DaemonSetList"}: {}, {Group: "extensions", Version: "v1beta1", Kind: "Deployment"}: {}, diff --git a/pkg/api/testing/BUILD b/pkg/api/testing/BUILD index 8f83fe3bd74..a89214e7c73 100644 --- a/pkg/api/testing/BUILD +++ b/pkg/api/testing/BUILD @@ -19,6 +19,7 @@ go_library( ], tags = ["automanaged"], deps = [ + "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//pkg/api:go_default_library", "//pkg/api/resource:go_default_library", "//pkg/api/testapi:go_default_library", diff --git a/pkg/api/testing/fuzzer.go b/pkg/api/testing/fuzzer.go index cc6888e8e58..c95e67d6523 100644 --- a/pkg/api/testing/fuzzer.go +++ b/pkg/api/testing/fuzzer.go @@ -23,6 +23,7 @@ import ( "strconv" "testing" + "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" @@ -538,6 +539,19 @@ func FuzzerFor(t *testing.T, version unversioned.GroupVersion, src rand.Source) // Set the bytes field on the RawExtension r.Raw = bytes }, + func(obj *kubeadm.MasterConfiguration, c fuzz.Continue) { + c.FuzzNoCustom(obj) + obj.KubernetesVersion = "v10" + obj.API.BindPort = 20 + obj.Discovery.BindPort = 20 + obj.Networking.ServiceSubnet = "foo" + obj.Networking.DNSDomain = "foo" + }, + func(obj *kubeadm.NodeConfiguration, c fuzz.Continue) { + c.FuzzNoCustom(obj) + obj.APIPort = 20 + obj.DiscoveryPort = 20 + }, ) return f }