Automated rename from MasterConfiguration to InitConfiguration

This commit is contained in:
Lucas Käldström 2018-07-09 04:55:02 +03:00
parent ac99da5e3e
commit 52f0591ad9
No known key found for this signature in database
GPG Key ID: 3FA3783D77751514
95 changed files with 493 additions and 493 deletions

View File

@ -36,7 +36,7 @@ import (
// Funcs returns the fuzzer functions for the kubeadm apis. // Funcs returns the fuzzer functions for the kubeadm apis.
func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { func Funcs(codecs runtimeserializer.CodecFactory) []interface{} {
return []interface{}{ return []interface{}{
func(obj *kubeadm.MasterConfiguration, c fuzz.Continue) { func(obj *kubeadm.InitConfiguration, c fuzz.Continue) {
c.FuzzNoCustom(obj) c.FuzzNoCustom(obj)
obj.KubernetesVersion = "v10" obj.KubernetesVersion = "v10"
obj.API.BindPort = 20 obj.API.BindPort = 20

View File

@ -46,7 +46,7 @@ func Resource(resource string) schema.GroupResource {
func addKnownTypes(scheme *runtime.Scheme) error { func addKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(SchemeGroupVersion, scheme.AddKnownTypes(SchemeGroupVersion,
&MasterConfiguration{}, &InitConfiguration{},
&NodeConfiguration{}, &NodeConfiguration{},
) )
return nil return nil

View File

@ -27,9 +27,9 @@ import (
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// MasterConfiguration contains a list of elements which make up master's // InitConfiguration contains a list of elements which make up master's
// configuration object. // configuration object.
type MasterConfiguration struct { type InitConfiguration struct {
metav1.TypeMeta metav1.TypeMeta
// `kubeadm init`-only information. These fields are solely used the first time `kubeadm init` runs. // `kubeadm init`-only information. These fields are solely used the first time `kubeadm init` runs.
@ -309,7 +309,7 @@ type NodeConfiguration struct {
// It will override location with CI registry name in case user requests special // It will override location with CI registry name in case user requests special
// Kubernetes version from CI build area. // Kubernetes version from CI build area.
// (See: kubeadmconstants.DefaultCIImageRepository) // (See: kubeadmconstants.DefaultCIImageRepository)
func (cfg *MasterConfiguration) GetControlPlaneImageRepository() string { func (cfg *InitConfiguration) GetControlPlaneImageRepository() string {
if cfg.CIImageRepository != "" { if cfg.CIImageRepository != "" {
return cfg.CIImageRepository return cfg.CIImageRepository
} }
@ -344,7 +344,7 @@ type AuditPolicyConfiguration struct {
} }
// CommonConfiguration defines the list of common configuration elements and the getter // CommonConfiguration defines the list of common configuration elements and the getter
// methods that must exist for both the MasterConfiguration and NodeConfiguration objects. // methods that must exist for both the InitConfiguration and NodeConfiguration objects.
// This is used internally to deduplicate the kubeadm preflight checks. // This is used internally to deduplicate the kubeadm preflight checks.
type CommonConfiguration interface { type CommonConfiguration interface {
GetCRISocket() string GetCRISocket() string
@ -352,21 +352,21 @@ type CommonConfiguration interface {
GetKubernetesVersion() string GetKubernetesVersion() string
} }
// GetCRISocket will return the CRISocket that is defined for the MasterConfiguration. // GetCRISocket will return the CRISocket that is defined for the InitConfiguration.
// This is used internally to deduplicate the kubeadm preflight checks. // This is used internally to deduplicate the kubeadm preflight checks.
func (cfg *MasterConfiguration) GetCRISocket() string { func (cfg *InitConfiguration) GetCRISocket() string {
return cfg.NodeRegistration.CRISocket return cfg.NodeRegistration.CRISocket
} }
// GetNodeName will return the NodeName that is defined for the MasterConfiguration. // GetNodeName will return the NodeName that is defined for the InitConfiguration.
// This is used internally to deduplicate the kubeadm preflight checks. // This is used internally to deduplicate the kubeadm preflight checks.
func (cfg *MasterConfiguration) GetNodeName() string { func (cfg *InitConfiguration) GetNodeName() string {
return cfg.NodeRegistration.Name return cfg.NodeRegistration.Name
} }
// GetKubernetesVersion will return the KubernetesVersion that is defined for the MasterConfiguration. // GetKubernetesVersion will return the KubernetesVersion that is defined for the InitConfiguration.
// This is used internally to deduplicate the kubeadm preflight checks. // This is used internally to deduplicate the kubeadm preflight checks.
func (cfg *MasterConfiguration) GetKubernetesVersion() string { func (cfg *InitConfiguration) GetKubernetesVersion() string {
return cfg.KubernetesVersion return cfg.KubernetesVersion
} }

View File

@ -26,8 +26,8 @@ import (
kubeproxyconfigv1alpha1 "k8s.io/kubernetes/pkg/proxy/apis/kubeproxyconfig/v1alpha1" kubeproxyconfigv1alpha1 "k8s.io/kubernetes/pkg/proxy/apis/kubeproxyconfig/v1alpha1"
) )
func Convert_v1alpha2_MasterConfiguration_To_kubeadm_MasterConfiguration(in *MasterConfiguration, out *kubeadm.MasterConfiguration, s conversion.Scope) error { func Convert_v1alpha2_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConfiguration, out *kubeadm.InitConfiguration, s conversion.Scope) error {
if err := autoConvert_v1alpha2_MasterConfiguration_To_kubeadm_MasterConfiguration(in, out, s); err != nil { if err := autoConvert_v1alpha2_InitConfiguration_To_kubeadm_InitConfiguration(in, out, s); err != nil {
return err return err
} }
@ -53,8 +53,8 @@ func Convert_v1alpha2_MasterConfiguration_To_kubeadm_MasterConfiguration(in *Mas
return nil return nil
} }
func Convert_kubeadm_MasterConfiguration_To_v1alpha2_MasterConfiguration(in *kubeadm.MasterConfiguration, out *MasterConfiguration, s conversion.Scope) error { func Convert_kubeadm_InitConfiguration_To_v1alpha2_InitConfiguration(in *kubeadm.InitConfiguration, out *InitConfiguration, s conversion.Scope) error {
if err := autoConvert_kubeadm_MasterConfiguration_To_v1alpha2_MasterConfiguration(in, out, s); err != nil { if err := autoConvert_kubeadm_InitConfiguration_To_v1alpha2_InitConfiguration(in, out, s); err != nil {
return err return err
} }

View File

@ -75,8 +75,8 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error {
return RegisterDefaults(scheme) return RegisterDefaults(scheme)
} }
// SetDefaults_MasterConfiguration assigns default values to Master node // SetDefaults_InitConfiguration assigns default values to Master node
func SetDefaults_MasterConfiguration(obj *MasterConfiguration) { func SetDefaults_InitConfiguration(obj *InitConfiguration) {
if obj.KubernetesVersion == "" { if obj.KubernetesVersion == "" {
obj.KubernetesVersion = DefaultKubernetesVersion obj.KubernetesVersion = DefaultKubernetesVersion
} }
@ -114,7 +114,7 @@ func SetDefaults_MasterConfiguration(obj *MasterConfiguration) {
} }
// SetDefaults_Etcd assigns default values for the Proxy // SetDefaults_Etcd assigns default values for the Proxy
func SetDefaults_Etcd(obj *MasterConfiguration) { func SetDefaults_Etcd(obj *InitConfiguration) {
if obj.Etcd.External == nil && obj.Etcd.Local == nil { if obj.Etcd.External == nil && obj.Etcd.Local == nil {
obj.Etcd.Local = &LocalEtcd{} obj.Etcd.Local = &LocalEtcd{}
} }
@ -126,7 +126,7 @@ func SetDefaults_Etcd(obj *MasterConfiguration) {
} }
// SetDefaults_ProxyConfiguration assigns default values for the Proxy // SetDefaults_ProxyConfiguration assigns default values for the Proxy
func SetDefaults_ProxyConfiguration(obj *MasterConfiguration) { func SetDefaults_ProxyConfiguration(obj *InitConfiguration) {
// IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/componentconfig/defaults.go // IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/componentconfig/defaults.go
// and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go. // and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go.
if obj.KubeProxy.Config == nil { if obj.KubeProxy.Config == nil {
@ -174,7 +174,7 @@ func SetDefaults_NodeConfiguration(obj *NodeConfiguration) {
} }
// SetDefaults_KubeletConfiguration assigns default values to kubelet // SetDefaults_KubeletConfiguration assigns default values to kubelet
func SetDefaults_KubeletConfiguration(obj *MasterConfiguration) { func SetDefaults_KubeletConfiguration(obj *InitConfiguration) {
// IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/componentconfig/defaults.go // IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/componentconfig/defaults.go
// and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go. // and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go.
if obj.KubeletConfiguration.BaseConfig == nil { if obj.KubeletConfiguration.BaseConfig == nil {
@ -231,7 +231,7 @@ func SetDefaults_NodeRegistrationOptions(obj *NodeRegistrationOptions) {
} }
// SetDefaults_AuditPolicyConfiguration sets default values for the AuditPolicyConfiguration // SetDefaults_AuditPolicyConfiguration sets default values for the AuditPolicyConfiguration
func SetDefaults_AuditPolicyConfiguration(obj *MasterConfiguration) { func SetDefaults_AuditPolicyConfiguration(obj *InitConfiguration) {
if obj.AuditPolicyConfiguration.LogDir == "" { if obj.AuditPolicyConfiguration.LogDir == "" {
obj.AuditPolicyConfiguration.LogDir = constants.StaticPodAuditPolicyLogDir obj.AuditPolicyConfiguration.LogDir = constants.StaticPodAuditPolicyLogDir
} }
@ -245,7 +245,7 @@ func SetDefaults_AuditPolicyConfiguration(obj *MasterConfiguration) {
// through the slice and sets the defaults for the omitempty fields that are TTL, // through the slice and sets the defaults for the omitempty fields that are TTL,
// Usages and Groups. Token is NOT defaulted with a random one in the API defaulting // Usages and Groups. Token is NOT defaulted with a random one in the API defaulting
// layer, but set to a random value later at runtime if not set before. // layer, but set to a random value later at runtime if not set before.
func SetDefaults_BootstrapTokens(obj *MasterConfiguration) { func SetDefaults_BootstrapTokens(obj *InitConfiguration) {
if obj.BootstrapTokens == nil || len(obj.BootstrapTokens) == 0 { if obj.BootstrapTokens == nil || len(obj.BootstrapTokens) == 0 {
obj.BootstrapTokens = []BootstrapToken{{}} obj.BootstrapTokens = []BootstrapToken{{}}

View File

@ -58,7 +58,7 @@ func Resource(resource string) schema.GroupResource {
func addKnownTypes(scheme *runtime.Scheme) error { func addKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(SchemeGroupVersion, scheme.AddKnownTypes(SchemeGroupVersion,
&MasterConfiguration{}, &InitConfiguration{},
&NodeConfiguration{}, &NodeConfiguration{},
) )
metav1.AddToGroupVersion(scheme, SchemeGroupVersion) metav1.AddToGroupVersion(scheme, SchemeGroupVersion)

View File

@ -25,9 +25,9 @@ import (
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// MasterConfiguration contains a list of elements which make up master's // InitConfiguration contains a list of elements which make up master's
// configuration object. // configuration object.
type MasterConfiguration struct { type InitConfiguration struct {
metav1.TypeMeta `json:",inline"` metav1.TypeMeta `json:",inline"`
// `kubeadm init`-only information. These fields are solely used the first time `kubeadm init` runs. // `kubeadm init`-only information. These fields are solely used the first time `kubeadm init` runs.

View File

@ -54,8 +54,8 @@ func RegisterConversions(scheme *runtime.Scheme) error {
Convert_kubeadm_HostPathMount_To_v1alpha2_HostPathMount, Convert_kubeadm_HostPathMount_To_v1alpha2_HostPathMount,
Convert_v1alpha2_LocalEtcd_To_kubeadm_LocalEtcd, Convert_v1alpha2_LocalEtcd_To_kubeadm_LocalEtcd,
Convert_kubeadm_LocalEtcd_To_v1alpha2_LocalEtcd, Convert_kubeadm_LocalEtcd_To_v1alpha2_LocalEtcd,
Convert_v1alpha2_MasterConfiguration_To_kubeadm_MasterConfiguration, Convert_v1alpha2_InitConfiguration_To_kubeadm_InitConfiguration,
Convert_kubeadm_MasterConfiguration_To_v1alpha2_MasterConfiguration, Convert_kubeadm_InitConfiguration_To_v1alpha2_InitConfiguration,
Convert_v1alpha2_Networking_To_kubeadm_Networking, Convert_v1alpha2_Networking_To_kubeadm_Networking,
Convert_kubeadm_Networking_To_v1alpha2_Networking, Convert_kubeadm_Networking_To_v1alpha2_Networking,
Convert_v1alpha2_NodeConfiguration_To_kubeadm_NodeConfiguration, Convert_v1alpha2_NodeConfiguration_To_kubeadm_NodeConfiguration,
@ -269,7 +269,7 @@ func Convert_kubeadm_LocalEtcd_To_v1alpha2_LocalEtcd(in *kubeadm.LocalEtcd, out
return autoConvert_kubeadm_LocalEtcd_To_v1alpha2_LocalEtcd(in, out, s) return autoConvert_kubeadm_LocalEtcd_To_v1alpha2_LocalEtcd(in, out, s)
} }
func autoConvert_v1alpha2_MasterConfiguration_To_kubeadm_MasterConfiguration(in *MasterConfiguration, out *kubeadm.MasterConfiguration, s conversion.Scope) error { func autoConvert_v1alpha2_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConfiguration, out *kubeadm.InitConfiguration, s conversion.Scope) error {
out.BootstrapTokens = *(*[]kubeadm.BootstrapToken)(unsafe.Pointer(&in.BootstrapTokens)) out.BootstrapTokens = *(*[]kubeadm.BootstrapToken)(unsafe.Pointer(&in.BootstrapTokens))
if err := Convert_v1alpha2_NodeRegistrationOptions_To_kubeadm_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil { if err := Convert_v1alpha2_NodeRegistrationOptions_To_kubeadm_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil {
return err return err
@ -304,7 +304,7 @@ func autoConvert_v1alpha2_MasterConfiguration_To_kubeadm_MasterConfiguration(in
return nil return nil
} }
func autoConvert_kubeadm_MasterConfiguration_To_v1alpha2_MasterConfiguration(in *kubeadm.MasterConfiguration, out *MasterConfiguration, s conversion.Scope) error { func autoConvert_kubeadm_InitConfiguration_To_v1alpha2_InitConfiguration(in *kubeadm.InitConfiguration, out *InitConfiguration, s conversion.Scope) error {
out.BootstrapTokens = *(*[]BootstrapToken)(unsafe.Pointer(&in.BootstrapTokens)) out.BootstrapTokens = *(*[]BootstrapToken)(unsafe.Pointer(&in.BootstrapTokens))
if err := Convert_kubeadm_NodeRegistrationOptions_To_v1alpha2_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil { if err := Convert_kubeadm_NodeRegistrationOptions_To_v1alpha2_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil {
return err return err

View File

@ -260,7 +260,7 @@ func (in *LocalEtcd) DeepCopy() *LocalEtcd {
} }
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *MasterConfiguration) DeepCopyInto(out *MasterConfiguration) { func (in *InitConfiguration) DeepCopyInto(out *InitConfiguration) {
*out = *in *out = *in
out.TypeMeta = in.TypeMeta out.TypeMeta = in.TypeMeta
if in.BootstrapTokens != nil { if in.BootstrapTokens != nil {
@ -328,18 +328,18 @@ func (in *MasterConfiguration) DeepCopyInto(out *MasterConfiguration) {
return return
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterConfiguration. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InitConfiguration.
func (in *MasterConfiguration) DeepCopy() *MasterConfiguration { func (in *InitConfiguration) DeepCopy() *InitConfiguration {
if in == nil { if in == nil {
return nil return nil
} }
out := new(MasterConfiguration) out := new(InitConfiguration)
in.DeepCopyInto(out) in.DeepCopyInto(out)
return out return out
} }
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *MasterConfiguration) DeepCopyObject() runtime.Object { func (in *InitConfiguration) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil { if c := in.DeepCopy(); c != nil {
return c return c
} }

View File

@ -30,13 +30,13 @@ import (
// Public to allow building arbitrary schemes. // Public to allow building arbitrary schemes.
// All generated defaulters are covering - they call all nested defaulters. // All generated defaulters are covering - they call all nested defaulters.
func RegisterDefaults(scheme *runtime.Scheme) error { func RegisterDefaults(scheme *runtime.Scheme) error {
scheme.AddTypeDefaultingFunc(&MasterConfiguration{}, func(obj interface{}) { SetObjectDefaults_MasterConfiguration(obj.(*MasterConfiguration)) }) scheme.AddTypeDefaultingFunc(&InitConfiguration{}, func(obj interface{}) { SetObjectDefaults_InitConfiguration(obj.(*InitConfiguration)) })
scheme.AddTypeDefaultingFunc(&NodeConfiguration{}, func(obj interface{}) { SetObjectDefaults_NodeConfiguration(obj.(*NodeConfiguration)) }) scheme.AddTypeDefaultingFunc(&NodeConfiguration{}, func(obj interface{}) { SetObjectDefaults_NodeConfiguration(obj.(*NodeConfiguration)) })
return nil return nil
} }
func SetObjectDefaults_MasterConfiguration(in *MasterConfiguration) { func SetObjectDefaults_InitConfiguration(in *InitConfiguration) {
SetDefaults_MasterConfiguration(in) SetDefaults_InitConfiguration(in)
for i := range in.BootstrapTokens { for i := range in.BootstrapTokens {
a := &in.BootstrapTokens[i] a := &in.BootstrapTokens[i]
SetDefaults_BootstrapToken(a) SetDefaults_BootstrapToken(a)

View File

@ -28,8 +28,8 @@ import (
kubeproxyconfigv1alpha1 "k8s.io/kubernetes/pkg/proxy/apis/kubeproxyconfig/v1alpha1" kubeproxyconfigv1alpha1 "k8s.io/kubernetes/pkg/proxy/apis/kubeproxyconfig/v1alpha1"
) )
func Convert_v1alpha3_MasterConfiguration_To_kubeadm_MasterConfiguration(in *MasterConfiguration, out *kubeadm.MasterConfiguration, s conversion.Scope) error { func Convert_v1alpha3_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConfiguration, out *kubeadm.InitConfiguration, s conversion.Scope) error {
if err := autoConvert_v1alpha3_MasterConfiguration_To_kubeadm_MasterConfiguration(in, out, s); err != nil { if err := autoConvert_v1alpha3_InitConfiguration_To_kubeadm_InitConfiguration(in, out, s); err != nil {
return err return err
} }
@ -60,7 +60,7 @@ func Convert_v1alpha3_MasterConfiguration_To_kubeadm_MasterConfiguration(in *Mas
return nil return nil
} }
func defaultKubeProxyConfiguration(internalcfg *MasterConfiguration, obj *kubeproxyconfig.KubeProxyConfiguration) { func defaultKubeProxyConfiguration(internalcfg *InitConfiguration, obj *kubeproxyconfig.KubeProxyConfiguration) {
// NOTE: This code should be mirrored from cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go and cmd/kubeadm/app/componentconfig/defaults.go // NOTE: This code should be mirrored from cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go and cmd/kubeadm/app/componentconfig/defaults.go
if obj.ClusterCIDR == "" && internalcfg.Networking.PodSubnet != "" { if obj.ClusterCIDR == "" && internalcfg.Networking.PodSubnet != "" {
obj.ClusterCIDR = internalcfg.Networking.PodSubnet obj.ClusterCIDR = internalcfg.Networking.PodSubnet
@ -71,7 +71,7 @@ func defaultKubeProxyConfiguration(internalcfg *MasterConfiguration, obj *kubepr
} }
} }
func defaultKubeletConfiguration(internalcfg *MasterConfiguration, obj *kubeletconfig.KubeletConfiguration) { func defaultKubeletConfiguration(internalcfg *InitConfiguration, obj *kubeletconfig.KubeletConfiguration) {
// NOTE: This code should be mirrored from cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go and cmd/kubeadm/app/componentconfig/defaults.go // NOTE: This code should be mirrored from cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go and cmd/kubeadm/app/componentconfig/defaults.go
if obj.StaticPodPath == "" { if obj.StaticPodPath == "" {
obj.StaticPodPath = DefaultManifestsDir obj.StaticPodPath = DefaultManifestsDir

View File

@ -67,8 +67,8 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error {
return RegisterDefaults(scheme) return RegisterDefaults(scheme)
} }
// SetDefaults_MasterConfiguration assigns default values to Master node // SetDefaults_InitConfiguration assigns default values to Master node
func SetDefaults_MasterConfiguration(obj *MasterConfiguration) { func SetDefaults_InitConfiguration(obj *InitConfiguration) {
if obj.KubernetesVersion == "" { if obj.KubernetesVersion == "" {
obj.KubernetesVersion = DefaultKubernetesVersion obj.KubernetesVersion = DefaultKubernetesVersion
} }
@ -104,7 +104,7 @@ func SetDefaults_MasterConfiguration(obj *MasterConfiguration) {
} }
// SetDefaults_Etcd assigns default values for the Proxy // SetDefaults_Etcd assigns default values for the Proxy
func SetDefaults_Etcd(obj *MasterConfiguration) { func SetDefaults_Etcd(obj *InitConfiguration) {
if obj.Etcd.External == nil && obj.Etcd.Local == nil { if obj.Etcd.External == nil && obj.Etcd.Local == nil {
obj.Etcd.Local = &LocalEtcd{} obj.Etcd.Local = &LocalEtcd{}
} }
@ -152,7 +152,7 @@ func SetDefaults_NodeRegistrationOptions(obj *NodeRegistrationOptions) {
} }
// SetDefaults_AuditPolicyConfiguration sets default values for the AuditPolicyConfiguration // SetDefaults_AuditPolicyConfiguration sets default values for the AuditPolicyConfiguration
func SetDefaults_AuditPolicyConfiguration(obj *MasterConfiguration) { func SetDefaults_AuditPolicyConfiguration(obj *InitConfiguration) {
if obj.AuditPolicyConfiguration.LogDir == "" { if obj.AuditPolicyConfiguration.LogDir == "" {
obj.AuditPolicyConfiguration.LogDir = constants.StaticPodAuditPolicyLogDir obj.AuditPolicyConfiguration.LogDir = constants.StaticPodAuditPolicyLogDir
} }
@ -166,7 +166,7 @@ func SetDefaults_AuditPolicyConfiguration(obj *MasterConfiguration) {
// through the slice and sets the defaults for the omitempty fields that are TTL, // through the slice and sets the defaults for the omitempty fields that are TTL,
// Usages and Groups. Token is NOT defaulted with a random one in the API defaulting // Usages and Groups. Token is NOT defaulted with a random one in the API defaulting
// layer, but set to a random value later at runtime if not set before. // layer, but set to a random value later at runtime if not set before.
func SetDefaults_BootstrapTokens(obj *MasterConfiguration) { func SetDefaults_BootstrapTokens(obj *InitConfiguration) {
if obj.BootstrapTokens == nil || len(obj.BootstrapTokens) == 0 { if obj.BootstrapTokens == nil || len(obj.BootstrapTokens) == 0 {
obj.BootstrapTokens = []BootstrapToken{{}} obj.BootstrapTokens = []BootstrapToken{{}}

View File

@ -58,7 +58,7 @@ func Resource(resource string) schema.GroupResource {
func addKnownTypes(scheme *runtime.Scheme) error { func addKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(SchemeGroupVersion, scheme.AddKnownTypes(SchemeGroupVersion,
&MasterConfiguration{}, &InitConfiguration{},
&NodeConfiguration{}, &NodeConfiguration{},
) )
metav1.AddToGroupVersion(scheme, SchemeGroupVersion) metav1.AddToGroupVersion(scheme, SchemeGroupVersion)

View File

@ -23,9 +23,9 @@ import (
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// MasterConfiguration contains a list of elements which make up master's // InitConfiguration contains a list of elements which make up master's
// configuration object. // configuration object.
type MasterConfiguration struct { type InitConfiguration struct {
metav1.TypeMeta `json:",inline"` metav1.TypeMeta `json:",inline"`
// `kubeadm init`-only information. These fields are solely used the first time `kubeadm init` runs. // `kubeadm init`-only information. These fields are solely used the first time `kubeadm init` runs.

View File

@ -54,8 +54,8 @@ func RegisterConversions(scheme *runtime.Scheme) error {
Convert_kubeadm_HostPathMount_To_v1alpha3_HostPathMount, Convert_kubeadm_HostPathMount_To_v1alpha3_HostPathMount,
Convert_v1alpha3_LocalEtcd_To_kubeadm_LocalEtcd, Convert_v1alpha3_LocalEtcd_To_kubeadm_LocalEtcd,
Convert_kubeadm_LocalEtcd_To_v1alpha3_LocalEtcd, Convert_kubeadm_LocalEtcd_To_v1alpha3_LocalEtcd,
Convert_v1alpha3_MasterConfiguration_To_kubeadm_MasterConfiguration, Convert_v1alpha3_InitConfiguration_To_kubeadm_InitConfiguration,
Convert_kubeadm_MasterConfiguration_To_v1alpha3_MasterConfiguration, Convert_kubeadm_InitConfiguration_To_v1alpha3_InitConfiguration,
Convert_v1alpha3_Networking_To_kubeadm_Networking, Convert_v1alpha3_Networking_To_kubeadm_Networking,
Convert_kubeadm_Networking_To_v1alpha3_Networking, Convert_kubeadm_Networking_To_v1alpha3_Networking,
Convert_v1alpha3_NodeConfiguration_To_kubeadm_NodeConfiguration, Convert_v1alpha3_NodeConfiguration_To_kubeadm_NodeConfiguration,
@ -269,7 +269,7 @@ func Convert_kubeadm_LocalEtcd_To_v1alpha3_LocalEtcd(in *kubeadm.LocalEtcd, out
return autoConvert_kubeadm_LocalEtcd_To_v1alpha3_LocalEtcd(in, out, s) return autoConvert_kubeadm_LocalEtcd_To_v1alpha3_LocalEtcd(in, out, s)
} }
func autoConvert_v1alpha3_MasterConfiguration_To_kubeadm_MasterConfiguration(in *MasterConfiguration, out *kubeadm.MasterConfiguration, s conversion.Scope) error { func autoConvert_v1alpha3_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConfiguration, out *kubeadm.InitConfiguration, s conversion.Scope) error {
out.BootstrapTokens = *(*[]kubeadm.BootstrapToken)(unsafe.Pointer(&in.BootstrapTokens)) out.BootstrapTokens = *(*[]kubeadm.BootstrapToken)(unsafe.Pointer(&in.BootstrapTokens))
if err := Convert_v1alpha3_NodeRegistrationOptions_To_kubeadm_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil { if err := Convert_v1alpha3_NodeRegistrationOptions_To_kubeadm_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil {
return err return err
@ -302,7 +302,7 @@ func autoConvert_v1alpha3_MasterConfiguration_To_kubeadm_MasterConfiguration(in
return nil return nil
} }
func autoConvert_kubeadm_MasterConfiguration_To_v1alpha3_MasterConfiguration(in *kubeadm.MasterConfiguration, out *MasterConfiguration, s conversion.Scope) error { func autoConvert_kubeadm_InitConfiguration_To_v1alpha3_InitConfiguration(in *kubeadm.InitConfiguration, out *InitConfiguration, s conversion.Scope) error {
out.BootstrapTokens = *(*[]BootstrapToken)(unsafe.Pointer(&in.BootstrapTokens)) out.BootstrapTokens = *(*[]BootstrapToken)(unsafe.Pointer(&in.BootstrapTokens))
if err := Convert_kubeadm_NodeRegistrationOptions_To_v1alpha3_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil { if err := Convert_kubeadm_NodeRegistrationOptions_To_v1alpha3_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil {
return err return err
@ -337,9 +337,9 @@ func autoConvert_kubeadm_MasterConfiguration_To_v1alpha3_MasterConfiguration(in
return nil return nil
} }
// Convert_kubeadm_MasterConfiguration_To_v1alpha3_MasterConfiguration is an autogenerated conversion function. // Convert_kubeadm_InitConfiguration_To_v1alpha3_InitConfiguration is an autogenerated conversion function.
func Convert_kubeadm_MasterConfiguration_To_v1alpha3_MasterConfiguration(in *kubeadm.MasterConfiguration, out *MasterConfiguration, s conversion.Scope) error { func Convert_kubeadm_InitConfiguration_To_v1alpha3_InitConfiguration(in *kubeadm.InitConfiguration, out *InitConfiguration, s conversion.Scope) error {
return autoConvert_kubeadm_MasterConfiguration_To_v1alpha3_MasterConfiguration(in, out, s) return autoConvert_kubeadm_InitConfiguration_To_v1alpha3_InitConfiguration(in, out, s)
} }
func autoConvert_v1alpha3_Networking_To_kubeadm_Networking(in *Networking, out *kubeadm.Networking, s conversion.Scope) error { func autoConvert_v1alpha3_Networking_To_kubeadm_Networking(in *Networking, out *kubeadm.Networking, s conversion.Scope) error {

View File

@ -216,7 +216,7 @@ func (in *LocalEtcd) DeepCopy() *LocalEtcd {
} }
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *MasterConfiguration) DeepCopyInto(out *MasterConfiguration) { func (in *InitConfiguration) DeepCopyInto(out *InitConfiguration) {
*out = *in *out = *in
out.TypeMeta = in.TypeMeta out.TypeMeta = in.TypeMeta
if in.BootstrapTokens != nil { if in.BootstrapTokens != nil {
@ -282,18 +282,18 @@ func (in *MasterConfiguration) DeepCopyInto(out *MasterConfiguration) {
return return
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterConfiguration. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InitConfiguration.
func (in *MasterConfiguration) DeepCopy() *MasterConfiguration { func (in *InitConfiguration) DeepCopy() *InitConfiguration {
if in == nil { if in == nil {
return nil return nil
} }
out := new(MasterConfiguration) out := new(InitConfiguration)
in.DeepCopyInto(out) in.DeepCopyInto(out)
return out return out
} }
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *MasterConfiguration) DeepCopyObject() runtime.Object { func (in *InitConfiguration) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil { if c := in.DeepCopy(); c != nil {
return c return c
} }

View File

@ -28,13 +28,13 @@ import (
// Public to allow building arbitrary schemes. // Public to allow building arbitrary schemes.
// All generated defaulters are covering - they call all nested defaulters. // All generated defaulters are covering - they call all nested defaulters.
func RegisterDefaults(scheme *runtime.Scheme) error { func RegisterDefaults(scheme *runtime.Scheme) error {
scheme.AddTypeDefaultingFunc(&MasterConfiguration{}, func(obj interface{}) { SetObjectDefaults_MasterConfiguration(obj.(*MasterConfiguration)) }) scheme.AddTypeDefaultingFunc(&InitConfiguration{}, func(obj interface{}) { SetObjectDefaults_InitConfiguration(obj.(*InitConfiguration)) })
scheme.AddTypeDefaultingFunc(&NodeConfiguration{}, func(obj interface{}) { SetObjectDefaults_NodeConfiguration(obj.(*NodeConfiguration)) }) scheme.AddTypeDefaultingFunc(&NodeConfiguration{}, func(obj interface{}) { SetObjectDefaults_NodeConfiguration(obj.(*NodeConfiguration)) })
return nil return nil
} }
func SetObjectDefaults_MasterConfiguration(in *MasterConfiguration) { func SetObjectDefaults_InitConfiguration(in *InitConfiguration) {
SetDefaults_MasterConfiguration(in) SetDefaults_InitConfiguration(in)
for i := range in.BootstrapTokens { for i := range in.BootstrapTokens {
a := &in.BootstrapTokens[i] a := &in.BootstrapTokens[i]
SetDefaults_BootstrapToken(a) SetDefaults_BootstrapToken(a)

View File

@ -40,8 +40,8 @@ import (
"k8s.io/kubernetes/pkg/registry/core/service/ipallocator" "k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
) )
// ValidateMasterConfiguration validates master configuration and collects all encountered errors // ValidateInitConfiguration validates master configuration and collects all encountered errors
func ValidateMasterConfiguration(c *kubeadm.MasterConfiguration) field.ErrorList { func ValidateInitConfiguration(c *kubeadm.InitConfiguration) field.ErrorList {
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
allErrs = append(allErrs, ValidateNetworking(&c.Networking, field.NewPath("networking"))...) allErrs = append(allErrs, ValidateNetworking(&c.Networking, field.NewPath("networking"))...)
allErrs = append(allErrs, ValidateCertSANs(c.APIServerCertSANs, field.NewPath("apiServerCertSANs"))...) allErrs = append(allErrs, ValidateCertSANs(c.APIServerCertSANs, field.NewPath("apiServerCertSANs"))...)

View File

@ -219,17 +219,17 @@ func TestValidateIPNetFromString(t *testing.T) {
func TestValidateAPIEndpoint(t *testing.T) { func TestValidateAPIEndpoint(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
s *kubeadm.MasterConfiguration s *kubeadm.InitConfiguration
expected bool expected bool
}{ }{
{ {
name: "Missing configuration", name: "Missing configuration",
s: &kubeadm.MasterConfiguration{}, s: &kubeadm.InitConfiguration{},
expected: false, expected: false,
}, },
{ {
name: "Valid DNS ControlPlaneEndpoint (with port), AdvertiseAddress and default port", name: "Valid DNS ControlPlaneEndpoint (with port), AdvertiseAddress and default port",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "cp.k8s.io:8081", ControlPlaneEndpoint: "cp.k8s.io:8081",
AdvertiseAddress: "4.5.6.7", AdvertiseAddress: "4.5.6.7",
@ -240,7 +240,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Valid IPv4 ControlPlaneEndpoint (with port), AdvertiseAddress and default port", name: "Valid IPv4 ControlPlaneEndpoint (with port), AdvertiseAddress and default port",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "1.2.3.4:8081", ControlPlaneEndpoint: "1.2.3.4:8081",
AdvertiseAddress: "4.5.6.7", AdvertiseAddress: "4.5.6.7",
@ -251,7 +251,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Valid IPv6 ControlPlaneEndpoint (with port), ControlPlaneEndpoint and port", name: "Valid IPv6 ControlPlaneEndpoint (with port), ControlPlaneEndpoint and port",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "[2001:db7::1]:8081", ControlPlaneEndpoint: "[2001:db7::1]:8081",
AdvertiseAddress: "2001:db7::2", AdvertiseAddress: "2001:db7::2",
@ -262,7 +262,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Valid DNS ControlPlaneEndpoint (without port), AdvertiseAddress and default port", name: "Valid DNS ControlPlaneEndpoint (without port), AdvertiseAddress and default port",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "cp.k8s.io", ControlPlaneEndpoint: "cp.k8s.io",
AdvertiseAddress: "4.5.6.7", AdvertiseAddress: "4.5.6.7",
@ -273,7 +273,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Valid IPv4 ControlPlaneEndpoint (without port), AdvertiseAddress and default port", name: "Valid IPv4 ControlPlaneEndpoint (without port), AdvertiseAddress and default port",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "1.2.3.4", ControlPlaneEndpoint: "1.2.3.4",
AdvertiseAddress: "4.5.6.7", AdvertiseAddress: "4.5.6.7",
@ -284,7 +284,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Valid IPv6 ControlPlaneEndpoint (without port), ControlPlaneEndpoint and port", name: "Valid IPv6 ControlPlaneEndpoint (without port), ControlPlaneEndpoint and port",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "2001:db7::1", ControlPlaneEndpoint: "2001:db7::1",
AdvertiseAddress: "2001:db7::2", AdvertiseAddress: "2001:db7::2",
@ -295,7 +295,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Valid IPv4 AdvertiseAddress and default port", name: "Valid IPv4 AdvertiseAddress and default port",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
BindPort: 6443, BindPort: 6443,
@ -305,7 +305,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Valid IPv6 AdvertiseAddress and port", name: "Valid IPv6 AdvertiseAddress and port",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "2001:db7::1", AdvertiseAddress: "2001:db7::1",
BindPort: 3446, BindPort: 3446,
@ -315,7 +315,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Invalid IPv4 AdvertiseAddress", name: "Invalid IPv4 AdvertiseAddress",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "1.2.34", AdvertiseAddress: "1.2.34",
BindPort: 6443, BindPort: 6443,
@ -325,7 +325,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Invalid IPv6 AdvertiseAddress", name: "Invalid IPv6 AdvertiseAddress",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "2001:db7:1", AdvertiseAddress: "2001:db7:1",
BindPort: 3446, BindPort: 3446,
@ -335,7 +335,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Invalid BindPort", name: "Invalid BindPort",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
BindPort: 0, BindPort: 0,
@ -345,7 +345,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Invalid DNS ControlPlaneEndpoint", name: "Invalid DNS ControlPlaneEndpoint",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "bad!!.k8s.io", ControlPlaneEndpoint: "bad!!.k8s.io",
}, },
@ -354,7 +354,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Invalid ipv4 ControlPlaneEndpoint", name: "Invalid ipv4 ControlPlaneEndpoint",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "1..3.4", ControlPlaneEndpoint: "1..3.4",
}, },
@ -363,7 +363,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Invalid ipv6 ControlPlaneEndpoint", name: "Invalid ipv6 ControlPlaneEndpoint",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "1200::AB00:1234::2552:7777:1313", ControlPlaneEndpoint: "1200::AB00:1234::2552:7777:1313",
}, },
@ -372,7 +372,7 @@ func TestValidateAPIEndpoint(t *testing.T) {
}, },
{ {
name: "Invalid ControlPlaneEndpoint port", name: "Invalid ControlPlaneEndpoint port",
s: &kubeadm.MasterConfiguration{ s: &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
ControlPlaneEndpoint: "1.2.3.4:0", ControlPlaneEndpoint: "1.2.3.4:0",
}, },
@ -393,17 +393,17 @@ func TestValidateAPIEndpoint(t *testing.T) {
} }
} }
func TestValidateMasterConfiguration(t *testing.T) { func TestValidateInitConfiguration(t *testing.T) {
nodename := "valid-nodename" nodename := "valid-nodename"
var tests = []struct { var tests = []struct {
name string name string
s *kubeadm.MasterConfiguration s *kubeadm.InitConfiguration
expected bool expected bool
}{ }{
{"invalid missing master configuration", {"invalid missing master configuration",
&kubeadm.MasterConfiguration{}, false}, &kubeadm.InitConfiguration{}, false},
{"invalid missing token with IPv4 service subnet", {"invalid missing token with IPv4 service subnet",
&kubeadm.MasterConfiguration{ &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
BindPort: 6443, BindPort: 6443,
@ -416,7 +416,7 @@ func TestValidateMasterConfiguration(t *testing.T) {
NodeRegistration: kubeadm.NodeRegistrationOptions{Name: nodename, CRISocket: "/some/path"}, NodeRegistration: kubeadm.NodeRegistrationOptions{Name: nodename, CRISocket: "/some/path"},
}, false}, }, false},
{"invalid missing token with IPv6 service subnet", {"invalid missing token with IPv6 service subnet",
&kubeadm.MasterConfiguration{ &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
BindPort: 6443, BindPort: 6443,
@ -429,7 +429,7 @@ func TestValidateMasterConfiguration(t *testing.T) {
NodeRegistration: kubeadm.NodeRegistrationOptions{Name: nodename, CRISocket: "/some/path"}, NodeRegistration: kubeadm.NodeRegistrationOptions{Name: nodename, CRISocket: "/some/path"},
}, false}, }, false},
{"invalid missing node name", {"invalid missing node name",
&kubeadm.MasterConfiguration{ &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
BindPort: 6443, BindPort: 6443,
@ -441,7 +441,7 @@ func TestValidateMasterConfiguration(t *testing.T) {
CertificatesDir: "/some/other/cert/dir", CertificatesDir: "/some/other/cert/dir",
}, false}, }, false},
{"valid master configuration with incorrect IPv4 pod subnet", {"valid master configuration with incorrect IPv4 pod subnet",
&kubeadm.MasterConfiguration{ &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
BindPort: 6443, BindPort: 6443,
@ -455,7 +455,7 @@ func TestValidateMasterConfiguration(t *testing.T) {
NodeRegistration: kubeadm.NodeRegistrationOptions{Name: nodename, CRISocket: "/some/path"}, NodeRegistration: kubeadm.NodeRegistrationOptions{Name: nodename, CRISocket: "/some/path"},
}, false}, }, false},
{"valid master configuration with IPv4 service subnet", {"valid master configuration with IPv4 service subnet",
&kubeadm.MasterConfiguration{ &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
BindPort: 6443, BindPort: 6443,
@ -500,7 +500,7 @@ func TestValidateMasterConfiguration(t *testing.T) {
NodeRegistration: kubeadm.NodeRegistrationOptions{Name: nodename, CRISocket: "/some/path"}, NodeRegistration: kubeadm.NodeRegistrationOptions{Name: nodename, CRISocket: "/some/path"},
}, true}, }, true},
{"valid master configuration using IPv6 service subnet", {"valid master configuration using IPv6 service subnet",
&kubeadm.MasterConfiguration{ &kubeadm.InitConfiguration{
API: kubeadm.API{ API: kubeadm.API{
AdvertiseAddress: "1:2:3::4", AdvertiseAddress: "1:2:3::4",
BindPort: 3446, BindPort: 3446,
@ -545,7 +545,7 @@ func TestValidateMasterConfiguration(t *testing.T) {
}, true}, }, true},
} }
for _, rt := range tests { for _, rt := range tests {
actual := ValidateMasterConfiguration(rt.s) actual := ValidateInitConfiguration(rt.s)
if (len(actual) == 0) != rt.expected { if (len(actual) == 0) != rt.expected {
t.Errorf( t.Errorf(
"%s test case failed:\n\texpected: %t\n\t actual: %t", "%s test case failed:\n\texpected: %t\n\t actual: %t",

View File

@ -244,7 +244,7 @@ func (in *LocalEtcd) DeepCopy() *LocalEtcd {
} }
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *MasterConfiguration) DeepCopyInto(out *MasterConfiguration) { func (in *InitConfiguration) DeepCopyInto(out *InitConfiguration) {
*out = *in *out = *in
out.TypeMeta = in.TypeMeta out.TypeMeta = in.TypeMeta
if in.BootstrapTokens != nil { if in.BootstrapTokens != nil {
@ -311,18 +311,18 @@ func (in *MasterConfiguration) DeepCopyInto(out *MasterConfiguration) {
return return
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterConfiguration. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InitConfiguration.
func (in *MasterConfiguration) DeepCopy() *MasterConfiguration { func (in *InitConfiguration) DeepCopy() *InitConfiguration {
if in == nil { if in == nil {
return nil return nil
} }
out := new(MasterConfiguration) out := new(InitConfiguration)
in.DeepCopyInto(out) in.DeepCopyInto(out)
return out return out
} }
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *MasterConfiguration) DeepCopyObject() runtime.Object { func (in *InitConfiguration) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil { if c := in.DeepCopy(); c != nil {
return c return c
} }

View File

@ -47,7 +47,7 @@ import (
) )
var ( var (
availableAPIObjects = []string{constants.MasterConfigurationKind, constants.NodeConfigurationKind} availableAPIObjects = []string{constants.InitConfigurationKind, constants.NodeConfigurationKind}
// sillyToken is only set statically to make kubeadm not randomize the token on every run // sillyToken is only set statically to make kubeadm not randomize the token on every run
sillyToken = kubeadmapiv1alpha3.BootstrapToken{ sillyToken = kubeadmapiv1alpha3.BootstrapToken{
Token: &kubeadmapiv1alpha3.BootstrapTokenString{ Token: &kubeadmapiv1alpha3.BootstrapTokenString{
@ -69,7 +69,7 @@ func NewCmdConfig(out io.Writer) *cobra.Command {
cluster. kubeadm CLI v1.8.0+ automatically creates this ConfigMap with the config used with 'kubeadm init', but if you cluster. kubeadm CLI v1.8.0+ automatically creates this ConfigMap with the config used with 'kubeadm init', but if you
initialized your cluster using kubeadm v1.7.x or lower, you must use the 'config upload' command to create this initialized your cluster using kubeadm v1.7.x or lower, you must use the 'config upload' command to create this
ConfigMap. This is required so that 'kubeadm upgrade' can configure your upgraded cluster correctly. ConfigMap. This is required so that 'kubeadm upgrade' can configure your upgraded cluster correctly.
`), metav1.NamespaceSystem, constants.MasterConfigurationConfigMap), `), metav1.NamespaceSystem, constants.InitConfigurationConfigMap),
// Without this callback, if a user runs just the "upload" // Without this callback, if a user runs just the "upload"
// command without a subcommand, or with an invalid subcommand, // command without a subcommand, or with an invalid subcommand,
// cobra will print usage information, but still exit cleanly. // cobra will print usage information, but still exit cleanly.
@ -97,7 +97,7 @@ func NewCmdConfigPrintDefault(out io.Writer) *cobra.Command {
Aliases: []string{"print-defaults"}, Aliases: []string{"print-defaults"},
Short: "Print the default values for a kubeadm configuration object.", Short: "Print the default values for a kubeadm configuration object.",
Long: fmt.Sprintf(dedent.Dedent(` Long: fmt.Sprintf(dedent.Dedent(`
This command prints the default MasterConfiguration object that is used for 'kubeadm init' and 'kubeadm upgrade', This command prints the default InitConfiguration object that is used for 'kubeadm init' and 'kubeadm upgrade',
and the default NodeConfiguration object that is used for 'kubeadm join'. and the default NodeConfiguration object that is used for 'kubeadm join'.
Note that sensitive values like the Bootstrap Token fields are replaced with silly values like %q in order to pass validation but Note that sensitive values like the Bootstrap Token fields are replaced with silly values like %q in order to pass validation but
@ -125,8 +125,8 @@ func getDefaultAPIObjectBytes(apiObject string) ([]byte, error) {
var internalcfg runtime.Object var internalcfg runtime.Object
var err error var err error
switch apiObject { switch apiObject {
case constants.MasterConfigurationKind: case constants.InitConfigurationKind:
internalcfg, err = configutil.ConfigFileAndDefaultsToInternalConfig("", &kubeadmapiv1alpha3.MasterConfiguration{ internalcfg, err = configutil.ConfigFileAndDefaultsToInternalConfig("", &kubeadmapiv1alpha3.InitConfiguration{
API: kubeadmapiv1alpha3.API{AdvertiseAddress: "1.2.3.4"}, API: kubeadmapiv1alpha3.API{AdvertiseAddress: "1.2.3.4"},
BootstrapTokens: []kubeadmapiv1alpha3.BootstrapToken{sillyToken}, BootstrapTokens: []kubeadmapiv1alpha3.BootstrapToken{sillyToken},
KubernetesVersion: fmt.Sprintf("v1.%d.0", constants.MinimumControlPlaneVersion.Minor()+1), KubernetesVersion: fmt.Sprintf("v1.%d.0", constants.MinimumControlPlaneVersion.Minor()+1),
@ -215,7 +215,7 @@ func NewCmdConfigView(out io.Writer, kubeConfigFile *string) *cobra.Command {
Using this command, you can view the ConfigMap in the cluster where the configuration for kubeadm is located. Using this command, you can view the ConfigMap in the cluster where the configuration for kubeadm is located.
The configuration is located in the %q namespace in the %q ConfigMap. The configuration is located in the %q namespace in the %q ConfigMap.
`), metav1.NamespaceSystem, constants.MasterConfigurationConfigMap), `), metav1.NamespaceSystem, constants.InitConfigurationConfigMap),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
glog.V(1).Infoln("[config] retrieving ClientSet from file") glog.V(1).Infoln("[config] retrieving ClientSet from file")
client, err := kubeconfigutil.ClientSetFromFile(*kubeConfigFile) client, err := kubeconfigutil.ClientSetFromFile(*kubeConfigFile)
@ -240,7 +240,7 @@ func NewCmdConfigUploadFromFile(out io.Writer, kubeConfigFile *string) *cobra.Co
same config file before upgrading to v1.8 using 'kubeadm upgrade'. same config file before upgrading to v1.8 using 'kubeadm upgrade'.
The configuration is located in the %q namespace in the %q ConfigMap. The configuration is located in the %q namespace in the %q ConfigMap.
`), metav1.NamespaceSystem, constants.MasterConfigurationConfigMap), `), metav1.NamespaceSystem, constants.InitConfigurationConfigMap),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
if len(cfgPath) == 0 { if len(cfgPath) == 0 {
kubeadmutil.CheckErr(fmt.Errorf("The --config flag is mandatory")) kubeadmutil.CheckErr(fmt.Errorf("The --config flag is mandatory"))
@ -252,7 +252,7 @@ func NewCmdConfigUploadFromFile(out io.Writer, kubeConfigFile *string) *cobra.Co
// The default configuration is empty; everything should come from the file on disk // The default configuration is empty; everything should come from the file on disk
glog.V(1).Infoln("[config] creating empty default configuration") glog.V(1).Infoln("[config] creating empty default configuration")
defaultcfg := &kubeadmapiv1alpha3.MasterConfiguration{} defaultcfg := &kubeadmapiv1alpha3.InitConfiguration{}
// Upload the configuration using the file; don't care about the defaultcfg really // Upload the configuration using the file; don't care about the defaultcfg really
glog.V(1).Infof("[config] uploading configuration") glog.V(1).Infof("[config] uploading configuration")
err = uploadConfiguration(client, cfgPath, defaultcfg) err = uploadConfiguration(client, cfgPath, defaultcfg)
@ -265,7 +265,7 @@ func NewCmdConfigUploadFromFile(out io.Writer, kubeConfigFile *string) *cobra.Co
// NewCmdConfigUploadFromFlags returns cobra.Command for "kubeadm config upload from-flags" command // NewCmdConfigUploadFromFlags returns cobra.Command for "kubeadm config upload from-flags" command
func NewCmdConfigUploadFromFlags(out io.Writer, kubeConfigFile *string) *cobra.Command { func NewCmdConfigUploadFromFlags(out io.Writer, kubeConfigFile *string) *cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{} cfg := &kubeadmapiv1alpha3.InitConfiguration{}
kubeadmscheme.Scheme.Default(cfg) kubeadmscheme.Scheme.Default(cfg)
var featureGatesString string var featureGatesString string
@ -279,7 +279,7 @@ func NewCmdConfigUploadFromFlags(out io.Writer, kubeConfigFile *string) *cobra.C
same flags before upgrading to v1.8 using 'kubeadm upgrade'. same flags before upgrading to v1.8 using 'kubeadm upgrade'.
The configuration is located in the %q namespace in the %q ConfigMap. The configuration is located in the %q namespace in the %q ConfigMap.
`), metav1.NamespaceSystem, constants.MasterConfigurationConfigMap), `), metav1.NamespaceSystem, constants.InitConfigurationConfigMap),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
var err error var err error
glog.V(1).Infoln("[config] creating new FeatureGates") glog.V(1).Infoln("[config] creating new FeatureGates")
@ -305,17 +305,17 @@ func NewCmdConfigUploadFromFlags(out io.Writer, kubeConfigFile *string) *cobra.C
func RunConfigView(out io.Writer, client clientset.Interface) error { func RunConfigView(out io.Writer, client clientset.Interface) error {
glog.V(1).Infoln("[config] getting the cluster configuration") glog.V(1).Infoln("[config] getting the cluster configuration")
cfgConfigMap, err := client.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(constants.MasterConfigurationConfigMap, metav1.GetOptions{}) cfgConfigMap, err := client.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(constants.InitConfigurationConfigMap, metav1.GetOptions{})
if err != nil { if err != nil {
return err return err
} }
// No need to append \n as that already exists in the ConfigMap // No need to append \n as that already exists in the ConfigMap
fmt.Fprintf(out, "%s", cfgConfigMap.Data[constants.MasterConfigurationConfigMapKey]) fmt.Fprintf(out, "%s", cfgConfigMap.Data[constants.InitConfigurationConfigMapKey])
return nil return nil
} }
// uploadConfiguration handles the uploading of the configuration internally // uploadConfiguration handles the uploading of the configuration internally
func uploadConfiguration(client clientset.Interface, cfgPath string, defaultcfg *kubeadmapiv1alpha3.MasterConfiguration) error { func uploadConfiguration(client clientset.Interface, cfgPath string, defaultcfg *kubeadmapiv1alpha3.InitConfiguration) error {
// Default both statically and dynamically, convert to internal API type, and validate everything // Default both statically and dynamically, convert to internal API type, and validate everything
// First argument is unset here as we shouldn't load a config file from disk // First argument is unset here as we shouldn't load a config file from disk
@ -343,7 +343,7 @@ func NewCmdConfigImages(out io.Writer) *cobra.Command {
// NewCmdConfigImagesPull returns the `kubeadm config images pull` command // NewCmdConfigImagesPull returns the `kubeadm config images pull` command
func NewCmdConfigImagesPull() *cobra.Command { func NewCmdConfigImagesPull() *cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{} cfg := &kubeadmapiv1alpha3.InitConfiguration{}
kubeadmscheme.Scheme.Default(cfg) kubeadmscheme.Scheme.Default(cfg)
var cfgPath, featureGatesString string var cfgPath, featureGatesString string
var err error var err error
@ -395,7 +395,7 @@ func (ip *ImagesPull) PullAll() error {
// NewCmdConfigImagesList returns the "kubeadm config images list" command // NewCmdConfigImagesList returns the "kubeadm config images list" command
func NewCmdConfigImagesList(out io.Writer, mockK8sVersion *string) *cobra.Command { func NewCmdConfigImagesList(out io.Writer, mockK8sVersion *string) *cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{} cfg := &kubeadmapiv1alpha3.InitConfiguration{}
kubeadmscheme.Scheme.Default(cfg) kubeadmscheme.Scheme.Default(cfg)
var cfgPath, featureGatesString string var cfgPath, featureGatesString string
var err error var err error
@ -423,7 +423,7 @@ func NewCmdConfigImagesList(out io.Writer, mockK8sVersion *string) *cobra.Comman
} }
// NewImagesList returns the underlying struct for the "kubeadm config images list" command // NewImagesList returns the underlying struct for the "kubeadm config images list" command
func NewImagesList(cfgPath string, cfg *kubeadmapiv1alpha3.MasterConfiguration) (*ImagesList, error) { func NewImagesList(cfgPath string, cfg *kubeadmapiv1alpha3.InitConfiguration) (*ImagesList, error) {
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, cfg) internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, cfg)
if err != nil { if err != nil {
return nil, fmt.Errorf("could not convert cfg to an internal cfg: %v", err) return nil, fmt.Errorf("could not convert cfg to an internal cfg: %v", err)
@ -436,7 +436,7 @@ func NewImagesList(cfgPath string, cfg *kubeadmapiv1alpha3.MasterConfiguration)
// ImagesList defines the struct used for "kubeadm config images list" // ImagesList defines the struct used for "kubeadm config images list"
type ImagesList struct { type ImagesList struct {
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
} }
// Run runs the images command and writes the result to the io.Writer passed in // Run runs the images command and writes the result to the io.Writer passed in
@ -450,7 +450,7 @@ func (i *ImagesList) Run(out io.Writer) error {
} }
// AddImagesCommonConfigFlags adds the flags that configure kubeadm (and affect the images kubeadm will use) // AddImagesCommonConfigFlags adds the flags that configure kubeadm (and affect the images kubeadm will use)
func AddImagesCommonConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1alpha3.MasterConfiguration, cfgPath *string, featureGatesString *string) { func AddImagesCommonConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1alpha3.InitConfiguration, cfgPath *string, featureGatesString *string) {
flagSet.StringVar( flagSet.StringVar(
&cfg.KubernetesVersion, "kubernetes-version", cfg.KubernetesVersion, &cfg.KubernetesVersion, "kubernetes-version", cfg.KubernetesVersion,
`Choose a specific Kubernetes version for the control plane.`, `Choose a specific Kubernetes version for the control plane.`,
@ -461,6 +461,6 @@ func AddImagesCommonConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1alpha3.M
} }
// AddImagesPullFlags adds flags related to the `kubeadm config images pull` command // AddImagesPullFlags adds flags related to the `kubeadm config images pull` command
func AddImagesPullFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1alpha3.MasterConfiguration) { func AddImagesPullFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1alpha3.InitConfiguration) {
flagSet.StringVar(&cfg.NodeRegistration.CRISocket, "cri-socket-path", cfg.NodeRegistration.CRISocket, "Path to the CRI socket.") flagSet.StringVar(&cfg.NodeRegistration.CRISocket, "cri-socket-path", cfg.NodeRegistration.CRISocket, "Path to the CRI socket.")
} }

View File

@ -66,7 +66,7 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
}, },
configContents: []byte(dedent.Dedent(` configContents: []byte(dedent.Dedent(`
apiVersion: kubeadm.k8s.io/v1alpha3 apiVersion: kubeadm.k8s.io/v1alpha3
kind: MasterConfiguration kind: InitConfiguration
kubernetesVersion: v1.10.1 kubernetesVersion: v1.10.1
`)), `)),
}, },
@ -78,7 +78,7 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
}, },
configContents: []byte(dedent.Dedent(` configContents: []byte(dedent.Dedent(`
apiVersion: kubeadm.k8s.io/v1alpha3 apiVersion: kubeadm.k8s.io/v1alpha3
kind: MasterConfiguration kind: InitConfiguration
kubernetesVersion: v1.11.0 kubernetesVersion: v1.11.0
featureGates: featureGates:
CoreDNS: True CoreDNS: True
@ -100,7 +100,7 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
t.Fatalf("Failed writing a config file: %v", err) t.Fatalf("Failed writing a config file: %v", err)
} }
i, err := cmd.NewImagesList(configFilePath, &kubeadmapiv1alpha3.MasterConfiguration{ i, err := cmd.NewImagesList(configFilePath, &kubeadmapiv1alpha3.InitConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersion,
}) })
if err != nil { if err != nil {
@ -127,19 +127,19 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
func TestConfigImagesListRunWithoutPath(t *testing.T) { func TestConfigImagesListRunWithoutPath(t *testing.T) {
testcases := []struct { testcases := []struct {
name string name string
cfg kubeadmapiv1alpha3.MasterConfiguration cfg kubeadmapiv1alpha3.InitConfiguration
expectedImages int expectedImages int
}{ }{
{ {
name: "empty config", name: "empty config",
expectedImages: defaultNumberOfImages, expectedImages: defaultNumberOfImages,
cfg: kubeadmapiv1alpha3.MasterConfiguration{ cfg: kubeadmapiv1alpha3.InitConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersion,
}, },
}, },
{ {
name: "external etcd configuration", name: "external etcd configuration",
cfg: kubeadmapiv1alpha3.MasterConfiguration{ cfg: kubeadmapiv1alpha3.InitConfiguration{
Etcd: kubeadmapiv1alpha3.Etcd{ Etcd: kubeadmapiv1alpha3.Etcd{
External: &kubeadmapiv1alpha3.ExternalEtcd{ External: &kubeadmapiv1alpha3.ExternalEtcd{
Endpoints: []string{"https://some.etcd.com:2379"}, Endpoints: []string{"https://some.etcd.com:2379"},
@ -151,7 +151,7 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
}, },
{ {
name: "coredns enabled", name: "coredns enabled",
cfg: kubeadmapiv1alpha3.MasterConfiguration{ cfg: kubeadmapiv1alpha3.InitConfiguration{
FeatureGates: map[string]bool{ FeatureGates: map[string]bool{
features.CoreDNS: true, features.CoreDNS: true,
}, },
@ -208,7 +208,7 @@ func TestImagesPull(t *testing.T) {
func TestMigrate(t *testing.T) { func TestMigrate(t *testing.T) {
cfg := []byte(dedent.Dedent(` cfg := []byte(dedent.Dedent(`
apiVersion: kubeadm.k8s.io/v1alpha3 apiVersion: kubeadm.k8s.io/v1alpha3
kind: MasterConfiguration kind: InitConfiguration
kubernetesVersion: v1.10.0 kubernetesVersion: v1.10.0
`)) `))
configFile, cleanup := tempConfig(t, cfg) configFile, cleanup := tempConfig(t, cfg)

View File

@ -116,7 +116,7 @@ var (
// NewCmdInit returns "kubeadm init" command. // NewCmdInit returns "kubeadm init" command.
func NewCmdInit(out io.Writer) *cobra.Command { func NewCmdInit(out io.Writer) *cobra.Command {
externalcfg := &kubeadmapiv1alpha3.MasterConfiguration{} externalcfg := &kubeadmapiv1alpha3.InitConfiguration{}
kubeadmscheme.Scheme.Default(externalcfg) kubeadmscheme.Scheme.Default(externalcfg)
var cfgPath string var cfgPath string
@ -165,7 +165,7 @@ func NewCmdInit(out io.Writer) *cobra.Command {
} }
// AddInitConfigFlags adds init flags bound to the config to the specified flagset // AddInitConfigFlags adds init flags bound to the config to the specified flagset
func AddInitConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1alpha3.MasterConfiguration, featureGatesString *string) { func AddInitConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1alpha3.InitConfiguration, featureGatesString *string) {
flagSet.StringVar( flagSet.StringVar(
&cfg.API.AdvertiseAddress, "apiserver-advertise-address", cfg.API.AdvertiseAddress, &cfg.API.AdvertiseAddress, "apiserver-advertise-address", cfg.API.AdvertiseAddress,
"The IP address the API Server will advertise it's listening on. Specify '0.0.0.0' to use the address of the default network interface.", "The IP address the API Server will advertise it's listening on. Specify '0.0.0.0' to use the address of the default network interface.",
@ -239,7 +239,7 @@ func AddInitOtherFlags(flagSet *flag.FlagSet, cfgPath *string, skipPreFlight, sk
} }
// NewInit validates given arguments and instantiates Init struct with provided information. // NewInit validates given arguments and instantiates Init struct with provided information.
func NewInit(cfgPath string, externalcfg *kubeadmapiv1alpha3.MasterConfiguration, ignorePreflightErrors sets.String, skipTokenPrint, dryRun bool) (*Init, error) { func NewInit(cfgPath string, externalcfg *kubeadmapiv1alpha3.InitConfiguration, ignorePreflightErrors sets.String, skipTokenPrint, dryRun bool) (*Init, error) {
// Either use the config file if specified, or convert the defaults in the external to an internal cfg representation // Either use the config file if specified, or convert the defaults in the external to an internal cfg representation
cfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, externalcfg) cfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, externalcfg)
@ -276,7 +276,7 @@ func NewInit(cfgPath string, externalcfg *kubeadmapiv1alpha3.MasterConfiguration
// Init defines struct used by "kubeadm init" command // Init defines struct used by "kubeadm init" command
type Init struct { type Init struct {
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
skipTokenPrint bool skipTokenPrint bool
dryRun bool dryRun bool
ignorePreflightErrors sets.String ignorePreflightErrors sets.String
@ -548,7 +548,7 @@ func printJoinCommand(out io.Writer, adminKubeConfigPath, token string, skipToke
} }
// createClient creates a clientset.Interface object // createClient creates a clientset.Interface object
func createClient(cfg *kubeadmapi.MasterConfiguration, dryRun bool) (clientset.Interface, error) { func createClient(cfg *kubeadmapi.InitConfiguration, dryRun bool) (clientset.Interface, error) {
if dryRun { if dryRun {
// If we're dry-running; we should create a faked client that answers some GETs in order to be able to do the full init flow and just logs the rest of requests // If we're dry-running; we should create a faked client that answers some GETs in order to be able to do the full init flow and just logs the rest of requests
dryRunGetter := apiclient.NewInitDryRunGetter(cfg.NodeRegistration.Name, cfg.Networking.ServiceSubnet) dryRunGetter := apiclient.NewInitDryRunGetter(cfg.NodeRegistration.Name, cfg.Networking.ServiceSubnet)

View File

@ -35,7 +35,7 @@ func NewBootstrapTokenOptions() *BootstrapTokenOptions {
} }
// BootstrapTokenOptions is a wrapper struct for adding bootstrap token-related flags to a FlagSet // BootstrapTokenOptions is a wrapper struct for adding bootstrap token-related flags to a FlagSet
// and applying the parsed flags to a MasterConfiguration object later at runtime // and applying the parsed flags to a InitConfiguration object later at runtime
// TODO: In the future, we might want to group the flags in a better way than adding them all individually like this // TODO: In the future, we might want to group the flags in a better way than adding them all individually like this
type BootstrapTokenOptions struct { type BootstrapTokenOptions struct {
*kubeadmapiv1alpha3.BootstrapToken *kubeadmapiv1alpha3.BootstrapToken
@ -87,9 +87,9 @@ func (bto *BootstrapTokenOptions) AddDescriptionFlag(fs *pflag.FlagSet) {
) )
} }
// ApplyTo applies the values set internally in the BootstrapTokenOptions object to a MasterConfiguration object at runtime // ApplyTo applies the values set internally in the BootstrapTokenOptions object to a InitConfiguration object at runtime
// If --token was specified in the CLI (as a string), it's parsed and validated before it's added to the BootstrapToken object. // If --token was specified in the CLI (as a string), it's parsed and validated before it's added to the BootstrapToken object.
func (bto *BootstrapTokenOptions) ApplyTo(cfg *kubeadmapiv1alpha3.MasterConfiguration) error { func (bto *BootstrapTokenOptions) ApplyTo(cfg *kubeadmapiv1alpha3.InitConfiguration) error {
if len(bto.TokenStr) > 0 { if len(bto.TokenStr) > 0 {
var err error var err error
bto.Token, err = kubeadmapiv1alpha3.NewBootstrapTokenString(bto.TokenStr) bto.Token, err = kubeadmapiv1alpha3.NewBootstrapTokenString(bto.TokenStr)

View File

@ -74,9 +74,9 @@ func NewCmdAddon() *cobra.Command {
} }
// EnsureAllAddons installs all addons to a Kubernetes cluster // EnsureAllAddons installs all addons to a Kubernetes cluster
func EnsureAllAddons(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error { func EnsureAllAddons(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error {
addonActions := []func(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error{ addonActions := []func(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error{
dnsaddon.EnsureDNSAddon, dnsaddon.EnsureDNSAddon,
proxyaddon.EnsureProxyAddon, proxyaddon.EnsureProxyAddon,
} }
@ -94,7 +94,7 @@ func EnsureAllAddons(cfg *kubeadmapi.MasterConfiguration, client clientset.Inter
// getAddonsSubCommands returns sub commands for addons phase // getAddonsSubCommands returns sub commands for addons phase
func getAddonsSubCommands() []*cobra.Command { func getAddonsSubCommands() []*cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{} cfg := &kubeadmapiv1alpha3.InitConfiguration{}
// Default values for the cobra help text // Default values for the cobra help text
kubeadmscheme.Scheme.Default(cfg) kubeadmscheme.Scheme.Default(cfg)
@ -106,7 +106,7 @@ func getAddonsSubCommands() []*cobra.Command {
short string short string
long string long string
examples string examples string
cmdFunc func(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error cmdFunc func(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error
}{ }{
{ {
use: "all", use: "all",
@ -164,7 +164,7 @@ func getAddonsSubCommands() []*cobra.Command {
} }
// runAddonsCmdFunc creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters) // runAddonsCmdFunc creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters)
func runAddonsCmdFunc(cmdFunc func(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error, cfg *kubeadmapiv1alpha3.MasterConfiguration, kubeConfigFile *string, cfgPath *string, featureGatesString *string) func(cmd *cobra.Command, args []string) { func runAddonsCmdFunc(cmdFunc func(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error, cfg *kubeadmapiv1alpha3.InitConfiguration, kubeConfigFile *string, cfgPath *string, featureGatesString *string) func(cmd *cobra.Command, args []string) {
// the following statement build a clousure that wraps a call to a cmdFunc, binding // the following statement build a clousure that wraps a call to a cmdFunc, binding
// the function itself with the specific parameters of each sub command. // the function itself with the specific parameters of each sub command.
@ -181,7 +181,7 @@ func runAddonsCmdFunc(cmdFunc func(cfg *kubeadmapi.MasterConfiguration, client c
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)
} }
internalcfg := &kubeadmapi.MasterConfiguration{} internalcfg := &kubeadmapi.InitConfiguration{}
kubeadmscheme.Scheme.Convert(cfg, internalcfg, nil) kubeadmscheme.Scheme.Convert(cfg, internalcfg, nil)
client, err := kubeconfigutil.ClientSetFromFile(*kubeConfigFile) client, err := kubeconfigutil.ClientSetFromFile(*kubeConfigFile)
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)

View File

@ -107,7 +107,7 @@ func NewCmdBootstrapToken() *cobra.Command {
// NewSubCmdBootstrapTokenAll returns the Cobra command for running the token all sub-phase // NewSubCmdBootstrapTokenAll returns the Cobra command for running the token all sub-phase
func NewSubCmdBootstrapTokenAll(kubeConfigFile *string) *cobra.Command { func NewSubCmdBootstrapTokenAll(kubeConfigFile *string) *cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{ cfg := &kubeadmapiv1alpha3.InitConfiguration{
// KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid // KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig // the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig
KubernetesVersion: "v1.10.0", KubernetesVersion: "v1.10.0",
@ -174,7 +174,7 @@ func NewSubCmdBootstrapTokenAll(kubeConfigFile *string) *cobra.Command {
// NewSubCmdBootstrapToken returns the Cobra command for running the create token phase // NewSubCmdBootstrapToken returns the Cobra command for running the create token phase
func NewSubCmdBootstrapToken(kubeConfigFile *string) *cobra.Command { func NewSubCmdBootstrapToken(kubeConfigFile *string) *cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{ cfg := &kubeadmapiv1alpha3.InitConfiguration{
// KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid // KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig // the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig
KubernetesVersion: "v1.10.0", KubernetesVersion: "v1.10.0",
@ -306,7 +306,7 @@ func addGenericFlags(flagSet *pflag.FlagSet, cfgPath *string, skipTokenPrint *bo
) )
} }
func createBootstrapToken(kubeConfigFile string, client clientset.Interface, cfgPath string, cfg *kubeadmapiv1alpha3.MasterConfiguration, skipTokenPrint bool) error { func createBootstrapToken(kubeConfigFile string, client clientset.Interface, cfgPath string, cfg *kubeadmapiv1alpha3.InitConfiguration, skipTokenPrint bool) error {
// This call returns the ready-to-use configuration based on the configuration file that might or might not exist and the default cfg populated by flags // This call returns the ready-to-use configuration based on the configuration file that might or might not exist and the default cfg populated by flags
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, cfg) internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, cfg)

View File

@ -148,7 +148,7 @@ func NewCmdCerts() *cobra.Command {
// getCertsSubCommands returns sub commands for certs phase // getCertsSubCommands returns sub commands for certs phase
func getCertsSubCommands(defaultKubernetesVersion string) []*cobra.Command { func getCertsSubCommands(defaultKubernetesVersion string) []*cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{} cfg := &kubeadmapiv1alpha3.InitConfiguration{}
// This is used for unit testing only... // This is used for unit testing only...
// If we wouldn't set this to something, the code would dynamically look up the version from the internet // If we wouldn't set this to something, the code would dynamically look up the version from the internet
@ -168,7 +168,7 @@ func getCertsSubCommands(defaultKubernetesVersion string) []*cobra.Command {
short string short string
long string long string
examples string examples string
cmdFunc func(cfg *kubeadmapi.MasterConfiguration) error cmdFunc func(cfg *kubeadmapi.InitConfiguration) error
}{ }{
{ {
use: "all", use: "all",
@ -272,7 +272,7 @@ func getCertsSubCommands(defaultKubernetesVersion string) []*cobra.Command {
} }
// runCmdFunc creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters) // runCmdFunc creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters)
func runCmdFunc(cmdFunc func(cfg *kubeadmapi.MasterConfiguration) error, cfgPath *string, cfg *kubeadmapiv1alpha3.MasterConfiguration) func(cmd *cobra.Command, args []string) { func runCmdFunc(cmdFunc func(cfg *kubeadmapi.InitConfiguration) error, cfgPath *string, cfg *kubeadmapiv1alpha3.InitConfiguration) func(cmd *cobra.Command, args []string) {
// the following statement build a closure that wraps a call to a cmdFunc, binding // the following statement build a closure that wraps a call to a cmdFunc, binding
// the function itself with the specific parameters of each sub command. // the function itself with the specific parameters of each sub command.

View File

@ -253,12 +253,12 @@ func TestSubCmdCertsCreateFilesWithConfigFile(t *testing.T) {
certdir := tmpdir certdir := tmpdir
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234},
CertificatesDir: certdir, CertificatesDir: certdir,
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-node-name"}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-node-name"},
} }
configPath := testutil.SetupMasterConfigurationFile(t, tmpdir, cfg) configPath := testutil.SetupInitConfigurationFile(t, tmpdir, cfg)
// executes given sub commands // executes given sub commands
for _, subCmdName := range test.subCmds { for _, subCmdName := range test.subCmds {

View File

@ -79,7 +79,7 @@ func NewCmdControlplane() *cobra.Command {
// getControlPlaneSubCommands returns sub commands for Controlplane phase // getControlPlaneSubCommands returns sub commands for Controlplane phase
func getControlPlaneSubCommands(outDir, defaultKubernetesVersion string) []*cobra.Command { func getControlPlaneSubCommands(outDir, defaultKubernetesVersion string) []*cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{} cfg := &kubeadmapiv1alpha3.InitConfiguration{}
// This is used for unit testing only... // This is used for unit testing only...
// If we wouldn't set this to something, the code would dynamically look up the version from the internet // If we wouldn't set this to something, the code would dynamically look up the version from the internet
@ -99,7 +99,7 @@ func getControlPlaneSubCommands(outDir, defaultKubernetesVersion string) []*cobr
short string short string
long string long string
examples string examples string
cmdFunc func(outDir string, cfg *kubeadmapi.MasterConfiguration) error cmdFunc func(outDir string, cfg *kubeadmapi.InitConfiguration) error
}{ }{
{ {
use: "all", use: "all",
@ -169,7 +169,7 @@ func getControlPlaneSubCommands(outDir, defaultKubernetesVersion string) []*cobr
} }
// runCmdControlPlane creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters) // runCmdControlPlane creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters)
func runCmdControlPlane(cmdFunc func(outDir string, cfg *kubeadmapi.MasterConfiguration) error, outDir, cfgPath *string, featureGatesString *string, cfg *kubeadmapiv1alpha3.MasterConfiguration) func(cmd *cobra.Command, args []string) { func runCmdControlPlane(cmdFunc func(outDir string, cfg *kubeadmapi.InitConfiguration) error, outDir, cfgPath *string, featureGatesString *string, cfg *kubeadmapiv1alpha3.InitConfiguration) func(cmd *cobra.Command, args []string) {
// the following statement build a closure that wraps a call to a cmdFunc, binding // the following statement build a closure that wraps a call to a cmdFunc, binding
// the function itself with the specific parameters of each sub command. // the function itself with the specific parameters of each sub command.

View File

@ -61,7 +61,7 @@ func NewCmdEtcd() *cobra.Command {
// getEtcdSubCommands returns sub commands for etcd phase // getEtcdSubCommands returns sub commands for etcd phase
func getEtcdSubCommands(outDir, defaultKubernetesVersion string) []*cobra.Command { func getEtcdSubCommands(outDir, defaultKubernetesVersion string) []*cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{} cfg := &kubeadmapiv1alpha3.InitConfiguration{}
// This is used for unit testing only... // This is used for unit testing only...
// If we wouldn't set this to something, the code would dynamically look up the version from the internet // If we wouldn't set this to something, the code would dynamically look up the version from the internet
@ -81,7 +81,7 @@ func getEtcdSubCommands(outDir, defaultKubernetesVersion string) []*cobra.Comman
short string short string
long string long string
examples string examples string
cmdFunc func(outDir string, cfg *kubeadmapi.MasterConfiguration) error cmdFunc func(outDir string, cfg *kubeadmapi.InitConfiguration) error
}{ }{
use: "local", use: "local",
short: "Generates the static Pod manifest file for a local, single-node etcd instance", short: "Generates the static Pod manifest file for a local, single-node etcd instance",

View File

@ -90,7 +90,7 @@ func NewCmdKubeConfig(out io.Writer) *cobra.Command {
// getKubeConfigSubCommands returns sub commands for kubeconfig phase // getKubeConfigSubCommands returns sub commands for kubeconfig phase
func getKubeConfigSubCommands(out io.Writer, outDir, defaultKubernetesVersion string) []*cobra.Command { func getKubeConfigSubCommands(out io.Writer, outDir, defaultKubernetesVersion string) []*cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{} cfg := &kubeadmapiv1alpha3.InitConfiguration{}
// This is used for unit testing only... // This is used for unit testing only...
// If we wouldn't set this to something, the code would dynamically look up the version from the internet // If we wouldn't set this to something, the code would dynamically look up the version from the internet
@ -111,7 +111,7 @@ func getKubeConfigSubCommands(out io.Writer, outDir, defaultKubernetesVersion st
short string short string
long string long string
examples string examples string
cmdFunc func(outDir string, cfg *kubeadmapi.MasterConfiguration) error cmdFunc func(outDir string, cfg *kubeadmapi.InitConfiguration) error
}{ }{
{ {
use: "all", use: "all",
@ -149,7 +149,7 @@ func getKubeConfigSubCommands(out io.Writer, outDir, defaultKubernetesVersion st
short: "Outputs a kubeconfig file for an additional user", short: "Outputs a kubeconfig file for an additional user",
long: userKubeconfigLongDesc, long: userKubeconfigLongDesc,
examples: userKubeconfigExample, examples: userKubeconfigExample,
cmdFunc: func(outDir string, cfg *kubeadmapi.MasterConfiguration) error { cmdFunc: func(outDir string, cfg *kubeadmapi.InitConfiguration) error {
if clientName == "" { if clientName == "" {
return fmt.Errorf("missing required argument --client-name") return fmt.Errorf("missing required argument --client-name")
} }

View File

@ -276,12 +276,12 @@ func TestKubeConfigSubCommandsThatCreateFilesWithConfigFile(t *testing.T) {
} }
// Adds a master configuration file // Adds a master configuration file
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234},
CertificatesDir: pkidir, CertificatesDir: pkidir,
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-node-name"}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-node-name"},
} }
cfgPath := testutil.SetupMasterConfigurationFile(t, tmpdir, cfg) cfgPath := testutil.SetupInitConfigurationFile(t, tmpdir, cfg)
// Get subcommands working in the temporary directory // Get subcommands working in the temporary directory
subCmds := getKubeConfigSubCommands(nil, tmpdir, phaseTestK8sVersion) subCmds := getKubeConfigSubCommands(nil, tmpdir, phaseTestK8sVersion)

View File

@ -39,12 +39,12 @@ import (
var ( var (
kubeletWriteEnvFileLongDesc = normalizer.LongDesc(` kubeletWriteEnvFileLongDesc = normalizer.LongDesc(`
Writes an environment file with flags that should be passed to the kubelet executing on the master or node. Writes an environment file with flags that should be passed to the kubelet executing on the master or node.
This --config flag can either consume a MasterConfiguration object or a NodeConfiguration one, as this This --config flag can either consume a InitConfiguration object or a NodeConfiguration one, as this
function is used for both "kubeadm init" and "kubeadm join". function is used for both "kubeadm init" and "kubeadm join".
` + cmdutil.AlphaDisclaimer) ` + cmdutil.AlphaDisclaimer)
kubeletWriteEnvFileExample = normalizer.Examples(` kubeletWriteEnvFileExample = normalizer.Examples(`
# Writes a dynamic environment file with kubelet flags from a MasterConfiguration file. # Writes a dynamic environment file with kubelet flags from a InitConfiguration file.
kubeadm alpha phase kubelet write-env-file --config masterconfig.yaml kubeadm alpha phase kubelet write-env-file --config masterconfig.yaml
# Writes a dynamic environment file with kubelet flags from a NodeConfiguration file. # Writes a dynamic environment file with kubelet flags from a NodeConfiguration file.
@ -52,7 +52,7 @@ var (
`) `)
kubeletConfigUploadLongDesc = normalizer.LongDesc(` kubeletConfigUploadLongDesc = normalizer.LongDesc(`
Uploads kubelet configuration extracted from the kubeadm MasterConfiguration object to a ConfigMap Uploads kubelet configuration extracted from the kubeadm InitConfiguration object to a ConfigMap
of the form kubelet-config-1.X in the cluster, where X is the minor version of the current (API Server) Kubernetes version. of the form kubelet-config-1.X in the cluster, where X is the minor version of the current (API Server) Kubernetes version.
` + cmdutil.AlphaDisclaimer) ` + cmdutil.AlphaDisclaimer)
@ -115,7 +115,7 @@ func NewCmdKubelet() *cobra.Command {
return cmd return cmd
} }
// NewCmdKubeletWriteEnvFile calls cobra.Command for writing the dynamic kubelet env file based on a MasterConfiguration or NodeConfiguration object // NewCmdKubeletWriteEnvFile calls cobra.Command for writing the dynamic kubelet env file based on a InitConfiguration or NodeConfiguration object
func NewCmdKubeletWriteEnvFile() *cobra.Command { func NewCmdKubeletWriteEnvFile() *cobra.Command {
var cfgPath string var cfgPath string
@ -146,7 +146,7 @@ func RunKubeletWriteEnvFile(cfgPath string) error {
var registerWithTaints bool var registerWithTaints bool
switch cfg := internalcfg.(type) { switch cfg := internalcfg.(type) {
case *kubeadmapi.MasterConfiguration: case *kubeadmapi.InitConfiguration:
nodeRegistrationObj = &cfg.NodeRegistration nodeRegistrationObj = &cfg.NodeRegistration
featureGates = cfg.FeatureGates featureGates = cfg.FeatureGates
registerWithTaints = false registerWithTaints = false
@ -186,7 +186,7 @@ func NewCmdKubeletConfigUpload() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "upload", Use: "upload",
Short: "Uploads kubelet configuration to a ConfigMap based on a kubeadm MasterConfiguration file.", Short: "Uploads kubelet configuration to a ConfigMap based on a kubeadm InitConfiguration file.",
Long: kubeletConfigUploadLongDesc, Long: kubeletConfigUploadLongDesc,
Example: kubeletConfigUploadExample, Example: kubeletConfigUploadExample,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
@ -195,7 +195,7 @@ func NewCmdKubeletConfigUpload() *cobra.Command {
} }
// This call returns the ready-to-use configuration based on the configuration file // This call returns the ready-to-use configuration based on the configuration file
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, &kubeadmapiv1alpha3.MasterConfiguration{}) internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, &kubeadmapiv1alpha3.InitConfiguration{})
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
@ -260,7 +260,7 @@ func NewCmdKubeletConfigWriteToDisk() *cobra.Command {
} }
// This call returns the ready-to-use configuration based on the configuration file // This call returns the ready-to-use configuration based on the configuration file
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, &kubeadmapiv1alpha3.MasterConfiguration{}) internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, &kubeadmapiv1alpha3.InitConfiguration{})
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)
err = kubeletphase.WriteConfigToDisk(internalcfg.ComponentConfigs.Kubelet, constants.KubeletRunDirectory) err = kubeletphase.WriteConfigToDisk(internalcfg.ComponentConfigs.Kubelet, constants.KubeletRunDirectory)

View File

@ -47,7 +47,7 @@ var (
// NewCmdMarkMaster returns the Cobra command for running the mark-master phase // NewCmdMarkMaster returns the Cobra command for running the mark-master phase
func NewCmdMarkMaster() *cobra.Command { func NewCmdMarkMaster() *cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{ cfg := &kubeadmapiv1alpha3.InitConfiguration{
// KubernetesVersion is not used by mark master, but we set this explicitly to avoid // KubernetesVersion is not used by mark master, but we set this explicitly to avoid
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig // the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig
KubernetesVersion: "v1.10.0", KubernetesVersion: "v1.10.0",

View File

@ -69,7 +69,7 @@ func NewCmdPreFlightMaster() *cobra.Command {
Long: masterPreflightLongDesc, Long: masterPreflightLongDesc,
Example: masterPreflightExample, Example: masterPreflightExample,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
cfg := &kubeadmapi.MasterConfiguration{} cfg := &kubeadmapi.InitConfiguration{}
err := preflight.RunInitMasterChecks(utilsexec.New(), cfg, sets.NewString()) err := preflight.RunInitMasterChecks(utilsexec.New(), cfg, sets.NewString())
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)
}, },

View File

@ -70,7 +70,7 @@ func NewCmdSelfhosting() *cobra.Command {
// getSelfhostingSubCommand returns sub commands for Selfhosting phase // getSelfhostingSubCommand returns sub commands for Selfhosting phase
func getSelfhostingSubCommand() *cobra.Command { func getSelfhostingSubCommand() *cobra.Command {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{} cfg := &kubeadmapiv1alpha3.InitConfiguration{}
// Default values for the cobra help text // Default values for the cobra help text
kubeadmscheme.Scheme.Default(cfg) kubeadmscheme.Scheme.Default(cfg)

View File

@ -38,7 +38,7 @@ var (
This enables correct configuration of system components and a seamless user experience when upgrading. This enables correct configuration of system components and a seamless user experience when upgrading.
Alternatively, you can use kubeadm config. Alternatively, you can use kubeadm config.
`+cmdutil.AlphaDisclaimer), kubeadmconstants.MasterConfigurationConfigMap, metav1.NamespaceSystem) `+cmdutil.AlphaDisclaimer), kubeadmconstants.InitConfigurationConfigMap, metav1.NamespaceSystem)
uploadConfigExample = normalizer.Examples(` uploadConfigExample = normalizer.Examples(`
# uploads the configuration of your cluster # uploads the configuration of your cluster
@ -62,7 +62,7 @@ func NewCmdUploadConfig() *cobra.Command {
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)
defaultcfg := &kubeadmapiv1alpha3.MasterConfiguration{} defaultcfg := &kubeadmapiv1alpha3.InitConfiguration{}
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, defaultcfg) internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, defaultcfg)
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)

View File

@ -27,7 +27,7 @@ import (
) )
// runCmdPhase creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters) // runCmdPhase creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters)
func runCmdPhase(cmdFunc func(outDir string, cfg *kubeadmapi.MasterConfiguration) error, outDir, cfgPath *string, cfg *kubeadmapiv1alpha3.MasterConfiguration) func(cmd *cobra.Command, args []string) { func runCmdPhase(cmdFunc func(outDir string, cfg *kubeadmapi.InitConfiguration) error, outDir, cfgPath *string, cfg *kubeadmapiv1alpha3.InitConfiguration) func(cmd *cobra.Command, args []string) {
// the following statement build a closure that wraps a call to a cmdFunc, binding // the following statement build a closure that wraps a call to a cmdFunc, binding
// the function itself with the specific parameters of each sub command. // the function itself with the specific parameters of each sub command.

View File

@ -89,7 +89,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command {
tokenCmd.PersistentFlags().BoolVar(&dryRun, tokenCmd.PersistentFlags().BoolVar(&dryRun,
"dry-run", dryRun, "Whether to enable dry-run mode or not") "dry-run", dryRun, "Whether to enable dry-run mode or not")
cfg := &kubeadmapiv1alpha3.MasterConfiguration{ cfg := &kubeadmapiv1alpha3.InitConfiguration{
// KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid // KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig // the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig
KubernetesVersion: "v1.10.0", KubernetesVersion: "v1.10.0",
@ -214,7 +214,7 @@ func NewCmdTokenGenerate(out io.Writer) *cobra.Command {
} }
// RunCreateToken generates a new bootstrap token and stores it as a secret on the server. // RunCreateToken generates a new bootstrap token and stores it as a secret on the server.
func RunCreateToken(out io.Writer, client clientset.Interface, cfgPath string, cfg *kubeadmapiv1alpha3.MasterConfiguration, printJoinCommand bool, kubeConfigFile string) error { func RunCreateToken(out io.Writer, client clientset.Interface, cfgPath string, cfg *kubeadmapiv1alpha3.InitConfiguration, printJoinCommand bool, kubeConfigFile string) error {
// This call returns the ready-to-use configuration based on the configuration file that might or might not exist and the default cfg populated by flags // This call returns the ready-to-use configuration based on the configuration file that might or might not exist and the default cfg populated by flags
glog.V(1).Infoln("[token] loading configurations") glog.V(1).Infoln("[token] loading configurations")
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, cfg) internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, cfg)

View File

@ -178,7 +178,7 @@ func TestRunCreateToken(t *testing.T) {
t.Fatalf("token couldn't be parsed for testing: %v", err) t.Fatalf("token couldn't be parsed for testing: %v", err)
} }
cfg := &kubeadmapiv1alpha3.MasterConfiguration{ cfg := &kubeadmapiv1alpha3.InitConfiguration{
// KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid // KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig // the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig

View File

@ -90,7 +90,7 @@ func NewCmdApply(apf *applyPlanFlags) *cobra.Command {
// If the version is specified in config file, pick up that value. // If the version is specified in config file, pick up that value.
if flags.cfgPath != "" { if flags.cfgPath != "" {
glog.V(1).Infof("fetching configuration from file %s", flags.cfgPath) glog.V(1).Infof("fetching configuration from file %s", flags.cfgPath)
cfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(flags.cfgPath, &kubeadmapiv1alpha3.MasterConfiguration{}) cfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(flags.cfgPath, &kubeadmapiv1alpha3.InitConfiguration{})
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)
if cfg.KubernetesVersion != "" { if cfg.KubernetesVersion != "" {
@ -261,7 +261,7 @@ func EnforceVersionPolicies(flags *applyFlags, versionGetter upgrade.VersionGett
} }
// PerformControlPlaneUpgrade actually performs the upgrade procedure for the cluster of your type (self-hosted or static-pod-hosted) // PerformControlPlaneUpgrade actually performs the upgrade procedure for the cluster of your type (self-hosted or static-pod-hosted)
func PerformControlPlaneUpgrade(flags *applyFlags, client clientset.Interface, waiter apiclient.Waiter, internalcfg *kubeadmapi.MasterConfiguration) error { func PerformControlPlaneUpgrade(flags *applyFlags, client clientset.Interface, waiter apiclient.Waiter, internalcfg *kubeadmapi.InitConfiguration) error {
// Check if the cluster is self-hosted and act accordingly // Check if the cluster is self-hosted and act accordingly
glog.V(1).Infoln("checking if cluster is self-hosted") glog.V(1).Infoln("checking if cluster is self-hosted")
@ -284,14 +284,14 @@ func PerformControlPlaneUpgrade(flags *applyFlags, client clientset.Interface, w
return PerformStaticPodUpgrade(client, waiter, internalcfg, flags.etcdUpgrade) return PerformStaticPodUpgrade(client, waiter, internalcfg, flags.etcdUpgrade)
} }
// GetPathManagerForUpgrade returns a path manager properly configured for the given MasterConfiguration. // GetPathManagerForUpgrade returns a path manager properly configured for the given InitConfiguration.
func GetPathManagerForUpgrade(internalcfg *kubeadmapi.MasterConfiguration, etcdUpgrade bool) (upgrade.StaticPodPathManager, error) { func GetPathManagerForUpgrade(internalcfg *kubeadmapi.InitConfiguration, etcdUpgrade bool) (upgrade.StaticPodPathManager, error) {
isHAEtcd := etcdutil.CheckConfigurationIsHA(&internalcfg.Etcd) isHAEtcd := etcdutil.CheckConfigurationIsHA(&internalcfg.Etcd)
return upgrade.NewKubeStaticPodPathManagerUsingTempDirs(constants.GetStaticPodDirectory(), true, etcdUpgrade && !isHAEtcd) return upgrade.NewKubeStaticPodPathManagerUsingTempDirs(constants.GetStaticPodDirectory(), true, etcdUpgrade && !isHAEtcd)
} }
// PerformStaticPodUpgrade performs the upgrade of the control plane components for a static pod hosted cluster // PerformStaticPodUpgrade performs the upgrade of the control plane components for a static pod hosted cluster
func PerformStaticPodUpgrade(client clientset.Interface, waiter apiclient.Waiter, internalcfg *kubeadmapi.MasterConfiguration, etcdUpgrade bool) error { func PerformStaticPodUpgrade(client clientset.Interface, waiter apiclient.Waiter, internalcfg *kubeadmapi.InitConfiguration, etcdUpgrade bool) error {
pathManager, err := GetPathManagerForUpgrade(internalcfg, etcdUpgrade) pathManager, err := GetPathManagerForUpgrade(internalcfg, etcdUpgrade)
if err != nil { if err != nil {
return err return err
@ -302,7 +302,7 @@ func PerformStaticPodUpgrade(client clientset.Interface, waiter apiclient.Waiter
} }
// DryRunStaticPodUpgrade fakes an upgrade of the control plane // DryRunStaticPodUpgrade fakes an upgrade of the control plane
func DryRunStaticPodUpgrade(internalcfg *kubeadmapi.MasterConfiguration) error { func DryRunStaticPodUpgrade(internalcfg *kubeadmapi.InitConfiguration) error {
dryRunManifestDir, err := constants.CreateTempDirForKubeadm("kubeadm-upgrade-dryrun") dryRunManifestDir, err := constants.CreateTempDirForKubeadm("kubeadm-upgrade-dryrun")
if err != nil { if err != nil {

View File

@ -153,7 +153,7 @@ func TestSetImplicitFlags(t *testing.T) {
func TestGetPathManagerForUpgrade(t *testing.T) { func TestGetPathManagerForUpgrade(t *testing.T) {
haEtcd := &kubeadmapi.MasterConfiguration{ haEtcd := &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
External: &kubeadmapi.ExternalEtcd{ External: &kubeadmapi.ExternalEtcd{
Endpoints: []string{"10.100.0.1:2379", "10.100.0.2:2379", "10.100.0.3:2379"}, Endpoints: []string{"10.100.0.1:2379", "10.100.0.2:2379", "10.100.0.3:2379"},
@ -161,11 +161,11 @@ func TestGetPathManagerForUpgrade(t *testing.T) {
}, },
} }
noHAEtcd := &kubeadmapi.MasterConfiguration{} noHAEtcd := &kubeadmapi.InitConfiguration{}
tests := []struct { tests := []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
etcdUpgrade bool etcdUpgrade bool
shouldDeleteEtcd bool shouldDeleteEtcd bool
}{ }{

View File

@ -44,7 +44,7 @@ import (
// TODO - Restructure or rename upgradeVariables // TODO - Restructure or rename upgradeVariables
type upgradeVariables struct { type upgradeVariables struct {
client clientset.Interface client clientset.Interface
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
versionGetter upgrade.VersionGetter versionGetter upgrade.VersionGetter
waiter apiclient.Waiter waiter apiclient.Waiter
} }
@ -67,7 +67,7 @@ func enforceRequirements(flags *applyPlanFlags, dryRun bool, newK8sVersion strin
cfg, err := configutil.FetchConfigFromFileOrCluster(client, os.Stdout, "upgrade/config", flags.cfgPath) cfg, err := configutil.FetchConfigFromFileOrCluster(client, os.Stdout, "upgrade/config", flags.cfgPath)
if err != nil { if err != nil {
if apierrors.IsNotFound(err) { if apierrors.IsNotFound(err) {
fmt.Printf("[upgrade/config] In order to upgrade, a ConfigMap called %q in the %s namespace must exist.\n", constants.MasterConfigurationConfigMap, metav1.NamespaceSystem) fmt.Printf("[upgrade/config] In order to upgrade, a ConfigMap called %q in the %s namespace must exist.\n", constants.InitConfigurationConfigMap, metav1.NamespaceSystem)
fmt.Println("[upgrade/config] Without this information, 'kubeadm upgrade' won't know how to configure your upgraded cluster.") fmt.Println("[upgrade/config] Without this information, 'kubeadm upgrade' won't know how to configure your upgraded cluster.")
fmt.Println("") fmt.Println("")
fmt.Println("[upgrade/config] Next steps:") fmt.Println("[upgrade/config] Next steps:")
@ -75,7 +75,7 @@ func enforceRequirements(flags *applyPlanFlags, dryRun bool, newK8sVersion strin
fmt.Printf("\t- OPTION 2: Run 'kubeadm config upload from-file' and specify the same config file you passed to 'kubeadm init' when you created your master.\n") fmt.Printf("\t- OPTION 2: Run 'kubeadm config upload from-file' and specify the same config file you passed to 'kubeadm init' when you created your master.\n")
fmt.Printf("\t- OPTION 3: Pass a config file to 'kubeadm upgrade' using the --config flag.\n") fmt.Printf("\t- OPTION 3: Pass a config file to 'kubeadm upgrade' using the --config flag.\n")
fmt.Println("") fmt.Println("")
err = fmt.Errorf("the ConfigMap %q in the %s namespace used for getting configuration information was not found", constants.MasterConfigurationConfigMap, metav1.NamespaceSystem) err = fmt.Errorf("the ConfigMap %q in the %s namespace used for getting configuration information was not found", constants.InitConfigurationConfigMap, metav1.NamespaceSystem)
} }
return nil, fmt.Errorf("[upgrade/config] FATAL: %v", err) return nil, fmt.Errorf("[upgrade/config] FATAL: %v", err)
} }
@ -109,7 +109,7 @@ func enforceRequirements(flags *applyPlanFlags, dryRun bool, newK8sVersion strin
} }
// printConfiguration prints the external version of the API to yaml // printConfiguration prints the external version of the API to yaml
func printConfiguration(cfg *kubeadmapi.MasterConfiguration, w io.Writer) { func printConfiguration(cfg *kubeadmapi.InitConfiguration, w io.Writer) {
// Short-circuit if cfg is nil, so we can safely get the value of the pointer below // Short-circuit if cfg is nil, so we can safely get the value of the pointer below
if cfg == nil { if cfg == nil {
return return

View File

@ -25,7 +25,7 @@ import (
func TestPrintConfiguration(t *testing.T) { func TestPrintConfiguration(t *testing.T) {
var tests = []struct { var tests = []struct {
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
buf *bytes.Buffer buf *bytes.Buffer
expectedBytes []byte expectedBytes []byte
}{ }{
@ -34,7 +34,7 @@ func TestPrintConfiguration(t *testing.T) {
expectedBytes: []byte(""), expectedBytes: []byte(""),
}, },
{ {
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
KubernetesVersion: "v1.7.1", KubernetesVersion: "v1.7.1",
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
@ -57,7 +57,7 @@ func TestPrintConfiguration(t *testing.T) {
dataDir: /some/path dataDir: /some/path
image: "" image: ""
imageRepository: "" imageRepository: ""
kind: MasterConfiguration kind: InitConfiguration
kubernetesVersion: v1.7.1 kubernetesVersion: v1.7.1
networking: networking:
dnsDomain: "" dnsDomain: ""
@ -68,7 +68,7 @@ func TestPrintConfiguration(t *testing.T) {
`), `),
}, },
{ {
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
KubernetesVersion: "v1.7.1", KubernetesVersion: "v1.7.1",
Networking: kubeadmapi.Networking{ Networking: kubeadmapi.Networking{
ServiceSubnet: "10.96.0.1/12", ServiceSubnet: "10.96.0.1/12",
@ -97,7 +97,7 @@ func TestPrintConfiguration(t *testing.T) {
- https://one-etcd-instance:2379 - https://one-etcd-instance:2379
keyFile: "" keyFile: ""
imageRepository: "" imageRepository: ""
kind: MasterConfiguration kind: InitConfiguration
kubernetesVersion: v1.7.1 kubernetesVersion: v1.7.1
networking: networking:
dnsDomain: "" dnsDomain: ""

View File

@ -79,7 +79,7 @@ func runDiff(flags *diffFlags, args []string) error {
// If the version is specified in config file, pick up that value. // If the version is specified in config file, pick up that value.
glog.V(1).Infof("fetching configuration from file %s", flags.cfgPath) glog.V(1).Infof("fetching configuration from file %s", flags.cfgPath)
cfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(flags.cfgPath, &kubeadmapiv1alpha3.MasterConfiguration{}) cfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(flags.cfgPath, &kubeadmapiv1alpha3.InitConfiguration{})
if err != nil { if err != nil {
return err return err
} }

View File

@ -63,7 +63,7 @@ func NewCmdPlan(apf *applyPlanFlags) *cobra.Command {
// If the version is specified in config file, pick up that value. // If the version is specified in config file, pick up that value.
if flags.cfgPath != "" { if flags.cfgPath != "" {
glog.V(1).Infof("fetching configuration from file %s", flags.cfgPath) glog.V(1).Infof("fetching configuration from file %s", flags.cfgPath)
cfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(flags.cfgPath, &kubeadmapiv1alpha3.MasterConfiguration{}) cfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(flags.cfgPath, &kubeadmapiv1alpha3.InitConfiguration{})
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)
if cfg.KubernetesVersion != "" { if cfg.KubernetesVersion != "" {

View File

@ -33,7 +33,7 @@ const (
) )
// DefaultKubeProxyConfiguration assigns default values for the kube-proxy ComponentConfig // DefaultKubeProxyConfiguration assigns default values for the kube-proxy ComponentConfig
func DefaultKubeProxyConfiguration(internalcfg *kubeadmapi.MasterConfiguration) { func DefaultKubeProxyConfiguration(internalcfg *kubeadmapi.InitConfiguration) {
// IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go // IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go
// and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go. TODO: Remove this requirement when v1alpha2 is removed. // and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go. TODO: Remove this requirement when v1alpha2 is removed.
externalproxycfg := &kubeproxyconfigv1alpha1.KubeProxyConfiguration{} externalproxycfg := &kubeproxyconfigv1alpha1.KubeProxyConfiguration{}
@ -62,7 +62,7 @@ func DefaultKubeProxyConfiguration(internalcfg *kubeadmapi.MasterConfiguration)
} }
// DefaultKubeletConfiguration assigns default values for the kubelet ComponentConfig // DefaultKubeletConfiguration assigns default values for the kubelet ComponentConfig
func DefaultKubeletConfiguration(internalcfg *kubeadmapi.MasterConfiguration) { func DefaultKubeletConfiguration(internalcfg *kubeadmapi.InitConfiguration) {
// IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go // IMPORTANT NOTE: If you're changing this code you should mirror it to cmd/kubeadm/app/apis/kubeadm/v1alpha2/defaults.go
// and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go. TODO: Remove this requirement when v1alpha2 is removed. // and cmd/kubeadm/app/apis/kubeadm/v1alpha3/conversion.go. TODO: Remove this requirement when v1alpha2 is removed.
externalkubeletcfg := &kubeletconfigv1beta1.KubeletConfiguration{} externalkubeletcfg := &kubeletconfigv1beta1.KubeletConfiguration{}

View File

@ -38,15 +38,15 @@ type Registration struct {
// AddToSchemeFuncs are a set of functions that register APIs to the scheme // AddToSchemeFuncs are a set of functions that register APIs to the scheme
AddToSchemeFuncs []AddToSchemeFunc AddToSchemeFuncs []AddToSchemeFunc
// DefaulterFunc is a function that based on the internal kubeadm configuration defaults the ComponentConfig struct // DefaulterFunc is a function that based on the internal kubeadm configuration defaults the ComponentConfig struct
DefaulterFunc func(*kubeadmapi.MasterConfiguration) DefaulterFunc func(*kubeadmapi.InitConfiguration)
// ValidateFunc is a function that should validate the ComponentConfig type embedded in the internal kubeadm config struct // ValidateFunc is a function that should validate the ComponentConfig type embedded in the internal kubeadm config struct
ValidateFunc func(*kubeadmapi.MasterConfiguration, *field.Path) field.ErrorList ValidateFunc func(*kubeadmapi.InitConfiguration, *field.Path) field.ErrorList
// EmptyValue holds a pointer to an empty struct of the internal ComponentConfig type // EmptyValue holds a pointer to an empty struct of the internal ComponentConfig type
EmptyValue runtime.Object EmptyValue runtime.Object
// GetFromInternalConfig returns the pointer to the ComponentConfig API object from the internal kubeadm config struct // GetFromInternalConfig returns the pointer to the ComponentConfig API object from the internal kubeadm config struct
GetFromInternalConfig func(*kubeadmapi.MasterConfiguration) (runtime.Object, bool) GetFromInternalConfig func(*kubeadmapi.InitConfiguration) (runtime.Object, bool)
// SetToInternalConfig sets the pointer to a ComponentConfig API object embedded in the internal kubeadm config struct // SetToInternalConfig sets the pointer to a ComponentConfig API object embedded in the internal kubeadm config struct
SetToInternalConfig func(runtime.Object, *kubeadmapi.MasterConfiguration) bool SetToInternalConfig func(runtime.Object, *kubeadmapi.InitConfiguration) bool
} }
// Marshal marshals obj to bytes for the current Registration // Marshal marshals obj to bytes for the current Registration
@ -89,10 +89,10 @@ var Known Registrations = map[RegistrationKind]Registration{
DefaulterFunc: DefaultKubeProxyConfiguration, DefaulterFunc: DefaultKubeProxyConfiguration,
ValidateFunc: ValidateKubeProxyConfiguration, ValidateFunc: ValidateKubeProxyConfiguration,
EmptyValue: &kubeproxyconfig.KubeProxyConfiguration{}, EmptyValue: &kubeproxyconfig.KubeProxyConfiguration{},
GetFromInternalConfig: func(cfg *kubeadmapi.MasterConfiguration) (runtime.Object, bool) { GetFromInternalConfig: func(cfg *kubeadmapi.InitConfiguration) (runtime.Object, bool) {
return cfg.ComponentConfigs.KubeProxy, cfg.ComponentConfigs.KubeProxy != nil return cfg.ComponentConfigs.KubeProxy, cfg.ComponentConfigs.KubeProxy != nil
}, },
SetToInternalConfig: func(obj runtime.Object, cfg *kubeadmapi.MasterConfiguration) bool { SetToInternalConfig: func(obj runtime.Object, cfg *kubeadmapi.InitConfiguration) bool {
kubeproxyConfig, ok := obj.(*kubeproxyconfig.KubeProxyConfiguration) kubeproxyConfig, ok := obj.(*kubeproxyconfig.KubeProxyConfiguration)
if ok { if ok {
cfg.ComponentConfigs.KubeProxy = kubeproxyConfig cfg.ComponentConfigs.KubeProxy = kubeproxyConfig
@ -106,10 +106,10 @@ var Known Registrations = map[RegistrationKind]Registration{
DefaulterFunc: DefaultKubeletConfiguration, DefaulterFunc: DefaultKubeletConfiguration,
ValidateFunc: ValidateKubeletConfiguration, ValidateFunc: ValidateKubeletConfiguration,
EmptyValue: &kubeletconfig.KubeletConfiguration{}, EmptyValue: &kubeletconfig.KubeletConfiguration{},
GetFromInternalConfig: func(cfg *kubeadmapi.MasterConfiguration) (runtime.Object, bool) { GetFromInternalConfig: func(cfg *kubeadmapi.InitConfiguration) (runtime.Object, bool) {
return cfg.ComponentConfigs.Kubelet, cfg.ComponentConfigs.Kubelet != nil return cfg.ComponentConfigs.Kubelet, cfg.ComponentConfigs.Kubelet != nil
}, },
SetToInternalConfig: func(obj runtime.Object, cfg *kubeadmapi.MasterConfiguration) bool { SetToInternalConfig: func(obj runtime.Object, cfg *kubeadmapi.InitConfiguration) bool {
kubeletConfig, ok := obj.(*kubeletconfig.KubeletConfiguration) kubeletConfig, ok := obj.(*kubeletconfig.KubeletConfiguration)
if ok { if ok {
cfg.ComponentConfigs.Kubelet = kubeletConfig cfg.ComponentConfigs.Kubelet = kubeletConfig
@ -132,14 +132,14 @@ func (rs *Registrations) AddToScheme(scheme *runtime.Scheme) error {
} }
// Default applies to the ComponentConfig defaults to the internal kubeadm API type // Default applies to the ComponentConfig defaults to the internal kubeadm API type
func (rs *Registrations) Default(internalcfg *kubeadmapi.MasterConfiguration) { func (rs *Registrations) Default(internalcfg *kubeadmapi.InitConfiguration) {
for _, registration := range *rs { for _, registration := range *rs {
registration.DefaulterFunc(internalcfg) registration.DefaulterFunc(internalcfg)
} }
} }
// Validate validates the ComponentConfig parts of the internal kubeadm API type // Validate validates the ComponentConfig parts of the internal kubeadm API type
func (rs *Registrations) Validate(internalcfg *kubeadmapi.MasterConfiguration) field.ErrorList { func (rs *Registrations) Validate(internalcfg *kubeadmapi.InitConfiguration) field.ErrorList {
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
for kind, registration := range *rs { for kind, registration := range *rs {
allErrs = append(allErrs, registration.ValidateFunc(internalcfg, field.NewPath(string(kind)))...) allErrs = append(allErrs, registration.ValidateFunc(internalcfg, field.NewPath(string(kind)))...)

View File

@ -24,7 +24,7 @@ import (
) )
// ValidateKubeProxyConfiguration validates proxy configuration and collects all encountered errors // ValidateKubeProxyConfiguration validates proxy configuration and collects all encountered errors
func ValidateKubeProxyConfiguration(internalcfg *kubeadmapi.MasterConfiguration, _ *field.Path) field.ErrorList { func ValidateKubeProxyConfiguration(internalcfg *kubeadmapi.InitConfiguration, _ *field.Path) field.ErrorList {
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
if internalcfg.ComponentConfigs.KubeProxy == nil { if internalcfg.ComponentConfigs.KubeProxy == nil {
return allErrs return allErrs
@ -33,7 +33,7 @@ func ValidateKubeProxyConfiguration(internalcfg *kubeadmapi.MasterConfiguration,
} }
// ValidateKubeletConfiguration validates kubelet configuration and collects all encountered errors // ValidateKubeletConfiguration validates kubelet configuration and collects all encountered errors
func ValidateKubeletConfiguration(internalcfg *kubeadmapi.MasterConfiguration, fldPath *field.Path) field.ErrorList { func ValidateKubeletConfiguration(internalcfg *kubeadmapi.InitConfiguration, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
if internalcfg.ComponentConfigs.Kubelet == nil { if internalcfg.ComponentConfigs.Kubelet == nil {
return allErrs return allErrs

View File

@ -30,12 +30,12 @@ import (
func TestValidateKubeProxyConfiguration(t *testing.T) { func TestValidateKubeProxyConfiguration(t *testing.T) {
var tests = []struct { var tests = []struct {
masterConfig *kubeadm.MasterConfiguration masterConfig *kubeadm.InitConfiguration
msg string msg string
expectErr bool expectErr bool
}{ }{
{ {
masterConfig: &kubeadm.MasterConfiguration{ masterConfig: &kubeadm.InitConfiguration{
ComponentConfigs: kubeadm.ComponentConfigs{ ComponentConfigs: kubeadm.ComponentConfigs{
KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{ KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{
BindAddress: "192.168.59.103", BindAddress: "192.168.59.103",
@ -66,7 +66,7 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
expectErr: false, expectErr: false,
}, },
{ {
masterConfig: &kubeadm.MasterConfiguration{ masterConfig: &kubeadm.InitConfiguration{
ComponentConfigs: kubeadm.ComponentConfigs{ ComponentConfigs: kubeadm.ComponentConfigs{
KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{ KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{
// only BindAddress is invalid // only BindAddress is invalid
@ -99,7 +99,7 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
expectErr: true, expectErr: true,
}, },
{ {
masterConfig: &kubeadm.MasterConfiguration{ masterConfig: &kubeadm.InitConfiguration{
ComponentConfigs: kubeadm.ComponentConfigs{ ComponentConfigs: kubeadm.ComponentConfigs{
KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{ KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{
BindAddress: "10.10.12.11", BindAddress: "10.10.12.11",
@ -132,7 +132,7 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
expectErr: true, expectErr: true,
}, },
{ {
masterConfig: &kubeadm.MasterConfiguration{ masterConfig: &kubeadm.InitConfiguration{
ComponentConfigs: kubeadm.ComponentConfigs{ ComponentConfigs: kubeadm.ComponentConfigs{
KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{ KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{
BindAddress: "10.10.12.11", BindAddress: "10.10.12.11",
@ -165,7 +165,7 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
expectErr: true, expectErr: true,
}, },
{ {
masterConfig: &kubeadm.MasterConfiguration{ masterConfig: &kubeadm.InitConfiguration{
ComponentConfigs: kubeadm.ComponentConfigs{ ComponentConfigs: kubeadm.ComponentConfigs{
KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{ KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{
BindAddress: "10.10.12.11", BindAddress: "10.10.12.11",
@ -198,7 +198,7 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
expectErr: true, expectErr: true,
}, },
{ {
masterConfig: &kubeadm.MasterConfiguration{ masterConfig: &kubeadm.InitConfiguration{
ComponentConfigs: kubeadm.ComponentConfigs{ ComponentConfigs: kubeadm.ComponentConfigs{
KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{ KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{
BindAddress: "10.10.12.11", BindAddress: "10.10.12.11",
@ -231,7 +231,7 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
expectErr: true, expectErr: true,
}, },
{ {
masterConfig: &kubeadm.MasterConfiguration{ masterConfig: &kubeadm.InitConfiguration{
ComponentConfigs: kubeadm.ComponentConfigs{ ComponentConfigs: kubeadm.ComponentConfigs{
KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{ KubeProxy: &kubeproxyconfig.KubeProxyConfiguration{
BindAddress: "10.10.12.11", BindAddress: "10.10.12.11",
@ -277,11 +277,11 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
func TestValidateKubeletConfiguration(t *testing.T) { func TestValidateKubeletConfiguration(t *testing.T) {
var tests = []struct { var tests = []struct {
masterConfig *kubeadm.MasterConfiguration masterConfig *kubeadm.InitConfiguration
expectErr bool expectErr bool
}{ }{
{ {
masterConfig: &kubeadm.MasterConfiguration{ masterConfig: &kubeadm.InitConfiguration{
ComponentConfigs: kubeadm.ComponentConfigs{ ComponentConfigs: kubeadm.ComponentConfigs{
Kubelet: &kubeletconfig.KubeletConfiguration{ Kubelet: &kubeletconfig.KubeletConfiguration{
CgroupsPerQOS: true, CgroupsPerQOS: true,
@ -312,7 +312,7 @@ func TestValidateKubeletConfiguration(t *testing.T) {
expectErr: false, expectErr: false,
}, },
{ {
masterConfig: &kubeadm.MasterConfiguration{ masterConfig: &kubeadm.InitConfiguration{
ComponentConfigs: kubeadm.ComponentConfigs{ ComponentConfigs: kubeadm.ComponentConfigs{
Kubelet: &kubeletconfig.KubeletConfiguration{ Kubelet: &kubeletconfig.KubeletConfiguration{
CgroupsPerQOS: false, CgroupsPerQOS: false,

View File

@ -186,11 +186,11 @@ const (
// init/join time for use later. kubeadm annotates the node object with this information // init/join time for use later. kubeadm annotates the node object with this information
AnnotationKubeadmCRISocket = "kubeadm.alpha.kubernetes.io/cri-socket" AnnotationKubeadmCRISocket = "kubeadm.alpha.kubernetes.io/cri-socket"
// MasterConfigurationConfigMap specifies in what ConfigMap in the kube-system namespace the `kubeadm init` configuration should be stored // InitConfigurationConfigMap specifies in what ConfigMap in the kube-system namespace the `kubeadm init` configuration should be stored
MasterConfigurationConfigMap = "kubeadm-config" InitConfigurationConfigMap = "kubeadm-config"
// MasterConfigurationConfigMapKey specifies in what ConfigMap key the master configuration should be stored // InitConfigurationConfigMapKey specifies in what ConfigMap key the master configuration should be stored
MasterConfigurationConfigMapKey = "MasterConfiguration" InitConfigurationConfigMapKey = "InitConfiguration"
// KubeletBaseConfigurationConfigMapPrefix specifies in what ConfigMap in the kube-system namespace the initial remote configuration of kubelet should be stored // KubeletBaseConfigurationConfigMapPrefix specifies in what ConfigMap in the kube-system namespace the initial remote configuration of kubelet should be stored
KubeletBaseConfigurationConfigMapPrefix = "kubelet-config-" KubeletBaseConfigurationConfigMapPrefix = "kubelet-config-"
@ -286,10 +286,10 @@ const (
// CoreDNSVersion is the version of CoreDNS to be deployed if it is used // CoreDNSVersion is the version of CoreDNS to be deployed if it is used
CoreDNSVersion = "1.1.3" CoreDNSVersion = "1.1.3"
// MasterConfigurationKind is the string kind value for the MasterConfiguration struct // InitConfigurationKind is the string kind value for the InitConfiguration struct
MasterConfigurationKind = "MasterConfiguration" InitConfigurationKind = "InitConfiguration"
// NodeConfigurationKind is the string kind value for the MasterConfiguration struct // NodeConfigurationKind is the string kind value for the InitConfiguration struct
NodeConfigurationKind = "NodeConfiguration" NodeConfigurationKind = "NodeConfiguration"
// YAMLDocumentSeparator is the separator for YAML documents // YAMLDocumentSeparator is the separator for YAML documents

View File

@ -37,14 +37,14 @@ func GetGenericArchImage(prefix, image, tag string) string {
} }
// GetKubeControlPlaneImageNoOverride generates and returns the image for the core Kubernetes components ignoring the unified control plane image // GetKubeControlPlaneImageNoOverride generates and returns the image for the core Kubernetes components ignoring the unified control plane image
func GetKubeControlPlaneImageNoOverride(image string, cfg *kubeadmapi.MasterConfiguration) string { func GetKubeControlPlaneImageNoOverride(image string, cfg *kubeadmapi.InitConfiguration) string {
repoPrefix := cfg.GetControlPlaneImageRepository() repoPrefix := cfg.GetControlPlaneImageRepository()
kubernetesImageTag := kubeadmutil.KubernetesVersionToImageTag(cfg.KubernetesVersion) kubernetesImageTag := kubeadmutil.KubernetesVersionToImageTag(cfg.KubernetesVersion)
return GetGenericArchImage(repoPrefix, image, kubernetesImageTag) return GetGenericArchImage(repoPrefix, image, kubernetesImageTag)
} }
// GetKubeControlPlaneImage generates and returns the image for the core Kubernetes components or returns the unified control plane image if specified // GetKubeControlPlaneImage generates and returns the image for the core Kubernetes components or returns the unified control plane image if specified
func GetKubeControlPlaneImage(image string, cfg *kubeadmapi.MasterConfiguration) string { func GetKubeControlPlaneImage(image string, cfg *kubeadmapi.InitConfiguration) string {
if cfg.UnifiedControlPlaneImage != "" { if cfg.UnifiedControlPlaneImage != "" {
return cfg.UnifiedControlPlaneImage return cfg.UnifiedControlPlaneImage
} }
@ -52,7 +52,7 @@ func GetKubeControlPlaneImage(image string, cfg *kubeadmapi.MasterConfiguration)
} }
// GetEtcdImage generates and returns the image for etcd or returns cfg.Etcd.Local.Image if specified // GetEtcdImage generates and returns the image for etcd or returns cfg.Etcd.Local.Image if specified
func GetEtcdImage(cfg *kubeadmapi.MasterConfiguration) string { func GetEtcdImage(cfg *kubeadmapi.InitConfiguration) string {
if cfg.Etcd.Local != nil && cfg.Etcd.Local.Image != "" { if cfg.Etcd.Local != nil && cfg.Etcd.Local.Image != "" {
return cfg.Etcd.Local.Image return cfg.Etcd.Local.Image
} }
@ -65,7 +65,7 @@ func GetEtcdImage(cfg *kubeadmapi.MasterConfiguration) string {
} }
// GetAllImages returns a list of container images kubeadm expects to use on a control plane node // GetAllImages returns a list of container images kubeadm expects to use on a control plane node
func GetAllImages(cfg *kubeadmapi.MasterConfiguration) []string { func GetAllImages(cfg *kubeadmapi.InitConfiguration) []string {
imgs := []string{} imgs := []string{}
imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeAPIServer, cfg)) imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeAPIServer, cfg))
imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeControllerManager, cfg)) imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeControllerManager, cfg))

View File

@ -49,13 +49,13 @@ func TestGetKubeControlPlaneImageNoOverride(t *testing.T) {
var tests = []struct { var tests = []struct {
image string image string
expected string expected string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
}{ }{
{ {
// UnifiedControlPlaneImage should be ignored by GetKubeImage // UnifiedControlPlaneImage should be ignored by GetKubeImage
image: constants.KubeAPIServer, image: constants.KubeAPIServer,
expected: GetGenericArchImage(gcrPrefix, "kube-apiserver", expected), expected: GetGenericArchImage(gcrPrefix, "kube-apiserver", expected),
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
UnifiedControlPlaneImage: "nooverride", UnifiedControlPlaneImage: "nooverride",
ImageRepository: gcrPrefix, ImageRepository: gcrPrefix,
KubernetesVersion: testversion, KubernetesVersion: testversion,
@ -64,7 +64,7 @@ func TestGetKubeControlPlaneImageNoOverride(t *testing.T) {
{ {
image: constants.KubeAPIServer, image: constants.KubeAPIServer,
expected: GetGenericArchImage(gcrPrefix, "kube-apiserver", expected), expected: GetGenericArchImage(gcrPrefix, "kube-apiserver", expected),
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ImageRepository: gcrPrefix, ImageRepository: gcrPrefix,
KubernetesVersion: testversion, KubernetesVersion: testversion,
}, },
@ -72,7 +72,7 @@ func TestGetKubeControlPlaneImageNoOverride(t *testing.T) {
{ {
image: constants.KubeControllerManager, image: constants.KubeControllerManager,
expected: GetGenericArchImage(gcrPrefix, "kube-controller-manager", expected), expected: GetGenericArchImage(gcrPrefix, "kube-controller-manager", expected),
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ImageRepository: gcrPrefix, ImageRepository: gcrPrefix,
KubernetesVersion: testversion, KubernetesVersion: testversion,
}, },
@ -80,7 +80,7 @@ func TestGetKubeControlPlaneImageNoOverride(t *testing.T) {
{ {
image: constants.KubeScheduler, image: constants.KubeScheduler,
expected: GetGenericArchImage(gcrPrefix, "kube-scheduler", expected), expected: GetGenericArchImage(gcrPrefix, "kube-scheduler", expected),
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ImageRepository: gcrPrefix, ImageRepository: gcrPrefix,
KubernetesVersion: testversion, KubernetesVersion: testversion,
}, },
@ -102,18 +102,18 @@ func TestGetKubeControlPlaneImage(t *testing.T) {
var tests = []struct { var tests = []struct {
image string image string
expected string expected string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
}{ }{
{ {
expected: "override", expected: "override",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
UnifiedControlPlaneImage: "override", UnifiedControlPlaneImage: "override",
}, },
}, },
{ {
image: constants.KubeAPIServer, image: constants.KubeAPIServer,
expected: GetGenericArchImage(gcrPrefix, "kube-apiserver", expected), expected: GetGenericArchImage(gcrPrefix, "kube-apiserver", expected),
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ImageRepository: gcrPrefix, ImageRepository: gcrPrefix,
KubernetesVersion: testversion, KubernetesVersion: testversion,
}, },
@ -121,7 +121,7 @@ func TestGetKubeControlPlaneImage(t *testing.T) {
{ {
image: constants.KubeControllerManager, image: constants.KubeControllerManager,
expected: GetGenericArchImage(gcrPrefix, "kube-controller-manager", expected), expected: GetGenericArchImage(gcrPrefix, "kube-controller-manager", expected),
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ImageRepository: gcrPrefix, ImageRepository: gcrPrefix,
KubernetesVersion: testversion, KubernetesVersion: testversion,
}, },
@ -129,7 +129,7 @@ func TestGetKubeControlPlaneImage(t *testing.T) {
{ {
image: constants.KubeScheduler, image: constants.KubeScheduler,
expected: GetGenericArchImage(gcrPrefix, "kube-scheduler", expected), expected: GetGenericArchImage(gcrPrefix, "kube-scheduler", expected),
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ImageRepository: gcrPrefix, ImageRepository: gcrPrefix,
KubernetesVersion: testversion, KubernetesVersion: testversion,
}, },
@ -150,11 +150,11 @@ func TestGetKubeControlPlaneImage(t *testing.T) {
func TestGetEtcdImage(t *testing.T) { func TestGetEtcdImage(t *testing.T) {
var tests = []struct { var tests = []struct {
expected string expected string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
}{ }{
{ {
expected: "override", expected: "override",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
Image: "override", Image: "override",
@ -164,7 +164,7 @@ func TestGetEtcdImage(t *testing.T) {
}, },
{ {
expected: GetGenericArchImage(gcrPrefix, "etcd", constants.DefaultEtcdVersion), expected: GetGenericArchImage(gcrPrefix, "etcd", constants.DefaultEtcdVersion),
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ImageRepository: gcrPrefix, ImageRepository: gcrPrefix,
KubernetesVersion: testversion, KubernetesVersion: testversion,
}, },
@ -185,26 +185,26 @@ func TestGetEtcdImage(t *testing.T) {
func TestGetAllImages(t *testing.T) { func TestGetAllImages(t *testing.T) {
testcases := []struct { testcases := []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
expect string expect string
}{ }{
{ {
name: "defined CIImageRepository", name: "defined CIImageRepository",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
CIImageRepository: "test.repo", CIImageRepository: "test.repo",
}, },
expect: "test.repo", expect: "test.repo",
}, },
{ {
name: "undefined CIImagerRepository should contain the default image prefix", name: "undefined CIImagerRepository should contain the default image prefix",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ImageRepository: "real.repo", ImageRepository: "real.repo",
}, },
expect: "real.repo", expect: "real.repo",
}, },
{ {
name: "test that etcd is returned when it is not external", name: "test that etcd is returned when it is not external",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{}, Local: &kubeadmapi.LocalEtcd{},
}, },

View File

@ -70,14 +70,14 @@ func DeployedDNSAddon(client clientset.Interface) (string, string, error) {
} }
// EnsureDNSAddon creates the kube-dns or CoreDNS addon // EnsureDNSAddon creates the kube-dns or CoreDNS addon
func EnsureDNSAddon(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error { func EnsureDNSAddon(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error {
if features.Enabled(cfg.FeatureGates, features.CoreDNS) { if features.Enabled(cfg.FeatureGates, features.CoreDNS) {
return coreDNSAddon(cfg, client) return coreDNSAddon(cfg, client)
} }
return kubeDNSAddon(cfg, client) return kubeDNSAddon(cfg, client)
} }
func kubeDNSAddon(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error { func kubeDNSAddon(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error {
if err := CreateServiceAccount(client); err != nil { if err := CreateServiceAccount(client); err != nil {
return err return err
} }
@ -150,7 +150,7 @@ func createKubeDNSAddon(deploymentBytes, serviceBytes []byte, client clientset.I
return createDNSService(kubednsService, serviceBytes, client) return createDNSService(kubednsService, serviceBytes, client)
} }
func coreDNSAddon(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error { func coreDNSAddon(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error {
// Get the YAML manifest // Get the YAML manifest
coreDNSDeploymentBytes, err := kubeadmutil.ParseTemplate(CoreDNSDeployment, struct{ ImageRepository, MasterTaintKey, Version string }{ coreDNSDeploymentBytes, err := kubeadmutil.ParseTemplate(CoreDNSDeployment, struct{ ImageRepository, MasterTaintKey, Version string }{
ImageRepository: cfg.ImageRepository, ImageRepository: cfg.ImageRepository,

View File

@ -45,7 +45,7 @@ const (
) )
// EnsureProxyAddon creates the kube-proxy addons // EnsureProxyAddon creates the kube-proxy addons
func EnsureProxyAddon(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error { func EnsureProxyAddon(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error {
if err := CreateServiceAccount(client); err != nil { if err := CreateServiceAccount(client); err != nil {
return fmt.Errorf("error when creating kube-proxy service account: %v", err) return fmt.Errorf("error when creating kube-proxy service account: %v", err)
} }

View File

@ -174,7 +174,7 @@ func TestEnsureProxyAddon(t *testing.T) {
// Create a fake client and set up default test configuration // Create a fake client and set up default test configuration
client := clientsetfake.NewSimpleClientset() client := clientsetfake.NewSimpleClientset()
// TODO: Consider using a YAML file instead for this that makes it possible to specify YAML documents for the ComponentConfigs // TODO: Consider using a YAML file instead for this that makes it possible to specify YAML documents for the ComponentConfigs
masterConfig := &kubeadmapiv1alpha3.MasterConfiguration{ masterConfig := &kubeadmapiv1alpha3.InitConfiguration{
API: kubeadmapiv1alpha3.API{ API: kubeadmapiv1alpha3.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
BindPort: 1234, BindPort: 1234,

View File

@ -33,9 +33,9 @@ import (
// CreatePKIAssets will create and write to disk all PKI assets necessary to establish the control plane. // CreatePKIAssets will create and write to disk all PKI assets necessary to establish the control plane.
// If the PKI assets already exists in the target folder, they are used only if evaluated equal; otherwise an error is returned. // If the PKI assets already exists in the target folder, they are used only if evaluated equal; otherwise an error is returned.
func CreatePKIAssets(cfg *kubeadmapi.MasterConfiguration) error { func CreatePKIAssets(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating PKI assets") glog.V(1).Infoln("creating PKI assets")
certActions := []func(cfg *kubeadmapi.MasterConfiguration) error{ certActions := []func(cfg *kubeadmapi.InitConfiguration) error{
CreateCACertAndKeyFiles, CreateCACertAndKeyFiles,
CreateAPIServerCertAndKeyFiles, CreateAPIServerCertAndKeyFiles,
CreateAPIServerKubeletClientCertAndKeyFiles, CreateAPIServerKubeletClientCertAndKeyFiles,
@ -43,7 +43,7 @@ func CreatePKIAssets(cfg *kubeadmapi.MasterConfiguration) error {
CreateFrontProxyCACertAndKeyFiles, CreateFrontProxyCACertAndKeyFiles,
CreateFrontProxyClientCertAndKeyFiles, CreateFrontProxyClientCertAndKeyFiles,
} }
etcdCertActions := []func(cfg *kubeadmapi.MasterConfiguration) error{ etcdCertActions := []func(cfg *kubeadmapi.InitConfiguration) error{
CreateEtcdCACertAndKeyFiles, CreateEtcdCACertAndKeyFiles,
CreateEtcdServerCertAndKeyFiles, CreateEtcdServerCertAndKeyFiles,
CreateEtcdPeerCertAndKeyFiles, CreateEtcdPeerCertAndKeyFiles,
@ -69,7 +69,7 @@ func CreatePKIAssets(cfg *kubeadmapi.MasterConfiguration) error {
// CreateCACertAndKeyFiles create a new self signed cluster CA certificate and key files. // CreateCACertAndKeyFiles create a new self signed cluster CA certificate and key files.
// If the CA certificate and key files already exists in the target folder, they are used only if evaluated equal; otherwise an error is returned. // If the CA certificate and key files already exists in the target folder, they are used only if evaluated equal; otherwise an error is returned.
func CreateCACertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateCACertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("create a new self signed cluster CA certificate and key files") glog.V(1).Infoln("create a new self signed cluster CA certificate and key files")
caCert, caKey, err := NewCACertAndKey() caCert, caKey, err := NewCACertAndKey()
if err != nil { if err != nil {
@ -87,7 +87,7 @@ func CreateCACertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error {
// CreateAPIServerCertAndKeyFiles create a new certificate and key files for the apiserver. // CreateAPIServerCertAndKeyFiles create a new certificate and key files for the apiserver.
// If the apiserver certificate and key files already exists in the target folder, they are used only if evaluated equal; otherwise an error is returned. // If the apiserver certificate and key files already exists in the target folder, they are used only if evaluated equal; otherwise an error is returned.
// It assumes the cluster CA certificate and key files exist in the CertificatesDir. // It assumes the cluster CA certificate and key files exist in the CertificatesDir.
func CreateAPIServerCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateAPIServerCertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a new certificate and key files for the apiserver") glog.V(1).Infoln("creating a new certificate and key files for the apiserver")
caCert, caKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName) caCert, caKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName)
if err != nil { if err != nil {
@ -111,7 +111,7 @@ func CreateAPIServerCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error {
// CreateAPIServerKubeletClientCertAndKeyFiles create a new certificate for kubelets calling apiserver. // CreateAPIServerKubeletClientCertAndKeyFiles create a new certificate for kubelets calling apiserver.
// If the apiserver-kubelet-client certificate and key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned. // If the apiserver-kubelet-client certificate and key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned.
// It assumes the cluster CA certificate and key files exist in the CertificatesDir. // It assumes the cluster CA certificate and key files exist in the CertificatesDir.
func CreateAPIServerKubeletClientCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateAPIServerKubeletClientCertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a new certificate for kubelets calling apiserver") glog.V(1).Infoln("creating a new certificate for kubelets calling apiserver")
caCert, caKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName) caCert, caKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName)
if err != nil { if err != nil {
@ -136,7 +136,7 @@ func CreateAPIServerKubeletClientCertAndKeyFiles(cfg *kubeadmapi.MasterConfigura
// The etcd CA and client certs are used to secure communication between etcd peers and connections to etcd from the API server. // The etcd CA and client certs are used to secure communication between etcd peers and connections to etcd from the API server.
// This is a separate CA, so that kubernetes client identities cannot connect to etcd directly or peer with the etcd cluster. // This is a separate CA, so that kubernetes client identities cannot connect to etcd directly or peer with the etcd cluster.
// If the etcd CA certificate and key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned. // If the etcd CA certificate and key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned.
func CreateEtcdCACertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateEtcdCACertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a self signed etcd CA certificate and key files") glog.V(1).Infoln("creating a self signed etcd CA certificate and key files")
etcdCACert, etcdCAKey, err := NewEtcdCACertAndKey() etcdCACert, etcdCAKey, err := NewEtcdCACertAndKey()
if err != nil { if err != nil {
@ -154,7 +154,7 @@ func CreateEtcdCACertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error {
// CreateEtcdServerCertAndKeyFiles create a new certificate and key file for etcd. // CreateEtcdServerCertAndKeyFiles create a new certificate and key file for etcd.
// If the etcd serving certificate and key file already exist in the target folder, they are used only if evaluated equal; otherwise an error is returned. // If the etcd serving certificate and key file already exist in the target folder, they are used only if evaluated equal; otherwise an error is returned.
// It assumes the etcd CA certificate and key file exist in the CertificatesDir // It assumes the etcd CA certificate and key file exist in the CertificatesDir
func CreateEtcdServerCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateEtcdServerCertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a new server certificate and key files for etcd") glog.V(1).Infoln("creating a new server certificate and key files for etcd")
etcdCACert, etcdCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.EtcdCACertAndKeyBaseName) etcdCACert, etcdCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.EtcdCACertAndKeyBaseName)
if err != nil { if err != nil {
@ -178,7 +178,7 @@ func CreateEtcdServerCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error
// CreateEtcdPeerCertAndKeyFiles create a new certificate and key file for etcd peering. // CreateEtcdPeerCertAndKeyFiles create a new certificate and key file for etcd peering.
// If the etcd peer certificate and key file already exist in the target folder, they are used only if evaluated equal; otherwise an error is returned. // If the etcd peer certificate and key file already exist in the target folder, they are used only if evaluated equal; otherwise an error is returned.
// It assumes the etcd CA certificate and key file exist in the CertificatesDir // It assumes the etcd CA certificate and key file exist in the CertificatesDir
func CreateEtcdPeerCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateEtcdPeerCertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a new certificate and key files for etcd peering") glog.V(1).Infoln("creating a new certificate and key files for etcd peering")
etcdCACert, etcdCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.EtcdCACertAndKeyBaseName) etcdCACert, etcdCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.EtcdCACertAndKeyBaseName)
if err != nil { if err != nil {
@ -202,7 +202,7 @@ func CreateEtcdPeerCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error {
// CreateEtcdHealthcheckClientCertAndKeyFiles create a new client certificate for liveness probes to healthcheck etcd // CreateEtcdHealthcheckClientCertAndKeyFiles create a new client certificate for liveness probes to healthcheck etcd
// If the etcd-healthcheck-client certificate and key file already exist in the target folder, they are used only if evaluated equal; otherwise an error is returned. // If the etcd-healthcheck-client certificate and key file already exist in the target folder, they are used only if evaluated equal; otherwise an error is returned.
// It assumes the etcd CA certificate and key file exist in the CertificatesDir // It assumes the etcd CA certificate and key file exist in the CertificatesDir
func CreateEtcdHealthcheckClientCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateEtcdHealthcheckClientCertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
etcdCACert, etcdCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.EtcdCACertAndKeyBaseName) etcdCACert, etcdCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.EtcdCACertAndKeyBaseName)
if err != nil { if err != nil {
@ -226,7 +226,7 @@ func CreateEtcdHealthcheckClientCertAndKeyFiles(cfg *kubeadmapi.MasterConfigurat
// CreateAPIServerEtcdClientCertAndKeyFiles create a new client certificate for the apiserver calling etcd // CreateAPIServerEtcdClientCertAndKeyFiles create a new client certificate for the apiserver calling etcd
// If the apiserver-etcd-client certificate and key file already exist in the target folder, they are used only if evaluated equal; otherwise an error is returned. // If the apiserver-etcd-client certificate and key file already exist in the target folder, they are used only if evaluated equal; otherwise an error is returned.
// It assumes the etcd CA certificate and key file exist in the CertificatesDir // It assumes the etcd CA certificate and key file exist in the CertificatesDir
func CreateAPIServerEtcdClientCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateAPIServerEtcdClientCertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a new client certificate for the apiserver calling etcd") glog.V(1).Infoln("creating a new client certificate for the apiserver calling etcd")
etcdCACert, etcdCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.EtcdCACertAndKeyBaseName) etcdCACert, etcdCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.EtcdCACertAndKeyBaseName)
if err != nil { if err != nil {
@ -249,7 +249,7 @@ func CreateAPIServerEtcdClientCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguratio
// CreateServiceAccountKeyAndPublicKeyFiles create a new public/private key files for signing service account users. // CreateServiceAccountKeyAndPublicKeyFiles create a new public/private key files for signing service account users.
// If the sa public/private key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned. // If the sa public/private key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned.
func CreateServiceAccountKeyAndPublicKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateServiceAccountKeyAndPublicKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a new public/private key files for signing service account users") glog.V(1).Infoln("creating a new public/private key files for signing service account users")
saSigningKey, err := NewServiceAccountSigningKey() saSigningKey, err := NewServiceAccountSigningKey()
if err != nil { if err != nil {
@ -268,7 +268,7 @@ func CreateServiceAccountKeyAndPublicKeyFiles(cfg *kubeadmapi.MasterConfiguratio
// without the client cert; This is a separate CA, so that front proxy identities cannot hit the API and normal client certs cannot be used // without the client cert; This is a separate CA, so that front proxy identities cannot hit the API and normal client certs cannot be used
// as front proxies. // as front proxies.
// If the front proxy CA certificate and key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned. // If the front proxy CA certificate and key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned.
func CreateFrontProxyCACertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateFrontProxyCACertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a self signed front proxy CA certificate and key files") glog.V(1).Infoln("creating a self signed front proxy CA certificate and key files")
frontProxyCACert, frontProxyCAKey, err := NewFrontProxyCACertAndKey() frontProxyCACert, frontProxyCAKey, err := NewFrontProxyCACertAndKey()
if err != nil { if err != nil {
@ -286,7 +286,7 @@ func CreateFrontProxyCACertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) erro
// CreateFrontProxyClientCertAndKeyFiles create a new certificate for proxy server client. // CreateFrontProxyClientCertAndKeyFiles create a new certificate for proxy server client.
// If the front-proxy-client certificate and key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned. // If the front-proxy-client certificate and key files already exists in the target folder, they are used only if evaluated equals; otherwise an error is returned.
// It assumes the front proxy CA certificate and key files exist in the CertificatesDir. // It assumes the front proxy CA certificate and key files exist in the CertificatesDir.
func CreateFrontProxyClientCertAndKeyFiles(cfg *kubeadmapi.MasterConfiguration) error { func CreateFrontProxyClientCertAndKeyFiles(cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a new certificate for proxy server client") glog.V(1).Infoln("creating a new certificate for proxy server client")
frontProxyCACert, frontProxyCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.FrontProxyCACertAndKeyBaseName) frontProxyCACert, frontProxyCAKey, err := loadCertificateAuthority(cfg.CertificatesDir, kubeadmconstants.FrontProxyCACertAndKeyBaseName)
if err != nil { if err != nil {
@ -319,7 +319,7 @@ func NewCACertAndKey() (*x509.Certificate, *rsa.PrivateKey, error) {
} }
// NewAPIServerCertAndKey generate certificate for apiserver, signed by the given CA. // NewAPIServerCertAndKey generate certificate for apiserver, signed by the given CA.
func NewAPIServerCertAndKey(cfg *kubeadmapi.MasterConfiguration, caCert *x509.Certificate, caKey *rsa.PrivateKey) (*x509.Certificate, *rsa.PrivateKey, error) { func NewAPIServerCertAndKey(cfg *kubeadmapi.InitConfiguration, caCert *x509.Certificate, caKey *rsa.PrivateKey) (*x509.Certificate, *rsa.PrivateKey, error) {
altNames, err := pkiutil.GetAPIServerAltNames(cfg) altNames, err := pkiutil.GetAPIServerAltNames(cfg)
if err != nil { if err != nil {
@ -367,7 +367,7 @@ func NewEtcdCACertAndKey() (*x509.Certificate, *rsa.PrivateKey, error) {
} }
// NewEtcdServerCertAndKey generate certificate for etcd, signed by the given CA. // NewEtcdServerCertAndKey generate certificate for etcd, signed by the given CA.
func NewEtcdServerCertAndKey(cfg *kubeadmapi.MasterConfiguration, caCert *x509.Certificate, caKey *rsa.PrivateKey) (*x509.Certificate, *rsa.PrivateKey, error) { func NewEtcdServerCertAndKey(cfg *kubeadmapi.InitConfiguration, caCert *x509.Certificate, caKey *rsa.PrivateKey) (*x509.Certificate, *rsa.PrivateKey, error) {
altNames, err := pkiutil.GetEtcdAltNames(cfg) altNames, err := pkiutil.GetEtcdAltNames(cfg)
if err != nil { if err != nil {
@ -392,7 +392,7 @@ func NewEtcdServerCertAndKey(cfg *kubeadmapi.MasterConfiguration, caCert *x509.C
} }
// NewEtcdPeerCertAndKey generate certificate for etcd peering, signed by the given CA. // NewEtcdPeerCertAndKey generate certificate for etcd peering, signed by the given CA.
func NewEtcdPeerCertAndKey(cfg *kubeadmapi.MasterConfiguration, caCert *x509.Certificate, caKey *rsa.PrivateKey) (*x509.Certificate, *rsa.PrivateKey, error) { func NewEtcdPeerCertAndKey(cfg *kubeadmapi.InitConfiguration, caCert *x509.Certificate, caKey *rsa.PrivateKey) (*x509.Certificate, *rsa.PrivateKey, error) {
altNames, err := pkiutil.GetEtcdPeerAltNames(cfg) altNames, err := pkiutil.GetEtcdPeerAltNames(cfg)
if err != nil { if err != nil {
@ -624,7 +624,7 @@ type certKeyLocation struct {
// UsingExternalCA determines whether the user is relying on an external CA. We currently implicitly determine this is the case // UsingExternalCA determines whether the user is relying on an external CA. We currently implicitly determine this is the case
// when both the CA Cert and the front proxy CA Cert are present but the CA Key and front proxy CA Key are not. // when both the CA Cert and the front proxy CA Cert are present but the CA Key and front proxy CA Key are not.
// This allows us to, e.g., skip generating certs or not start the csr signing controller. // This allows us to, e.g., skip generating certs or not start the csr signing controller.
func UsingExternalCA(cfg *kubeadmapi.MasterConfiguration) (bool, error) { func UsingExternalCA(cfg *kubeadmapi.InitConfiguration) (bool, error) {
if err := validateCACert(certKeyLocation{cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName, "", "CA"}); err != nil { if err := validateCACert(certKeyLocation{cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName, "", "CA"}); err != nil {
return false, err return false, err

View File

@ -272,7 +272,7 @@ func TestNewAPIServerCertAndKey(t *testing.T) {
advertiseAddresses := []string{"1.2.3.4", "1:2:3::4"} advertiseAddresses := []string{"1.2.3.4", "1:2:3::4"}
for _, addr := range advertiseAddresses { for _, addr := range advertiseAddresses {
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: addr}, API: kubeadmapi.API{AdvertiseAddress: addr},
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: hostname}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: hostname},
@ -323,7 +323,7 @@ func TestNewEtcdServerCertAndKey(t *testing.T) {
proxy := "user-etcd-proxy" proxy := "user-etcd-proxy"
proxyIP := "10.10.10.100" proxyIP := "10.10.10.100"
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
NodeRegistration: kubeadmapi.NodeRegistrationOptions{ NodeRegistration: kubeadmapi.NodeRegistrationOptions{
Name: "etcd-server-cert", Name: "etcd-server-cert",
}, },
@ -359,7 +359,7 @@ func TestNewEtcdPeerCertAndKey(t *testing.T) {
advertiseAddresses := []string{"1.2.3.4", "1:2:3::4"} advertiseAddresses := []string{"1.2.3.4", "1:2:3::4"}
for _, addr := range advertiseAddresses { for _, addr := range advertiseAddresses {
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: addr}, API: kubeadmapi.API{AdvertiseAddress: addr},
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: hostname}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: hostname},
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
@ -460,17 +460,17 @@ func TestNewFrontProxyClientCertAndKey(t *testing.T) {
func TestUsingExternalCA(t *testing.T) { func TestUsingExternalCA(t *testing.T) {
tests := []struct { tests := []struct {
setupFuncs []func(cfg *kubeadmapi.MasterConfiguration) error setupFuncs []func(cfg *kubeadmapi.InitConfiguration) error
expected bool expected bool
}{ }{
{ {
setupFuncs: []func(cfg *kubeadmapi.MasterConfiguration) error{ setupFuncs: []func(cfg *kubeadmapi.InitConfiguration) error{
CreatePKIAssets, CreatePKIAssets,
}, },
expected: false, expected: false,
}, },
{ {
setupFuncs: []func(cfg *kubeadmapi.MasterConfiguration) error{ setupFuncs: []func(cfg *kubeadmapi.InitConfiguration) error{
CreatePKIAssets, CreatePKIAssets,
deleteCAKey, deleteCAKey,
deleteFrontProxyCAKey, deleteFrontProxyCAKey,
@ -483,7 +483,7 @@ func TestUsingExternalCA(t *testing.T) {
dir := testutil.SetupTempDir(t) dir := testutil.SetupTempDir(t)
defer os.RemoveAll(dir) defer os.RemoveAll(dir)
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-hostname"}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-hostname"},
@ -506,14 +506,14 @@ func TestValidateMethods(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
setupFuncs []func(cfg *kubeadmapi.MasterConfiguration) error setupFuncs []func(cfg *kubeadmapi.InitConfiguration) error
validateFunc func(l certKeyLocation) error validateFunc func(l certKeyLocation) error
loc certKeyLocation loc certKeyLocation
expectedSuccess bool expectedSuccess bool
}{ }{
{ {
name: "validateCACert", name: "validateCACert",
setupFuncs: []func(cfg *kubeadmapi.MasterConfiguration) error{ setupFuncs: []func(cfg *kubeadmapi.InitConfiguration) error{
CreateCACertAndKeyFiles, CreateCACertAndKeyFiles,
}, },
validateFunc: validateCACert, validateFunc: validateCACert,
@ -522,7 +522,7 @@ func TestValidateMethods(t *testing.T) {
}, },
{ {
name: "validateCACertAndKey (files present)", name: "validateCACertAndKey (files present)",
setupFuncs: []func(cfg *kubeadmapi.MasterConfiguration) error{ setupFuncs: []func(cfg *kubeadmapi.InitConfiguration) error{
CreateCACertAndKeyFiles, CreateCACertAndKeyFiles,
}, },
validateFunc: validateCACertAndKey, validateFunc: validateCACertAndKey,
@ -531,7 +531,7 @@ func TestValidateMethods(t *testing.T) {
}, },
{ {
name: "validateCACertAndKey (key missing)", name: "validateCACertAndKey (key missing)",
setupFuncs: []func(cfg *kubeadmapi.MasterConfiguration) error{ setupFuncs: []func(cfg *kubeadmapi.InitConfiguration) error{
CreatePKIAssets, CreatePKIAssets,
deleteCAKey, deleteCAKey,
}, },
@ -541,7 +541,7 @@ func TestValidateMethods(t *testing.T) {
}, },
{ {
name: "validateSignedCert", name: "validateSignedCert",
setupFuncs: []func(cfg *kubeadmapi.MasterConfiguration) error{ setupFuncs: []func(cfg *kubeadmapi.InitConfiguration) error{
CreateCACertAndKeyFiles, CreateCACertAndKeyFiles,
CreateAPIServerCertAndKeyFiles, CreateAPIServerCertAndKeyFiles,
}, },
@ -551,7 +551,7 @@ func TestValidateMethods(t *testing.T) {
}, },
{ {
name: "validatePrivatePublicKey", name: "validatePrivatePublicKey",
setupFuncs: []func(cfg *kubeadmapi.MasterConfiguration) error{ setupFuncs: []func(cfg *kubeadmapi.InitConfiguration) error{
CreateServiceAccountKeyAndPublicKeyFiles, CreateServiceAccountKeyAndPublicKeyFiles,
}, },
validateFunc: validatePrivatePublicKey, validateFunc: validatePrivatePublicKey,
@ -566,7 +566,7 @@ func TestValidateMethods(t *testing.T) {
defer os.RemoveAll(dir) defer os.RemoveAll(dir)
test.loc.pkiDir = dir test.loc.pkiDir = dir
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-hostname"}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-hostname"},
@ -590,14 +590,14 @@ func TestValidateMethods(t *testing.T) {
} }
} }
func deleteCAKey(cfg *kubeadmapi.MasterConfiguration) error { func deleteCAKey(cfg *kubeadmapi.InitConfiguration) error {
if err := os.Remove(filepath.Join(cfg.CertificatesDir, kubeadmconstants.CAKeyName)); err != nil { if err := os.Remove(filepath.Join(cfg.CertificatesDir, kubeadmconstants.CAKeyName)); err != nil {
return fmt.Errorf("failed removing %s: %v", kubeadmconstants.CAKeyName, err) return fmt.Errorf("failed removing %s: %v", kubeadmconstants.CAKeyName, err)
} }
return nil return nil
} }
func deleteFrontProxyCAKey(cfg *kubeadmapi.MasterConfiguration) error { func deleteFrontProxyCAKey(cfg *kubeadmapi.InitConfiguration) error {
if err := os.Remove(filepath.Join(cfg.CertificatesDir, kubeadmconstants.FrontProxyCAKeyName)); err != nil { if err := os.Remove(filepath.Join(cfg.CertificatesDir, kubeadmconstants.FrontProxyCAKeyName)); err != nil {
return fmt.Errorf("failed removing %s: %v", kubeadmconstants.FrontProxyCAKeyName, err) return fmt.Errorf("failed removing %s: %v", kubeadmconstants.FrontProxyCAKeyName, err)
} }
@ -607,8 +607,8 @@ func deleteFrontProxyCAKey(cfg *kubeadmapi.MasterConfiguration) error {
func TestCreateCertificateFilesMethods(t *testing.T) { func TestCreateCertificateFilesMethods(t *testing.T) {
var tests = []struct { var tests = []struct {
setupFunc func(cfg *kubeadmapi.MasterConfiguration) error setupFunc func(cfg *kubeadmapi.InitConfiguration) error
createFunc func(cfg *kubeadmapi.MasterConfiguration) error createFunc func(cfg *kubeadmapi.InitConfiguration) error
expectedFiles []string expectedFiles []string
externalEtcd bool externalEtcd bool
}{ }{
@ -698,7 +698,7 @@ func TestCreateCertificateFilesMethods(t *testing.T) {
tmpdir := testutil.SetupTempDir(t) tmpdir := testutil.SetupTempDir(t)
defer os.RemoveAll(tmpdir) defer os.RemoveAll(tmpdir)
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"},
Etcd: kubeadmapi.Etcd{Local: &kubeadmapi.LocalEtcd{}}, Etcd: kubeadmapi.Etcd{Local: &kubeadmapi.LocalEtcd{}},
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},

View File

@ -21,7 +21,7 @@ package certs
PHASE: CERTIFICATES PHASE: CERTIFICATES
INPUTS: INPUTS:
From MasterConfiguration From InitConfiguration
.API.AdvertiseAddress is an optional parameter that can be passed for an extra addition to the SAN IPs .API.AdvertiseAddress is an optional parameter that can be passed for an extra addition to the SAN IPs
.APIServerCertSANs is an optional parameter for adding DNS names and IPs to the API Server serving cert SAN .APIServerCertSANs is an optional parameter for adding DNS names and IPs to the API Server serving cert SAN
.Etcd.Local.ServerCertSANs is an optional parameter for adding DNS names and IPs to the etcd serving cert SAN .Etcd.Local.ServerCertSANs is an optional parameter for adding DNS names and IPs to the etcd serving cert SAN

View File

@ -254,7 +254,7 @@ func pathForPublicKey(pkiPath, name string) string {
} }
// GetAPIServerAltNames builds an AltNames object for to be used when generating apiserver certificate // GetAPIServerAltNames builds an AltNames object for to be used when generating apiserver certificate
func GetAPIServerAltNames(cfg *kubeadmapi.MasterConfiguration) (*certutil.AltNames, error) { func GetAPIServerAltNames(cfg *kubeadmapi.InitConfiguration) (*certutil.AltNames, error) {
// advertise address // advertise address
advertiseAddress := net.ParseIP(cfg.API.AdvertiseAddress) advertiseAddress := net.ParseIP(cfg.API.AdvertiseAddress)
if advertiseAddress == nil { if advertiseAddress == nil {
@ -309,7 +309,7 @@ func GetAPIServerAltNames(cfg *kubeadmapi.MasterConfiguration) (*certutil.AltNam
// `localhost` is included in the SAN since this is the interface the etcd static pod listens on. // `localhost` is included in the SAN since this is the interface the etcd static pod listens on.
// Hostname and `API.AdvertiseAddress` are excluded since etcd does not listen on this interface by default. // Hostname and `API.AdvertiseAddress` are excluded since etcd does not listen on this interface by default.
// The user can override the listen address with `Etcd.ExtraArgs` and add SANs with `Etcd.ServerCertSANs`. // The user can override the listen address with `Etcd.ExtraArgs` and add SANs with `Etcd.ServerCertSANs`.
func GetEtcdAltNames(cfg *kubeadmapi.MasterConfiguration) (*certutil.AltNames, error) { func GetEtcdAltNames(cfg *kubeadmapi.InitConfiguration) (*certutil.AltNames, error) {
// create AltNames with defaults DNSNames/IPs // create AltNames with defaults DNSNames/IPs
altNames := &certutil.AltNames{ altNames := &certutil.AltNames{
DNSNames: []string{cfg.NodeRegistration.Name, "localhost"}, DNSNames: []string{cfg.NodeRegistration.Name, "localhost"},
@ -327,7 +327,7 @@ func GetEtcdAltNames(cfg *kubeadmapi.MasterConfiguration) (*certutil.AltNames, e
// `localhost` is excluded from the SAN since etcd will not refer to itself as a peer. // `localhost` is excluded from the SAN since etcd will not refer to itself as a peer.
// Hostname and `API.AdvertiseAddress` are included if the user chooses to promote the single node etcd cluster into a multi-node one. // Hostname and `API.AdvertiseAddress` are included if the user chooses to promote the single node etcd cluster into a multi-node one.
// The user can override the listen address with `Etcd.ExtraArgs` and add SANs with `Etcd.PeerCertSANs`. // The user can override the listen address with `Etcd.ExtraArgs` and add SANs with `Etcd.PeerCertSANs`.
func GetEtcdPeerAltNames(cfg *kubeadmapi.MasterConfiguration) (*certutil.AltNames, error) { func GetEtcdPeerAltNames(cfg *kubeadmapi.InitConfiguration) (*certutil.AltNames, error) {
// advertise address // advertise address
advertiseAddress := net.ParseIP(cfg.API.AdvertiseAddress) advertiseAddress := net.ParseIP(cfg.API.AdvertiseAddress)
if advertiseAddress == nil { if advertiseAddress == nil {

View File

@ -439,13 +439,13 @@ func TestGetAPIServerAltNames(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
expectedDNSNames []string expectedDNSNames []string
expectedIPAddresses []string expectedIPAddresses []string
}{ }{
{ {
name: "ControlPlaneEndpoint DNS", name: "ControlPlaneEndpoint DNS",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", ControlPlaneEndpoint: "api.k8s.io:6443"}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", ControlPlaneEndpoint: "api.k8s.io:6443"},
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-hostname"}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-hostname"},
@ -456,7 +456,7 @@ func TestGetAPIServerAltNames(t *testing.T) {
}, },
{ {
name: "ControlPlaneEndpoint IP", name: "ControlPlaneEndpoint IP",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", ControlPlaneEndpoint: "4.5.6.7:6443"}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", ControlPlaneEndpoint: "4.5.6.7:6443"},
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-hostname"}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "valid-hostname"},
@ -506,7 +506,7 @@ func TestGetAPIServerAltNames(t *testing.T) {
func TestGetEtcdAltNames(t *testing.T) { func TestGetEtcdAltNames(t *testing.T) {
proxy := "user-etcd-proxy" proxy := "user-etcd-proxy"
proxyIP := "10.10.10.100" proxyIP := "10.10.10.100"
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ServerCertSANs: []string{ ServerCertSANs: []string{
@ -560,7 +560,7 @@ func TestGetEtcdPeerAltNames(t *testing.T) {
proxy := "user-etcd-proxy" proxy := "user-etcd-proxy"
proxyIP := "10.10.10.100" proxyIP := "10.10.10.100"
advertiseIP := "1.2.3.4" advertiseIP := "1.2.3.4"
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: advertiseIP}, API: kubeadmapi.API{AdvertiseAddress: advertiseIP},
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: hostname}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: hostname},
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{

View File

@ -40,32 +40,32 @@ import (
) )
// CreateInitStaticPodManifestFiles will write all static pod manifest files needed to bring up the control plane. // CreateInitStaticPodManifestFiles will write all static pod manifest files needed to bring up the control plane.
func CreateInitStaticPodManifestFiles(manifestDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateInitStaticPodManifestFiles(manifestDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("[controlplane] creating static pod files") glog.V(1).Infoln("[controlplane] creating static pod files")
return createStaticPodFiles(manifestDir, cfg, kubeadmconstants.KubeAPIServer, kubeadmconstants.KubeControllerManager, kubeadmconstants.KubeScheduler) return createStaticPodFiles(manifestDir, cfg, kubeadmconstants.KubeAPIServer, kubeadmconstants.KubeControllerManager, kubeadmconstants.KubeScheduler)
} }
// CreateAPIServerStaticPodManifestFile will write APIserver static pod manifest file. // CreateAPIServerStaticPodManifestFile will write APIserver static pod manifest file.
func CreateAPIServerStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateAPIServerStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating APIserver static pod files") glog.V(1).Infoln("creating APIserver static pod files")
return createStaticPodFiles(manifestDir, cfg, kubeadmconstants.KubeAPIServer) return createStaticPodFiles(manifestDir, cfg, kubeadmconstants.KubeAPIServer)
} }
// CreateControllerManagerStaticPodManifestFile will write controller manager static pod manifest file. // CreateControllerManagerStaticPodManifestFile will write controller manager static pod manifest file.
func CreateControllerManagerStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateControllerManagerStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating controller manager static pod files") glog.V(1).Infoln("creating controller manager static pod files")
return createStaticPodFiles(manifestDir, cfg, kubeadmconstants.KubeControllerManager) return createStaticPodFiles(manifestDir, cfg, kubeadmconstants.KubeControllerManager)
} }
// CreateSchedulerStaticPodManifestFile will write scheduler static pod manifest file. // CreateSchedulerStaticPodManifestFile will write scheduler static pod manifest file.
func CreateSchedulerStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateSchedulerStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating scheduler static pod files") glog.V(1).Infoln("creating scheduler static pod files")
return createStaticPodFiles(manifestDir, cfg, kubeadmconstants.KubeScheduler) return createStaticPodFiles(manifestDir, cfg, kubeadmconstants.KubeScheduler)
} }
// GetStaticPodSpecs returns all staticPodSpecs actualized to the context of the current MasterConfiguration // GetStaticPodSpecs returns all staticPodSpecs actualized to the context of the current InitConfiguration
// NB. this methods holds the information about how kubeadm creates static pod manifests. // NB. this methods holds the information about how kubeadm creates static pod manifests.
func GetStaticPodSpecs(cfg *kubeadmapi.MasterConfiguration, k8sVersion *version.Version) map[string]v1.Pod { func GetStaticPodSpecs(cfg *kubeadmapi.InitConfiguration, k8sVersion *version.Version) map[string]v1.Pod {
// Get the required hostpath mounts // Get the required hostpath mounts
mounts := getHostPathVolumesForTheControlPlane(cfg) mounts := getHostPathVolumesForTheControlPlane(cfg)
@ -106,14 +106,14 @@ func GetStaticPodSpecs(cfg *kubeadmapi.MasterConfiguration, k8sVersion *version.
} }
// createStaticPodFiles creates all the requested static pod files. // createStaticPodFiles creates all the requested static pod files.
func createStaticPodFiles(manifestDir string, cfg *kubeadmapi.MasterConfiguration, componentNames ...string) error { func createStaticPodFiles(manifestDir string, cfg *kubeadmapi.InitConfiguration, componentNames ...string) error {
// TODO: Move the "pkg/util/version".Version object into the internal API instead of always parsing the string // TODO: Move the "pkg/util/version".Version object into the internal API instead of always parsing the string
k8sVersion, err := version.ParseSemantic(cfg.KubernetesVersion) k8sVersion, err := version.ParseSemantic(cfg.KubernetesVersion)
if err != nil { if err != nil {
return err return err
} }
// gets the StaticPodSpecs, actualized for the current MasterConfiguration // gets the StaticPodSpecs, actualized for the current InitConfiguration
glog.V(1).Infoln("[controlplane] getting StaticPodSpecs") glog.V(1).Infoln("[controlplane] getting StaticPodSpecs")
specs := GetStaticPodSpecs(cfg, k8sVersion) specs := GetStaticPodSpecs(cfg, k8sVersion)
@ -137,7 +137,7 @@ func createStaticPodFiles(manifestDir string, cfg *kubeadmapi.MasterConfiguratio
} }
// getAPIServerCommand builds the right API server command from the given config object and version // getAPIServerCommand builds the right API server command from the given config object and version
func getAPIServerCommand(cfg *kubeadmapi.MasterConfiguration) []string { func getAPIServerCommand(cfg *kubeadmapi.InitConfiguration) []string {
defaultArguments := map[string]string{ defaultArguments := map[string]string{
"advertise-address": cfg.API.AdvertiseAddress, "advertise-address": cfg.API.AdvertiseAddress,
"insecure-port": "0", "insecure-port": "0",
@ -274,7 +274,7 @@ func calcNodeCidrSize(podSubnet string) string {
} }
// getControllerManagerCommand builds the right controller manager command from the given config object and version // getControllerManagerCommand builds the right controller manager command from the given config object and version
func getControllerManagerCommand(cfg *kubeadmapi.MasterConfiguration, k8sVersion *version.Version) []string { func getControllerManagerCommand(cfg *kubeadmapi.InitConfiguration, k8sVersion *version.Version) []string {
defaultArguments := map[string]string{ defaultArguments := map[string]string{
"address": "127.0.0.1", "address": "127.0.0.1",
"leader-elect": "true", "leader-elect": "true",
@ -310,7 +310,7 @@ func getControllerManagerCommand(cfg *kubeadmapi.MasterConfiguration, k8sVersion
} }
// getSchedulerCommand builds the right scheduler command from the given config object and version // getSchedulerCommand builds the right scheduler command from the given config object and version
func getSchedulerCommand(cfg *kubeadmapi.MasterConfiguration) []string { func getSchedulerCommand(cfg *kubeadmapi.InitConfiguration) []string {
defaultArguments := map[string]string{ defaultArguments := map[string]string{
"address": "127.0.0.1", "address": "127.0.0.1",
"leader-elect": "true", "leader-elect": "true",

View File

@ -45,7 +45,7 @@ const (
func TestGetStaticPodSpecs(t *testing.T) { func TestGetStaticPodSpecs(t *testing.T) {
// Creates a Master Configuration // Creates a Master Configuration
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
KubernetesVersion: "v1.9.0", KubernetesVersion: "v1.9.0",
} }
@ -89,7 +89,7 @@ func TestGetStaticPodSpecs(t *testing.T) {
func TestCreateStaticPodFilesAndWrappers(t *testing.T) { func TestCreateStaticPodFilesAndWrappers(t *testing.T) {
var tests = []struct { var tests = []struct {
createStaticPodFunction func(outDir string, cfg *kubeadmapi.MasterConfiguration) error createStaticPodFunction func(outDir string, cfg *kubeadmapi.InitConfiguration) error
expectedFiles []string expectedFiles []string
}{ }{
{ // CreateInitStaticPodManifestFiles { // CreateInitStaticPodManifestFiles
@ -117,7 +117,7 @@ func TestCreateStaticPodFilesAndWrappers(t *testing.T) {
defer os.RemoveAll(tmpdir) defer os.RemoveAll(tmpdir)
// Creates a Master Configuration // Creates a Master Configuration
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
KubernetesVersion: "v1.9.0", KubernetesVersion: "v1.9.0",
} }
@ -141,12 +141,12 @@ func TestCreateStaticPodFilesAndWrappers(t *testing.T) {
func TestGetAPIServerCommand(t *testing.T) { func TestGetAPIServerCommand(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
expected []string expected []string
}{ }{
{ {
name: "testing defaults", name: "testing defaults",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
@ -183,7 +183,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "ignores the audit policy if the feature gate is not enabled", name: "ignores the audit policy if the feature gate is not enabled",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "4.3.2.1"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "4.3.2.1"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
@ -225,7 +225,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "ipv6 advertise address", name: "ipv6 advertise address",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "2001:db8::1"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "2001:db8::1"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
@ -262,7 +262,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "an external etcd with custom ca, certs and keys", name: "an external etcd with custom ca, certs and keys",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "2001:db8::1"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "2001:db8::1"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
FeatureGates: map[string]bool{features.HighAvailability: true}, FeatureGates: map[string]bool{features.HighAvailability: true},
@ -309,7 +309,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "an insecure etcd", name: "an insecure etcd",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "2001:db8::1"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "2001:db8::1"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
@ -348,7 +348,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "auditing and HA are enabled with a custom log max age of 0", name: "auditing and HA are enabled with a custom log max age of 0",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "2001:db8::1"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "2001:db8::1"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
FeatureGates: map[string]bool{features.HighAvailability: true, features.Auditing: true}, FeatureGates: map[string]bool{features.HighAvailability: true, features.Auditing: true},
@ -393,7 +393,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "ensure the DynamicKubelet flag gets passed through", name: "ensure the DynamicKubelet flag gets passed through",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
@ -432,7 +432,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "test APIServerExtraArgs works as expected", name: "test APIServerExtraArgs works as expected",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
@ -480,7 +480,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "authorization-mode extra-args ABAC", name: "authorization-mode extra-args ABAC",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
@ -520,7 +520,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "insecure-port extra-args", name: "insecure-port extra-args",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
@ -560,7 +560,7 @@ func TestGetAPIServerCommand(t *testing.T) {
}, },
{ {
name: "authorization-mode extra-args Webhook", name: "authorization-mode extra-args Webhook",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{BindPort: 123, AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "bar"}, Networking: kubeadmapi.Networking{ServiceSubnet: "bar"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
@ -633,12 +633,12 @@ func removeCommon(left, right []string) []string {
func TestGetControllerManagerCommand(t *testing.T) { func TestGetControllerManagerCommand(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
expected []string expected []string
}{ }{
{ {
name: "custom certs dir", name: "custom certs dir",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
KubernetesVersion: "v1.7.0", KubernetesVersion: "v1.7.0",
}, },
@ -657,7 +657,7 @@ func TestGetControllerManagerCommand(t *testing.T) {
}, },
{ {
name: "custom cloudprovider", name: "custom cloudprovider",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16"}, Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
KubernetesVersion: "v1.7.0", KubernetesVersion: "v1.7.0",
@ -680,7 +680,7 @@ func TestGetControllerManagerCommand(t *testing.T) {
}, },
{ {
name: "custom extra-args", name: "custom extra-args",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16"}, Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16"},
ControllerManagerExtraArgs: map[string]string{"node-cidr-mask-size": "20"}, ControllerManagerExtraArgs: map[string]string{"node-cidr-mask-size": "20"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
@ -704,7 +704,7 @@ func TestGetControllerManagerCommand(t *testing.T) {
}, },
{ {
name: "custom IPv6 networking", name: "custom IPv6 networking",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Networking: kubeadmapi.Networking{PodSubnet: "2001:db8::/64"}, Networking: kubeadmapi.Networking{PodSubnet: "2001:db8::/64"},
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
KubernetesVersion: "v1.7.0", KubernetesVersion: "v1.7.0",
@ -817,13 +817,13 @@ func TestGetControllerManagerCommandExternalCA(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
caKeyPresent bool caKeyPresent bool
expectedArgFunc func(dir string) []string expectedArgFunc func(dir string) []string
}{ }{
{ {
name: "caKeyPresent-false", name: "caKeyPresent-false",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
KubernetesVersion: "v1.7.0", KubernetesVersion: "v1.7.0",
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
@ -847,7 +847,7 @@ func TestGetControllerManagerCommandExternalCA(t *testing.T) {
}, },
{ {
name: "caKeyPresent true", name: "caKeyPresent true",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
KubernetesVersion: "v1.7.0", KubernetesVersion: "v1.7.0",
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
@ -904,12 +904,12 @@ func TestGetControllerManagerCommandExternalCA(t *testing.T) {
func TestGetSchedulerCommand(t *testing.T) { func TestGetSchedulerCommand(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
expected []string expected []string
}{ }{
{ {
name: "scheduler defaults", name: "scheduler defaults",
cfg: &kubeadmapi.MasterConfiguration{}, cfg: &kubeadmapi.InitConfiguration{},
expected: []string{ expected: []string{
"kube-scheduler", "kube-scheduler",
"--address=127.0.0.1", "--address=127.0.0.1",

View File

@ -43,7 +43,7 @@ const (
var caCertsExtraVolumePaths = []string{"/etc/pki", "/usr/share/ca-certificates", "/usr/local/share/ca-certificates", "/etc/ca-certificates"} var caCertsExtraVolumePaths = []string{"/etc/pki", "/usr/share/ca-certificates", "/usr/local/share/ca-certificates", "/etc/ca-certificates"}
// getHostPathVolumesForTheControlPlane gets the required hostPath volumes and mounts for the control plane // getHostPathVolumesForTheControlPlane gets the required hostPath volumes and mounts for the control plane
func getHostPathVolumesForTheControlPlane(cfg *kubeadmapi.MasterConfiguration) controlPlaneHostPathMounts { func getHostPathVolumesForTheControlPlane(cfg *kubeadmapi.InitConfiguration) controlPlaneHostPathMounts {
hostPathDirectoryOrCreate := v1.HostPathDirectoryOrCreate hostPathDirectoryOrCreate := v1.HostPathDirectoryOrCreate
hostPathFileOrCreate := v1.HostPathFileOrCreate hostPathFileOrCreate := v1.HostPathFileOrCreate
hostPathFile := v1.HostPathFile hostPathFile := v1.HostPathFile

View File

@ -502,13 +502,13 @@ func TestGetHostPathVolumesForTheControlPlane(t *testing.T) {
ReadOnly: true, ReadOnly: true,
} }
var tests = []struct { var tests = []struct {
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
vol map[string]map[string]v1.Volume vol map[string]map[string]v1.Volume
volMount map[string]map[string]v1.VolumeMount volMount map[string]map[string]v1.VolumeMount
}{ }{
{ {
// Should ignore files in /etc/ssl/certs // Should ignore files in /etc/ssl/certs
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
Etcd: kubeadmapi.Etcd{}, Etcd: kubeadmapi.Etcd{},
FeatureGates: map[string]bool{features.Auditing: true}, FeatureGates: map[string]bool{features.Auditing: true},
@ -522,7 +522,7 @@ func TestGetHostPathVolumesForTheControlPlane(t *testing.T) {
}, },
{ {
// Should ignore files in /etc/ssl/certs and in CertificatesDir // Should ignore files in /etc/ssl/certs and in CertificatesDir
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
External: &kubeadmapi.ExternalEtcd{ External: &kubeadmapi.ExternalEtcd{

View File

@ -36,9 +36,9 @@ const (
) )
// CreateLocalEtcdStaticPodManifestFile will write local etcd static pod manifest file. // CreateLocalEtcdStaticPodManifestFile will write local etcd static pod manifest file.
func CreateLocalEtcdStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateLocalEtcdStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating local etcd static pod manifest file") glog.V(1).Infoln("creating local etcd static pod manifest file")
// gets etcd StaticPodSpec, actualized for the current MasterConfiguration // gets etcd StaticPodSpec, actualized for the current InitConfiguration
spec := GetEtcdPodSpec(cfg) spec := GetEtcdPodSpec(cfg)
// writes etcd StaticPod to disk // writes etcd StaticPod to disk
if err := staticpodutil.WriteStaticPodToDisk(kubeadmconstants.Etcd, manifestDir, spec); err != nil { if err := staticpodutil.WriteStaticPodToDisk(kubeadmconstants.Etcd, manifestDir, spec); err != nil {
@ -49,9 +49,9 @@ func CreateLocalEtcdStaticPodManifestFile(manifestDir string, cfg *kubeadmapi.Ma
return nil return nil
} }
// GetEtcdPodSpec returns the etcd static Pod actualized to the context of the current MasterConfiguration // GetEtcdPodSpec returns the etcd static Pod actualized to the context of the current InitConfiguration
// NB. GetEtcdPodSpec methods holds the information about how kubeadm creates etcd static pod manifests. // NB. GetEtcdPodSpec methods holds the information about how kubeadm creates etcd static pod manifests.
func GetEtcdPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.Pod { func GetEtcdPodSpec(cfg *kubeadmapi.InitConfiguration) v1.Pod {
pathType := v1.HostPathDirectoryOrCreate pathType := v1.HostPathDirectoryOrCreate
etcdMounts := map[string]v1.Volume{ etcdMounts := map[string]v1.Volume{
etcdVolumeName: staticpodutil.NewVolume(etcdVolumeName, cfg.Etcd.Local.DataDir, &pathType), etcdVolumeName: staticpodutil.NewVolume(etcdVolumeName, cfg.Etcd.Local.DataDir, &pathType),
@ -75,7 +75,7 @@ func GetEtcdPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.Pod {
} }
// getEtcdCommand builds the right etcd command from the given config object // getEtcdCommand builds the right etcd command from the given config object
func getEtcdCommand(cfg *kubeadmapi.MasterConfiguration) []string { func getEtcdCommand(cfg *kubeadmapi.InitConfiguration) []string {
defaultArguments := map[string]string{ defaultArguments := map[string]string{
"name": cfg.GetNodeName(), "name": cfg.GetNodeName(),
"listen-client-urls": "https://127.0.0.1:2379", "listen-client-urls": "https://127.0.0.1:2379",

View File

@ -32,7 +32,7 @@ import (
func TestGetEtcdPodSpec(t *testing.T) { func TestGetEtcdPodSpec(t *testing.T) {
// Creates a Master Configuration // Creates a Master Configuration
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
KubernetesVersion: "v1.7.0", KubernetesVersion: "v1.7.0",
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
@ -58,7 +58,7 @@ func TestCreateLocalEtcdStaticPodManifestFile(t *testing.T) {
defer os.RemoveAll(tmpdir) defer os.RemoveAll(tmpdir)
// Creates a Master Configuration // Creates a Master Configuration
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
KubernetesVersion: "v1.7.0", KubernetesVersion: "v1.7.0",
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
@ -82,11 +82,11 @@ func TestCreateLocalEtcdStaticPodManifestFile(t *testing.T) {
func TestGetEtcdCommand(t *testing.T) { func TestGetEtcdCommand(t *testing.T) {
var tests = []struct { var tests = []struct {
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
expected []string expected []string
}{ }{
{ {
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
NodeRegistration: kubeadmapi.NodeRegistrationOptions{ NodeRegistration: kubeadmapi.NodeRegistrationOptions{
Name: "foo", Name: "foo",
}, },
@ -117,7 +117,7 @@ func TestGetEtcdCommand(t *testing.T) {
}, },
}, },
{ {
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
NodeRegistration: kubeadmapi.NodeRegistrationOptions{ NodeRegistration: kubeadmapi.NodeRegistrationOptions{
Name: "bar", Name: "bar",
}, },
@ -152,7 +152,7 @@ func TestGetEtcdCommand(t *testing.T) {
}, },
}, },
{ {
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
NodeRegistration: kubeadmapi.NodeRegistrationOptions{ NodeRegistration: kubeadmapi.NodeRegistrationOptions{
Name: "wombat", Name: "wombat",
}, },

View File

@ -21,7 +21,7 @@ package kubeconfig
PHASE: KUBECONFIG PHASE: KUBECONFIG
INPUTS: INPUTS:
From MasterConfiguration From InitConfiguration
The Master API Server endpoint (AdvertiseAddress + BindPort) is required so the KubeConfig file knows where to find the master The Master API Server endpoint (AdvertiseAddress + BindPort) is required so the KubeConfig file knows where to find the master
The KubernetesDir path is required for knowing where to put the KubeConfig files The KubernetesDir path is required for knowing where to put the KubeConfig files
The PKIPath is required for knowing where all certificates should be stored The PKIPath is required for knowing where all certificates should be stored

View File

@ -61,7 +61,7 @@ type kubeConfigSpec struct {
// CreateInitKubeConfigFiles will create and write to disk all kubeconfig files necessary in the kubeadm init phase // CreateInitKubeConfigFiles will create and write to disk all kubeconfig files necessary in the kubeadm init phase
// to establish the control plane, including also the admin kubeconfig file. // to establish the control plane, including also the admin kubeconfig file.
// If kubeconfig files already exists, they are used only if evaluated equal; otherwise an error is returned. // If kubeconfig files already exists, they are used only if evaluated equal; otherwise an error is returned.
func CreateInitKubeConfigFiles(outDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateInitKubeConfigFiles(outDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating all kubeconfig files") glog.V(1).Infoln("creating all kubeconfig files")
return createKubeConfigFiles( return createKubeConfigFiles(
outDir, outDir,
@ -75,37 +75,37 @@ func CreateInitKubeConfigFiles(outDir string, cfg *kubeadmapi.MasterConfiguratio
// CreateAdminKubeConfigFile create a kubeconfig file for the admin to use and for kubeadm itself. // CreateAdminKubeConfigFile create a kubeconfig file for the admin to use and for kubeadm itself.
// If the kubeconfig file already exists, it is used only if evaluated equal; otherwise an error is returned. // If the kubeconfig file already exists, it is used only if evaluated equal; otherwise an error is returned.
func CreateAdminKubeConfigFile(outDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateAdminKubeConfigFile(outDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("create a kubeconfig file for the admin and for kubeadm itself") glog.V(1).Infoln("create a kubeconfig file for the admin and for kubeadm itself")
return createKubeConfigFiles(outDir, cfg, kubeadmconstants.AdminKubeConfigFileName) return createKubeConfigFiles(outDir, cfg, kubeadmconstants.AdminKubeConfigFileName)
} }
// CreateKubeletKubeConfigFile create a kubeconfig file for the Kubelet to use. // CreateKubeletKubeConfigFile create a kubeconfig file for the Kubelet to use.
// If the kubeconfig file already exists, it is used only if evaluated equal; otherwise an error is returned. // If the kubeconfig file already exists, it is used only if evaluated equal; otherwise an error is returned.
func CreateKubeletKubeConfigFile(outDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateKubeletKubeConfigFile(outDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating a kubeconfig file for the Kubelet") glog.V(1).Infoln("creating a kubeconfig file for the Kubelet")
return createKubeConfigFiles(outDir, cfg, kubeadmconstants.KubeletKubeConfigFileName) return createKubeConfigFiles(outDir, cfg, kubeadmconstants.KubeletKubeConfigFileName)
} }
// CreateControllerManagerKubeConfigFile create a kubeconfig file for the ControllerManager to use. // CreateControllerManagerKubeConfigFile create a kubeconfig file for the ControllerManager to use.
// If the kubeconfig file already exists, it is used only if evaluated equal; otherwise an error is returned. // If the kubeconfig file already exists, it is used only if evaluated equal; otherwise an error is returned.
func CreateControllerManagerKubeConfigFile(outDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateControllerManagerKubeConfigFile(outDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating kubeconfig file for the ControllerManager") glog.V(1).Infoln("creating kubeconfig file for the ControllerManager")
return createKubeConfigFiles(outDir, cfg, kubeadmconstants.ControllerManagerKubeConfigFileName) return createKubeConfigFiles(outDir, cfg, kubeadmconstants.ControllerManagerKubeConfigFileName)
} }
// CreateSchedulerKubeConfigFile create a create a kubeconfig file for the Scheduler to use. // CreateSchedulerKubeConfigFile create a create a kubeconfig file for the Scheduler to use.
// If the kubeconfig file already exists, it is used only if evaluated equal; otherwise an error is returned. // If the kubeconfig file already exists, it is used only if evaluated equal; otherwise an error is returned.
func CreateSchedulerKubeConfigFile(outDir string, cfg *kubeadmapi.MasterConfiguration) error { func CreateSchedulerKubeConfigFile(outDir string, cfg *kubeadmapi.InitConfiguration) error {
glog.V(1).Infoln("creating kubeconfig file for Scheduler") glog.V(1).Infoln("creating kubeconfig file for Scheduler")
return createKubeConfigFiles(outDir, cfg, kubeadmconstants.SchedulerKubeConfigFileName) return createKubeConfigFiles(outDir, cfg, kubeadmconstants.SchedulerKubeConfigFileName)
} }
// createKubeConfigFiles creates all the requested kubeconfig files. // createKubeConfigFiles creates all the requested kubeconfig files.
// If kubeconfig files already exists, they are used only if evaluated equal; otherwise an error is returned. // If kubeconfig files already exists, they are used only if evaluated equal; otherwise an error is returned.
func createKubeConfigFiles(outDir string, cfg *kubeadmapi.MasterConfiguration, kubeConfigFileNames ...string) error { func createKubeConfigFiles(outDir string, cfg *kubeadmapi.InitConfiguration, kubeConfigFileNames ...string) error {
// gets the KubeConfigSpecs, actualized for the current MasterConfiguration // gets the KubeConfigSpecs, actualized for the current InitConfiguration
specs, err := getKubeConfigSpecs(cfg) specs, err := getKubeConfigSpecs(cfg)
if err != nil { if err != nil {
return err return err
@ -133,9 +133,9 @@ func createKubeConfigFiles(outDir string, cfg *kubeadmapi.MasterConfiguration, k
return nil return nil
} }
// getKubeConfigSpecs returns all KubeConfigSpecs actualized to the context of the current MasterConfiguration // getKubeConfigSpecs returns all KubeConfigSpecs actualized to the context of the current InitConfiguration
// NB. this methods holds the information about how kubeadm creates kubeconfig files. // NB. this methods holds the information about how kubeadm creates kubeconfig files.
func getKubeConfigSpecs(cfg *kubeadmapi.MasterConfiguration) (map[string]*kubeConfigSpec, error) { func getKubeConfigSpecs(cfg *kubeadmapi.InitConfiguration) (map[string]*kubeConfigSpec, error) {
caCert, caKey, err := pkiutil.TryLoadCertAndKeyFromDisk(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName) caCert, caKey, err := pkiutil.TryLoadCertAndKeyFromDisk(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName)
if err != nil { if err != nil {
@ -271,9 +271,9 @@ func createKubeConfigFileIfNotExists(outDir, filename string, config *clientcmda
} }
// WriteKubeConfigWithClientCert writes a kubeconfig file - with a client certificate as authentication info - to the given writer. // WriteKubeConfigWithClientCert writes a kubeconfig file - with a client certificate as authentication info - to the given writer.
func WriteKubeConfigWithClientCert(out io.Writer, cfg *kubeadmapi.MasterConfiguration, clientName string, organizations []string) error { func WriteKubeConfigWithClientCert(out io.Writer, cfg *kubeadmapi.InitConfiguration, clientName string, organizations []string) error {
// creates the KubeConfigSpecs, actualized for the current MasterConfiguration // creates the KubeConfigSpecs, actualized for the current InitConfiguration
caCert, caKey, err := pkiutil.TryLoadCertAndKeyFromDisk(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName) caCert, caKey, err := pkiutil.TryLoadCertAndKeyFromDisk(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName)
if err != nil { if err != nil {
return fmt.Errorf("couldn't create a kubeconfig; the CA files couldn't be loaded: %v", err) return fmt.Errorf("couldn't create a kubeconfig; the CA files couldn't be loaded: %v", err)
@ -298,9 +298,9 @@ func WriteKubeConfigWithClientCert(out io.Writer, cfg *kubeadmapi.MasterConfigur
} }
// WriteKubeConfigWithToken writes a kubeconfig file - with a token as client authentication info - to the given writer. // WriteKubeConfigWithToken writes a kubeconfig file - with a token as client authentication info - to the given writer.
func WriteKubeConfigWithToken(out io.Writer, cfg *kubeadmapi.MasterConfiguration, clientName, token string) error { func WriteKubeConfigWithToken(out io.Writer, cfg *kubeadmapi.InitConfiguration, clientName, token string) error {
// creates the KubeConfigSpecs, actualized for the current MasterConfiguration // creates the KubeConfigSpecs, actualized for the current InitConfiguration
caCert, _, err := pkiutil.TryLoadCertAndKeyFromDisk(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName) caCert, _, err := pkiutil.TryLoadCertAndKeyFromDisk(cfg.CertificatesDir, kubeadmconstants.CACertAndKeyBaseName)
if err != nil { if err != nil {
return fmt.Errorf("couldn't create a kubeconfig; the CA files couldn't be loaded: %v", err) return fmt.Errorf("couldn't create a kubeconfig; the CA files couldn't be loaded: %v", err)

View File

@ -46,7 +46,7 @@ func TestGetKubeConfigSpecsFailsIfCADoesntExists(t *testing.T) {
defer os.RemoveAll(tmpdir) defer os.RemoveAll(tmpdir)
// Creates a Master Configuration pointing to the pkidir folder // Creates a Master Configuration pointing to the pkidir folder
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
CertificatesDir: tmpdir, CertificatesDir: tmpdir,
} }
@ -65,7 +65,7 @@ func TestGetKubeConfigSpecs(t *testing.T) {
pkidir := testutil.SetupPkiDirWithCertificateAuthorithy(t, tmpdir) pkidir := testutil.SetupPkiDirWithCertificateAuthorithy(t, tmpdir)
// Creates Master Configurations pointing to the pkidir folder // Creates Master Configurations pointing to the pkidir folder
cfgs := []*kubeadmapi.MasterConfiguration{ cfgs := []*kubeadmapi.InitConfiguration{
{ {
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234},
CertificatesDir: pkidir, CertificatesDir: pkidir,
@ -145,7 +145,7 @@ func TestGetKubeConfigSpecs(t *testing.T) {
t.Errorf("getKubeConfigSpecs for %s Organizations is %v, expected %v", assertion.kubeConfigFile, spec.ClientCertAuth.Organizations, assertion.organizations) t.Errorf("getKubeConfigSpecs for %s Organizations is %v, expected %v", assertion.kubeConfigFile, spec.ClientCertAuth.Organizations, assertion.organizations)
} }
// Asserts MasterConfiguration values injected into spec // Asserts InitConfiguration values injected into spec
masterEndpoint, err := kubeadmutil.GetMasterEndpoint(&cfg.API) masterEndpoint, err := kubeadmutil.GetMasterEndpoint(&cfg.API)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
@ -252,12 +252,12 @@ func TestCreateKubeConfigFileIfNotExists(t *testing.T) {
func TestCreateKubeconfigFilesAndWrappers(t *testing.T) { func TestCreateKubeconfigFilesAndWrappers(t *testing.T) {
var tests = []struct { var tests = []struct {
createKubeConfigFunction func(outDir string, cfg *kubeadmapi.MasterConfiguration) error createKubeConfigFunction func(outDir string, cfg *kubeadmapi.InitConfiguration) error
expectedFiles []string expectedFiles []string
expectedError bool expectedError bool
}{ }{
{ // Test createKubeConfigFiles fails for unknown kubeconfig is requested { // Test createKubeConfigFiles fails for unknown kubeconfig is requested
createKubeConfigFunction: func(outDir string, cfg *kubeadmapi.MasterConfiguration) error { createKubeConfigFunction: func(outDir string, cfg *kubeadmapi.InitConfiguration) error {
return createKubeConfigFiles(outDir, cfg, "unknown.conf") return createKubeConfigFiles(outDir, cfg, "unknown.conf")
}, },
expectedError: true, expectedError: true,
@ -298,7 +298,7 @@ func TestCreateKubeconfigFilesAndWrappers(t *testing.T) {
pkidir := testutil.SetupPkiDirWithCertificateAuthorithy(t, tmpdir) pkidir := testutil.SetupPkiDirWithCertificateAuthorithy(t, tmpdir)
// Creates a Master Configuration pointing to the pkidir folder // Creates a Master Configuration pointing to the pkidir folder
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234},
CertificatesDir: pkidir, CertificatesDir: pkidir,
} }
@ -326,7 +326,7 @@ func TestWriteKubeConfigFailsIfCADoesntExists(t *testing.T) {
defer os.RemoveAll(tmpdir) defer os.RemoveAll(tmpdir)
// Creates a Master Configuration pointing to the tmpdir folder // Creates a Master Configuration pointing to the tmpdir folder
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
CertificatesDir: tmpdir, CertificatesDir: tmpdir,
} }
@ -371,7 +371,7 @@ func TestWriteKubeConfig(t *testing.T) {
} }
// Creates a Master Configuration pointing to the pkidir folder // Creates a Master Configuration pointing to the pkidir folder
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4", BindPort: 1234},
CertificatesDir: pkidir, CertificatesDir: pkidir,
} }

View File

@ -49,7 +49,7 @@ func WriteConfigToDisk(kubeletConfig *kubeletconfig.KubeletConfiguration, kubele
// CreateConfigMap creates a ConfigMap with the generic kubelet configuration. // CreateConfigMap creates a ConfigMap with the generic kubelet configuration.
// Used at "kubeadm init" and "kubeadm upgrade" time // Used at "kubeadm init" and "kubeadm upgrade" time
func CreateConfigMap(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error { func CreateConfigMap(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error {
k8sVersion, err := version.ParseSemantic(cfg.KubernetesVersion) k8sVersion, err := version.ParseSemantic(cfg.KubernetesVersion)
if err != nil { if err != nil {

View File

@ -32,7 +32,7 @@ import (
func TestCreateConfigMap(t *testing.T) { func TestCreateConfigMap(t *testing.T) {
nodeName := "fake-node" nodeName := "fake-node"
client := fake.NewSimpleClientset() client := fake.NewSimpleClientset()
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: nodeName}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: nodeName},
KubernetesVersion: "v1.11.0", KubernetesVersion: "v1.11.0",
ComponentConfigs: kubeadmapi.ComponentConfigs{ ComponentConfigs: kubeadmapi.ComponentConfigs{

View File

@ -62,7 +62,7 @@ func WriteKubeletDynamicEnvFile(nodeRegOpts *kubeadmapi.NodeRegistrationOptions,
return writeKubeletFlagBytesToDisk([]byte(envFileContent), kubeletDir) return writeKubeletFlagBytesToDisk([]byte(envFileContent), kubeletDir)
} }
// buildKubeletArgMap takes a MasterConfiguration object and builds based on that a string-string map with flags // buildKubeletArgMap takes a InitConfiguration object and builds based on that a string-string map with flags
// that should be given to the local kubelet daemon. // that should be given to the local kubelet daemon.
func buildKubeletArgMap(opts kubeletFlagsOpts) map[string]string { func buildKubeletArgMap(opts kubeletFlagsOpts) map[string]string {
kubeletFlags := map[string]string{} kubeletFlags := map[string]string{}

View File

@ -56,7 +56,7 @@ const (
// 8. In order to avoid race conditions, we have to make sure that static pod is deleted correctly before we continue // 8. In order to avoid race conditions, we have to make sure that static pod is deleted correctly before we continue
// Otherwise, there is a race condition when we proceed without kubelet having restarted the API server correctly and the next .Create call flakes // Otherwise, there is a race condition when we proceed without kubelet having restarted the API server correctly and the next .Create call flakes
// 9. Do that for the kube-apiserver, kube-controller-manager and kube-scheduler in a loop // 9. Do that for the kube-apiserver, kube-controller-manager and kube-scheduler in a loop
func CreateSelfHostedControlPlane(manifestsDir, kubeConfigDir string, cfg *kubeadmapi.MasterConfiguration, client clientset.Interface, waiter apiclient.Waiter, dryRun bool) error { func CreateSelfHostedControlPlane(manifestsDir, kubeConfigDir string, cfg *kubeadmapi.InitConfiguration, client clientset.Interface, waiter apiclient.Waiter, dryRun bool) error {
glog.V(1).Infoln("creating self hosted control plane") glog.V(1).Infoln("creating self hosted control plane")
// Adjust the timeout slightly to something self-hosting specific // Adjust the timeout slightly to something self-hosting specific
waiter.SetTimeout(selfHostingWaitTimeout) waiter.SetTimeout(selfHostingWaitTimeout)

View File

@ -50,7 +50,7 @@ var expiry = 180 * 24 * time.Hour
// PerformPostUpgradeTasks runs nearly the same functions as 'kubeadm init' would do // PerformPostUpgradeTasks runs nearly the same functions as 'kubeadm init' would do
// Note that the markmaster phase is left out, not needed, and no token is created as that doesn't belong to the upgrade // Note that the markmaster phase is left out, not needed, and no token is created as that doesn't belong to the upgrade
func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.MasterConfiguration, newK8sVer *version.Version, dryRun bool) error { func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.InitConfiguration, newK8sVer *version.Version, dryRun bool) error {
errs := []error{} errs := []error{}
// Upload currently used configuration to the cluster // Upload currently used configuration to the cluster
@ -70,7 +70,7 @@ func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.MasterC
errs = append(errs, err) errs = append(errs, err)
} }
// Annotate the node with the crisocket information, sourced either from the MasterConfiguration struct or // Annotate the node with the crisocket information, sourced either from the InitConfiguration struct or
// --cri-socket. // --cri-socket.
// TODO: In the future we want to use something more official like NodeStatus or similar for detecting this properly // TODO: In the future we want to use something more official like NodeStatus or similar for detecting this properly
if err := patchnodephase.AnnotateCRISocket(client, cfg.NodeRegistration.Name, cfg.NodeRegistration.CRISocket); err != nil { if err := patchnodephase.AnnotateCRISocket(client, cfg.NodeRegistration.Name, cfg.NodeRegistration.CRISocket); err != nil {
@ -127,7 +127,7 @@ func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.MasterC
return errors.NewAggregate(errs) return errors.NewAggregate(errs)
} }
func removeOldDNSDeploymentIfAnotherDNSIsUsed(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface, dryRun bool) error { func removeOldDNSDeploymentIfAnotherDNSIsUsed(cfg *kubeadmapi.InitConfiguration, client clientset.Interface, dryRun bool) error {
return apiclient.TryRunCommand(func() error { return apiclient.TryRunCommand(func() error {
installedDeploymentName := kubeadmconstants.KubeDNS installedDeploymentName := kubeadmconstants.KubeDNS
deploymentToDelete := kubeadmconstants.CoreDNS deploymentToDelete := kubeadmconstants.CoreDNS
@ -158,7 +158,7 @@ func removeOldDNSDeploymentIfAnotherDNSIsUsed(cfg *kubeadmapi.MasterConfiguratio
}, 10) }, 10)
} }
func upgradeToSelfHosting(client clientset.Interface, cfg *kubeadmapi.MasterConfiguration, dryRun bool) error { func upgradeToSelfHosting(client clientset.Interface, cfg *kubeadmapi.InitConfiguration, dryRun bool) error {
if features.Enabled(cfg.FeatureGates, features.SelfHosting) && !IsControlPlaneSelfHosted(client) { if features.Enabled(cfg.FeatureGates, features.SelfHosting) && !IsControlPlaneSelfHosted(client) {
waiter := getWaiter(dryRun, client) waiter := getWaiter(dryRun, client)
@ -172,7 +172,7 @@ func upgradeToSelfHosting(client clientset.Interface, cfg *kubeadmapi.MasterConf
return nil return nil
} }
func backupAPIServerCertIfNeeded(cfg *kubeadmapi.MasterConfiguration, dryRun bool) error { func backupAPIServerCertIfNeeded(cfg *kubeadmapi.InitConfiguration, dryRun bool) error {
certAndKeyDir := kubeadmapiv1alpha3.DefaultCertificatesDir certAndKeyDir := kubeadmapiv1alpha3.DefaultCertificatesDir
shouldBackup, err := shouldBackupAPIServerCertAndKey(certAndKeyDir) shouldBackup, err := shouldBackupAPIServerCertAndKey(certAndKeyDir)
if err != nil { if err != nil {
@ -198,7 +198,7 @@ func backupAPIServerCertIfNeeded(cfg *kubeadmapi.MasterConfiguration, dryRun boo
return certsphase.CreateAPIServerCertAndKeyFiles(cfg) return certsphase.CreateAPIServerCertAndKeyFiles(cfg)
} }
func writeKubeletConfigFiles(client clientset.Interface, cfg *kubeadmapi.MasterConfiguration, newK8sVer *version.Version, dryRun bool) error { func writeKubeletConfigFiles(client clientset.Interface, cfg *kubeadmapi.InitConfiguration, newK8sVer *version.Version, dryRun bool) error {
kubeletDir, err := getKubeletDir(dryRun) kubeletDir, err := getKubeletDir(dryRun)
if err != nil { if err != nil {
// The error here should never occur in reality, would only be thrown if /tmp doesn't exist on the machine. // The error here should never occur in reality, would only be thrown if /tmp doesn't exist on the machine.

View File

@ -130,7 +130,7 @@ func TestRollbackFiles(t *testing.T) {
} }
func TestShouldBackupAPIServerCertAndKey(t *testing.T) { func TestShouldBackupAPIServerCertAndKey(t *testing.T) {
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"}, API: kubeadmapi.API{AdvertiseAddress: "1.2.3.4"},
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "test-node"}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: "test-node"},

View File

@ -44,12 +44,12 @@ type Prepuller interface {
// DaemonSetPrepuller makes sure the control plane images are available on all masters // DaemonSetPrepuller makes sure the control plane images are available on all masters
type DaemonSetPrepuller struct { type DaemonSetPrepuller struct {
client clientset.Interface client clientset.Interface
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
waiter apiclient.Waiter waiter apiclient.Waiter
} }
// NewDaemonSetPrepuller creates a new instance of the DaemonSetPrepuller struct // NewDaemonSetPrepuller creates a new instance of the DaemonSetPrepuller struct
func NewDaemonSetPrepuller(client clientset.Interface, waiter apiclient.Waiter, cfg *kubeadmapi.MasterConfiguration) *DaemonSetPrepuller { func NewDaemonSetPrepuller(client clientset.Interface, waiter apiclient.Waiter, cfg *kubeadmapi.InitConfiguration) *DaemonSetPrepuller {
return &DaemonSetPrepuller{ return &DaemonSetPrepuller{
client: client, client: client,
cfg: cfg, cfg: cfg,

View File

@ -81,7 +81,7 @@ type controlPlaneComponentResources struct {
// -> Backup component v1 is Deleted // -> Backup component v1 is Deleted
// 5. Wait for Self-Hosted component v2 Running to become active // 5. Wait for Self-Hosted component v2 Running to become active
// 6. Repeat for all control plane components // 6. Repeat for all control plane components
func SelfHostedControlPlane(client clientset.Interface, waiter apiclient.Waiter, cfg *kubeadmapi.MasterConfiguration, k8sVersion *version.Version) error { func SelfHostedControlPlane(client clientset.Interface, waiter apiclient.Waiter, cfg *kubeadmapi.InitConfiguration, k8sVersion *version.Version) error {
// Adjust the timeout slightly to something self-hosting specific // Adjust the timeout slightly to something self-hosting specific
waiter.SetTimeout(selfHostingWaitTimeout) waiter.SetTimeout(selfHostingWaitTimeout)
@ -158,7 +158,7 @@ func SelfHostedControlPlane(client clientset.Interface, waiter apiclient.Waiter,
} }
// BuildUpgradedDaemonSetsFromConfig takes a config object and the current version and returns the DaemonSet objects to post to the master // BuildUpgradedDaemonSetsFromConfig takes a config object and the current version and returns the DaemonSet objects to post to the master
func BuildUpgradedDaemonSetsFromConfig(cfg *kubeadmapi.MasterConfiguration, k8sVersion *version.Version) map[string]*apps.DaemonSet { func BuildUpgradedDaemonSetsFromConfig(cfg *kubeadmapi.InitConfiguration, k8sVersion *version.Version) map[string]*apps.DaemonSet {
// Here the map of different mutators to use for the control plane's podspec is stored // Here the map of different mutators to use for the control plane's podspec is stored
mutators := selfhosting.GetMutatorsFromFeatureGates(cfg.FeatureGates) mutators := selfhosting.GetMutatorsFromFeatureGates(cfg.FeatureGates)
// Get the new PodSpecs to use // Get the new PodSpecs to use

View File

@ -161,7 +161,7 @@ func (spm *KubeStaticPodPathManager) CleanupDirs() error {
return nil return nil
} }
func upgradeComponent(component string, waiter apiclient.Waiter, pathMgr StaticPodPathManager, cfg *kubeadmapi.MasterConfiguration, beforePodHash string, recoverManifests map[string]string, isTLSUpgrade bool) error { func upgradeComponent(component string, waiter apiclient.Waiter, pathMgr StaticPodPathManager, cfg *kubeadmapi.InitConfiguration, beforePodHash string, recoverManifests map[string]string, isTLSUpgrade bool) error {
// Special treatment is required for etcd case, when rollbackOldManifests should roll back etcd // Special treatment is required for etcd case, when rollbackOldManifests should roll back etcd
// manifests only for the case when component is Etcd // manifests only for the case when component is Etcd
recoverEtcd := false recoverEtcd := false
@ -257,7 +257,7 @@ func upgradeComponent(component string, waiter apiclient.Waiter, pathMgr StaticP
} }
// performEtcdStaticPodUpgrade performs upgrade of etcd, it returns bool which indicates fatal error or not and the actual error. // performEtcdStaticPodUpgrade performs upgrade of etcd, it returns bool which indicates fatal error or not and the actual error.
func performEtcdStaticPodUpgrade(waiter apiclient.Waiter, pathMgr StaticPodPathManager, cfg *kubeadmapi.MasterConfiguration, recoverManifests map[string]string, isTLSUpgrade bool, oldEtcdClient, newEtcdClient etcdutil.ClusterInterrogator) (bool, error) { func performEtcdStaticPodUpgrade(waiter apiclient.Waiter, pathMgr StaticPodPathManager, cfg *kubeadmapi.InitConfiguration, recoverManifests map[string]string, isTLSUpgrade bool, oldEtcdClient, newEtcdClient etcdutil.ClusterInterrogator) (bool, error) {
// Add etcd static pod spec only if external etcd is not configured // Add etcd static pod spec only if external etcd is not configured
if cfg.Etcd.External != nil { if cfg.Etcd.External != nil {
return false, fmt.Errorf("external etcd detected, won't try to change any etcd state") return false, fmt.Errorf("external etcd detected, won't try to change any etcd state")
@ -404,7 +404,7 @@ func performEtcdStaticPodUpgrade(waiter apiclient.Waiter, pathMgr StaticPodPathM
} }
// StaticPodControlPlane upgrades a static pod-hosted control plane // StaticPodControlPlane upgrades a static pod-hosted control plane
func StaticPodControlPlane(waiter apiclient.Waiter, pathMgr StaticPodPathManager, cfg *kubeadmapi.MasterConfiguration, etcdUpgrade bool, oldEtcdClient, newEtcdClient etcdutil.ClusterInterrogator) error { func StaticPodControlPlane(waiter apiclient.Waiter, pathMgr StaticPodPathManager, cfg *kubeadmapi.InitConfiguration, etcdUpgrade bool, oldEtcdClient, newEtcdClient etcdutil.ClusterInterrogator) error {
recoverManifests := map[string]string{} recoverManifests := map[string]string{}
var isTLSUpgrade bool var isTLSUpgrade bool
var isExternalEtcd bool var isExternalEtcd bool
@ -509,7 +509,7 @@ func rollbackOldManifests(oldManifests map[string]string, origErr error, pathMgr
// rollbackEtcdData rolls back the the content of etcd folder if something went wrong. // rollbackEtcdData rolls back the the content of etcd folder if something went wrong.
// When the folder contents are successfully rolled back, nil is returned, otherwise an error is returned. // When the folder contents are successfully rolled back, nil is returned, otherwise an error is returned.
func rollbackEtcdData(cfg *kubeadmapi.MasterConfiguration, pathMgr StaticPodPathManager) error { func rollbackEtcdData(cfg *kubeadmapi.InitConfiguration, pathMgr StaticPodPathManager) error {
backupEtcdDir := pathMgr.BackupEtcdDir() backupEtcdDir := pathMgr.BackupEtcdDir()
runningEtcdDir := cfg.Etcd.Local.DataDir runningEtcdDir := cfg.Etcd.Local.DataDir

View File

@ -47,7 +47,7 @@ const (
testConfiguration = ` testConfiguration = `
apiVersion: kubeadm.k8s.io/v1alpha3 apiVersion: kubeadm.k8s.io/v1alpha3
kind: MasterConfiguration kind: InitConfiguration
api: api:
advertiseAddress: 1.2.3.4 advertiseAddress: 1.2.3.4
bindPort: 6443 bindPort: 6443
@ -421,7 +421,7 @@ func TestStaticPodControlPlane(t *testing.T) {
} }
// Initialize PKI minus any etcd certificates to simulate etcd PKI upgrade // Initialize PKI minus any etcd certificates to simulate etcd PKI upgrade
certActions := []func(cfg *kubeadmapi.MasterConfiguration) error{ certActions := []func(cfg *kubeadmapi.InitConfiguration) error{
certsphase.CreateCACertAndKeyFiles, certsphase.CreateCACertAndKeyFiles,
certsphase.CreateAPIServerCertAndKeyFiles, certsphase.CreateAPIServerCertAndKeyFiles,
certsphase.CreateAPIServerKubeletClientCertAndKeyFiles, certsphase.CreateAPIServerKubeletClientCertAndKeyFiles,
@ -514,9 +514,9 @@ func getAPIServerHash(dir string) (string, error) {
} }
// TODO: Make this test function use the rest of the "official" API machinery helper funcs we have inside of kubeadm // TODO: Make this test function use the rest of the "official" API machinery helper funcs we have inside of kubeadm
func getConfig(version, certsDir, etcdDataDir string) (*kubeadmapi.MasterConfiguration, error) { func getConfig(version, certsDir, etcdDataDir string) (*kubeadmapi.InitConfiguration, error) {
externalcfg := &kubeadmapiv1alpha3.MasterConfiguration{} externalcfg := &kubeadmapiv1alpha3.InitConfiguration{}
internalcfg := &kubeadmapi.MasterConfiguration{} internalcfg := &kubeadmapi.InitConfiguration{}
if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), []byte(fmt.Sprintf(testConfiguration, certsDir, etcdDataDir, version)), externalcfg); err != nil { if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), []byte(fmt.Sprintf(testConfiguration, certsDir, etcdDataDir, version)), externalcfg); err != nil {
return nil, fmt.Errorf("unable to decode config: %v", err) return nil, fmt.Errorf("unable to decode config: %v", err)
} }

View File

@ -28,10 +28,10 @@ import (
configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config" configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config"
) )
// UploadConfiguration saves the MasterConfiguration used for later reference (when upgrading for instance) // UploadConfiguration saves the InitConfiguration used for later reference (when upgrading for instance)
func UploadConfiguration(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error { func UploadConfiguration(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error {
fmt.Printf("[uploadconfig] storing the configuration used in ConfigMap %q in the %q Namespace\n", kubeadmconstants.MasterConfigurationConfigMap, metav1.NamespaceSystem) fmt.Printf("[uploadconfig] storing the configuration used in ConfigMap %q in the %q Namespace\n", kubeadmconstants.InitConfigurationConfigMap, metav1.NamespaceSystem)
// We don't want to mutate the cfg itself, so create a copy of it using .DeepCopy of it first // We don't want to mutate the cfg itself, so create a copy of it using .DeepCopy of it first
cfgToUpload := cfg.DeepCopy() cfgToUpload := cfg.DeepCopy()
@ -55,11 +55,11 @@ func UploadConfiguration(cfg *kubeadmapi.MasterConfiguration, client clientset.I
return apiclient.CreateOrUpdateConfigMap(client, &v1.ConfigMap{ return apiclient.CreateOrUpdateConfigMap(client, &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: kubeadmconstants.MasterConfigurationConfigMap, Name: kubeadmconstants.InitConfigurationConfigMap,
Namespace: metav1.NamespaceSystem, Namespace: metav1.NamespaceSystem,
}, },
Data: map[string]string{ Data: map[string]string{
kubeadmconstants.MasterConfigurationConfigMapKey: string(cfgYaml), kubeadmconstants.InitConfigurationConfigMapKey: string(cfgYaml),
}, },
}) })
} }

View File

@ -62,7 +62,7 @@ func TestUploadConfiguration(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t2 *testing.T) { t.Run(tt.name, func(t2 *testing.T) {
cfg := &kubeadmapi.MasterConfiguration{ cfg := &kubeadmapi.InitConfiguration{
KubernetesVersion: "v1.10.3", KubernetesVersion: "v1.10.3",
BootstrapTokens: []kubeadmapi.BootstrapToken{ BootstrapTokens: []kubeadmapi.BootstrapToken{
{ {
@ -98,16 +98,16 @@ func TestUploadConfiguration(t *testing.T) {
} }
} }
if tt.verifyResult { if tt.verifyResult {
masterCfg, err := client.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(kubeadmconstants.MasterConfigurationConfigMap, metav1.GetOptions{}) masterCfg, err := client.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(kubeadmconstants.InitConfigurationConfigMap, metav1.GetOptions{})
if err != nil { if err != nil {
t2.Fatalf("Fail to query ConfigMap error = %v", err) t2.Fatalf("Fail to query ConfigMap error = %v", err)
} }
configData := masterCfg.Data[kubeadmconstants.MasterConfigurationConfigMapKey] configData := masterCfg.Data[kubeadmconstants.InitConfigurationConfigMapKey]
if configData == "" { if configData == "" {
t2.Fatalf("Fail to find ConfigMap key") t2.Fatalf("Fail to find ConfigMap key")
} }
decodedCfg := &kubeadmapi.MasterConfiguration{} decodedCfg := &kubeadmapi.InitConfiguration{}
if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), []byte(configData), decodedCfg); err != nil { if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), []byte(configData), decodedCfg); err != nil {
t2.Fatalf("unable to decode config from bytes: %v", err) t2.Fatalf("unable to decode config from bytes: %v", err)
} }

View File

@ -849,7 +849,7 @@ func (i ImagePullCheck) Check() (warnings, errors []error) {
} }
// RunInitMasterChecks executes all individual, applicable to Master node checks. // RunInitMasterChecks executes all individual, applicable to Master node checks.
func RunInitMasterChecks(execer utilsexec.Interface, cfg *kubeadmapi.MasterConfiguration, ignorePreflightErrors sets.String) error { func RunInitMasterChecks(execer utilsexec.Interface, cfg *kubeadmapi.InitConfiguration, ignorePreflightErrors sets.String) error {
// First, check if we're root separately from the other preflight checks and fail fast // First, check if we're root separately from the other preflight checks and fail fast
if err := RunRootCheckOnly(ignorePreflightErrors); err != nil { if err := RunRootCheckOnly(ignorePreflightErrors); err != nil {
return err return err
@ -1001,7 +1001,7 @@ func RunRootCheckOnly(ignorePreflightErrors sets.String) error {
} }
// RunPullImagesCheck will pull images kubeadm needs if the are not found on the system // RunPullImagesCheck will pull images kubeadm needs if the are not found on the system
func RunPullImagesCheck(execer utilsexec.Interface, cfg *kubeadmapi.MasterConfiguration, ignorePreflightErrors sets.String) error { func RunPullImagesCheck(execer utilsexec.Interface, cfg *kubeadmapi.InitConfiguration, ignorePreflightErrors sets.String) error {
criInterfacer, err := images.NewCRInterfacer(execer, cfg.GetCRISocket()) criInterfacer, err := images.NewCRInterfacer(execer, cfg.GetCRISocket())
if err != nil { if err != nil {
return err return err

View File

@ -185,38 +185,38 @@ func (pfct preflightCheckTest) Check() (warning, errors []error) {
func TestRunInitMasterChecks(t *testing.T) { func TestRunInitMasterChecks(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
expected bool expected bool
}{ }{
{name: "Test valid advertised address", {name: "Test valid advertised address",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "foo"}, API: kubeadmapi.API{AdvertiseAddress: "foo"},
}, },
expected: false, expected: false,
}, },
{ {
name: "Test CA file exists if specfied", name: "Test CA file exists if specfied",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{External: &kubeadmapi.ExternalEtcd{CAFile: "/foo"}}, Etcd: kubeadmapi.Etcd{External: &kubeadmapi.ExternalEtcd{CAFile: "/foo"}},
}, },
expected: false, expected: false,
}, },
{ {
name: "Test Cert file exists if specfied", name: "Test Cert file exists if specfied",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{External: &kubeadmapi.ExternalEtcd{CertFile: "/foo"}}, Etcd: kubeadmapi.Etcd{External: &kubeadmapi.ExternalEtcd{CertFile: "/foo"}},
}, },
expected: false, expected: false,
}, },
{ {
name: "Test Key file exists if specfied", name: "Test Key file exists if specfied",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{External: &kubeadmapi.ExternalEtcd{CertFile: "/foo"}}, Etcd: kubeadmapi.Etcd{External: &kubeadmapi.ExternalEtcd{CertFile: "/foo"}},
}, },
expected: false, expected: false,
}, },
{ {
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{AdvertiseAddress: "2001:1234::1:15"}, API: kubeadmapi.API{AdvertiseAddress: "2001:1234::1:15"},
}, },
expected: false, expected: false,

View File

@ -31,7 +31,7 @@ import (
// TODO: Add unit tests for this file // TODO: Add unit tests for this file
// FetchConfigFromFileOrCluster fetches configuration required for upgrading your cluster from a file (which has precedence) or a ConfigMap in the cluster // FetchConfigFromFileOrCluster fetches configuration required for upgrading your cluster from a file (which has precedence) or a ConfigMap in the cluster
func FetchConfigFromFileOrCluster(client clientset.Interface, w io.Writer, logPrefix, cfgPath string) (*kubeadmapi.MasterConfiguration, error) { func FetchConfigFromFileOrCluster(client clientset.Interface, w io.Writer, logPrefix, cfgPath string) (*kubeadmapi.InitConfiguration, error) {
// Load the configuration from a file or the cluster // Load the configuration from a file or the cluster
configBytes, err := loadConfigurationBytes(client, w, logPrefix, cfgPath) configBytes, err := loadConfigurationBytes(client, w, logPrefix, cfgPath)
if err != nil { if err != nil {
@ -52,15 +52,15 @@ func loadConfigurationBytes(client clientset.Interface, w io.Writer, logPrefix,
fmt.Fprintf(w, "[%s] Reading configuration from the cluster...\n", logPrefix) fmt.Fprintf(w, "[%s] Reading configuration from the cluster...\n", logPrefix)
configMap, err := client.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(constants.MasterConfigurationConfigMap, metav1.GetOptions{}) configMap, err := client.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(constants.InitConfigurationConfigMap, metav1.GetOptions{})
if apierrors.IsNotFound(err) { if apierrors.IsNotFound(err) {
// Return the apierror directly so the caller of this function can know what type of error occurred and act based on that // Return the apierror directly so the caller of this function can know what type of error occurred and act based on that
return []byte{}, err return []byte{}, err
} else if err != nil { } else if err != nil {
return []byte{}, fmt.Errorf("an unexpected error happened when trying to get the ConfigMap %q in the %s namespace: %v", constants.MasterConfigurationConfigMap, metav1.NamespaceSystem, err) return []byte{}, fmt.Errorf("an unexpected error happened when trying to get the ConfigMap %q in the %s namespace: %v", constants.InitConfigurationConfigMap, metav1.NamespaceSystem, err)
} }
// TODO: Load the kube-proxy and kubelet ComponentConfig ConfigMaps here as different YAML documents and append to the byte slice // TODO: Load the kube-proxy and kubelet ComponentConfig ConfigMaps here as different YAML documents and append to the byte slice
fmt.Fprintf(w, "[%s] FYI: You can look at this config file with 'kubectl -n %s get cm %s -oyaml'\n", logPrefix, metav1.NamespaceSystem, constants.MasterConfigurationConfigMap) fmt.Fprintf(w, "[%s] FYI: You can look at this config file with 'kubectl -n %s get cm %s -oyaml'\n", logPrefix, metav1.NamespaceSystem, constants.InitConfigurationConfigMap)
return []byte(configMap.Data[constants.MasterConfigurationConfigMapKey]), nil return []byte(configMap.Data[constants.InitConfigurationConfigMapKey]), nil
} }

View File

@ -32,7 +32,7 @@ import (
"k8s.io/kubernetes/pkg/util/version" "k8s.io/kubernetes/pkg/util/version"
) )
// AnyConfigFileAndDefaultsToInternal reads either a MasterConfiguration or NodeConfiguration and unmarshals it // AnyConfigFileAndDefaultsToInternal reads either a InitConfiguration or NodeConfiguration and unmarshals it
func AnyConfigFileAndDefaultsToInternal(cfgPath string) (runtime.Object, error) { func AnyConfigFileAndDefaultsToInternal(cfgPath string) (runtime.Object, error) {
b, err := ioutil.ReadFile(cfgPath) b, err := ioutil.ReadFile(cfgPath)
if err != nil { if err != nil {
@ -44,9 +44,9 @@ func AnyConfigFileAndDefaultsToInternal(cfgPath string) (runtime.Object, error)
return nil, err return nil, err
} }
// First, check if the gvk list has MasterConfiguration and in that case try to unmarshal it // First, check if the gvk list has InitConfiguration and in that case try to unmarshal it
if kubeadmutil.GroupVersionKindsHasMasterConfiguration(gvks) { if kubeadmutil.GroupVersionKindsHasInitConfiguration(gvks) {
return ConfigFileAndDefaultsToInternalConfig(cfgPath, &kubeadmapiv1alpha3.MasterConfiguration{}) return ConfigFileAndDefaultsToInternalConfig(cfgPath, &kubeadmapiv1alpha3.InitConfiguration{})
} }
if kubeadmutil.GroupVersionKindsHasNodeConfiguration(gvks) { if kubeadmutil.GroupVersionKindsHasNodeConfiguration(gvks) {
return NodeConfigFileAndDefaultsToInternalConfig(cfgPath, &kubeadmapiv1alpha3.NodeConfiguration{}) return NodeConfigFileAndDefaultsToInternalConfig(cfgPath, &kubeadmapiv1alpha3.NodeConfiguration{})
@ -54,11 +54,11 @@ func AnyConfigFileAndDefaultsToInternal(cfgPath string) (runtime.Object, error)
return nil, fmt.Errorf("didn't recognize types with GroupVersionKind: %v", gvks) return nil, fmt.Errorf("didn't recognize types with GroupVersionKind: %v", gvks)
} }
// MarshalKubeadmConfigObject marshals an Object registered in the kubeadm scheme. If the object is a MasterConfiguration, some extra logic is run // MarshalKubeadmConfigObject marshals an Object registered in the kubeadm scheme. If the object is a InitConfiguration, some extra logic is run
func MarshalKubeadmConfigObject(obj runtime.Object) ([]byte, error) { func MarshalKubeadmConfigObject(obj runtime.Object) ([]byte, error) {
switch internalcfg := obj.(type) { switch internalcfg := obj.(type) {
case *kubeadmapi.MasterConfiguration: case *kubeadmapi.InitConfiguration:
return MarshalMasterConfigurationToBytes(internalcfg, kubeadmapiv1alpha3.SchemeGroupVersion) return MarshalInitConfigurationToBytes(internalcfg, kubeadmapiv1alpha3.SchemeGroupVersion)
default: default:
return kubeadmutil.MarshalToYamlForCodecs(obj, kubeadmapiv1alpha3.SchemeGroupVersion, kubeadmscheme.Codecs) return kubeadmutil.MarshalToYamlForCodecs(obj, kubeadmapiv1alpha3.SchemeGroupVersion, kubeadmscheme.Codecs)
} }
@ -93,7 +93,7 @@ func DetectUnsupportedVersion(b []byte) error {
// NormalizeKubernetesVersion resolves version labels, sets alternative // NormalizeKubernetesVersion resolves version labels, sets alternative
// image registry if requested for CI builds, and validates minimal // image registry if requested for CI builds, and validates minimal
// version that kubeadm SetInitDynamicDefaultssupports. // version that kubeadm SetInitDynamicDefaultssupports.
func NormalizeKubernetesVersion(cfg *kubeadmapi.MasterConfiguration) error { func NormalizeKubernetesVersion(cfg *kubeadmapi.InitConfiguration) error {
// Requested version is automatic CI build, thus use KubernetesCI Image Repository for core images // Requested version is automatic CI build, thus use KubernetesCI Image Repository for core images
if kubeadmutil.KubernetesIsCIVersion(cfg.KubernetesVersion) { if kubeadmutil.KubernetesIsCIVersion(cfg.KubernetesVersion) {
cfg.CIImageRepository = constants.DefaultCIImageRepository cfg.CIImageRepository = constants.DefaultCIImageRepository

View File

@ -27,7 +27,7 @@ import (
var files = map[string][]byte{ var files = map[string][]byte{
"Master_v1alpha1": []byte(` "Master_v1alpha1": []byte(`
apiVersion: kubeadm.k8s.io/v1alpha1 apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration kind: InitConfiguration
`), `),
"Node_v1alpha1": []byte(` "Node_v1alpha1": []byte(`
apiVersion: kubeadm.k8s.io/v1alpha1 apiVersion: kubeadm.k8s.io/v1alpha1
@ -35,7 +35,7 @@ kind: NodeConfiguration
`), `),
"Master_v1alpha3": []byte(` "Master_v1alpha3": []byte(`
apiVersion: kubeadm.k8s.io/v1alpha3 apiVersion: kubeadm.k8s.io/v1alpha3
kind: MasterConfiguration kind: InitConfiguration
`), `),
"Node_v1alpha3": []byte(` "Node_v1alpha3": []byte(`
apiVersion: kubeadm.k8s.io/v1alpha3 apiVersion: kubeadm.k8s.io/v1alpha3
@ -138,7 +138,7 @@ func TestLowercaseSANs(t *testing.T) {
for _, test := range tests { for _, test := range tests {
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{ cfg := &kubeadmapiv1alpha3.InitConfiguration{
APIServerCertSANs: test.in, APIServerCertSANs: test.in,
} }

View File

@ -41,8 +41,8 @@ import (
nodeutil "k8s.io/kubernetes/pkg/util/node" nodeutil "k8s.io/kubernetes/pkg/util/node"
) )
// SetInitDynamicDefaults checks and sets configuration values for the MasterConfiguration object // SetInitDynamicDefaults checks and sets configuration values for the InitConfiguration object
func SetInitDynamicDefaults(cfg *kubeadmapi.MasterConfiguration) error { func SetInitDynamicDefaults(cfg *kubeadmapi.InitConfiguration) error {
// Default all the embedded ComponentConfig structs // Default all the embedded ComponentConfig structs
componentconfigs.Known.Default(cfg) componentconfigs.Known.Default(cfg)
@ -109,8 +109,8 @@ func SetInitDynamicDefaults(cfg *kubeadmapi.MasterConfiguration) error {
// Then the external, versioned configuration is defaulted and converted to the internal type. // Then the external, versioned configuration is defaulted and converted to the internal type.
// Right thereafter, the configuration is defaulted again with dynamic values (like IP addresses of a machine, etc) // Right thereafter, the configuration is defaulted again with dynamic values (like IP addresses of a machine, etc)
// Lastly, the internal config is validated and returned. // Lastly, the internal config is validated and returned.
func ConfigFileAndDefaultsToInternalConfig(cfgPath string, defaultversionedcfg *kubeadmapiv1alpha3.MasterConfiguration) (*kubeadmapi.MasterConfiguration, error) { func ConfigFileAndDefaultsToInternalConfig(cfgPath string, defaultversionedcfg *kubeadmapiv1alpha3.InitConfiguration) (*kubeadmapi.InitConfiguration, error) {
internalcfg := &kubeadmapi.MasterConfiguration{} internalcfg := &kubeadmapi.InitConfiguration{}
if cfgPath != "" { if cfgPath != "" {
// Loads configuration from config file, if provided // Loads configuration from config file, if provided
@ -134,9 +134,9 @@ func ConfigFileAndDefaultsToInternalConfig(cfgPath string, defaultversionedcfg *
// BytesToInternalConfig converts a byte slice to an internal, defaulted and validated configuration object. // BytesToInternalConfig converts a byte slice to an internal, defaulted and validated configuration object.
// The byte slice may contain one or many different YAML documents. These YAML documents are parsed one-by-one // The byte slice may contain one or many different YAML documents. These YAML documents are parsed one-by-one
// and well-known ComponentConfig GroupVersionKinds are stored inside of the internal MasterConfiguration struct // and well-known ComponentConfig GroupVersionKinds are stored inside of the internal InitConfiguration struct
func BytesToInternalConfig(b []byte) (*kubeadmapi.MasterConfiguration, error) { func BytesToInternalConfig(b []byte) (*kubeadmapi.InitConfiguration, error) {
internalcfg := &kubeadmapi.MasterConfiguration{} internalcfg := &kubeadmapi.InitConfiguration{}
decodedObjs := map[componentconfigs.RegistrationKind]runtime.Object{} decodedObjs := map[componentconfigs.RegistrationKind]runtime.Object{}
masterConfigFound := false masterConfigFound := false
@ -163,7 +163,7 @@ func BytesToInternalConfig(b []byte) (*kubeadmapi.MasterConfiguration, error) {
continue continue
} }
if gvk.Kind == kubeadmconstants.MasterConfigurationKind { if gvk.Kind == kubeadmconstants.InitConfigurationKind {
if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), fileContent, internalcfg); err != nil { if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), fileContent, internalcfg); err != nil {
return nil, err return nil, err
} }
@ -173,9 +173,9 @@ func BytesToInternalConfig(b []byte) (*kubeadmapi.MasterConfiguration, error) {
fmt.Printf("[config] WARNING: Ignored YAML document with GroupVersionKind %v\n", gvk) fmt.Printf("[config] WARNING: Ignored YAML document with GroupVersionKind %v\n", gvk)
} }
// Just as an extra safety check, don't proceed if a MasterConfiguration object wasn't found // Just as an extra safety check, don't proceed if a InitConfiguration object wasn't found
if !masterConfigFound { if !masterConfigFound {
return nil, fmt.Errorf("no MasterConfiguration kind was found in the YAML file") return nil, fmt.Errorf("no InitConfiguration kind was found in the YAML file")
} }
// Save the loaded ComponentConfig objects in the internalcfg object // Save the loaded ComponentConfig objects in the internalcfg object
@ -194,22 +194,22 @@ func BytesToInternalConfig(b []byte) (*kubeadmapi.MasterConfiguration, error) {
return defaultAndValidate(internalcfg) return defaultAndValidate(internalcfg)
} }
func defaultAndValidate(cfg *kubeadmapi.MasterConfiguration) (*kubeadmapi.MasterConfiguration, error) { func defaultAndValidate(cfg *kubeadmapi.InitConfiguration) (*kubeadmapi.InitConfiguration, error) {
// Applies dynamic defaults to settings not provided with flags // Applies dynamic defaults to settings not provided with flags
if err := SetInitDynamicDefaults(cfg); err != nil { if err := SetInitDynamicDefaults(cfg); err != nil {
return nil, err return nil, err
} }
// Validates cfg (flags/configs + defaults + dynamic defaults) // Validates cfg (flags/configs + defaults + dynamic defaults)
if err := validation.ValidateMasterConfiguration(cfg).ToAggregate(); err != nil { if err := validation.ValidateInitConfiguration(cfg).ToAggregate(); err != nil {
return nil, err return nil, err
} }
return cfg, nil return cfg, nil
} }
func defaultedInternalConfig() *kubeadmapi.MasterConfiguration { func defaultedInternalConfig() *kubeadmapi.InitConfiguration {
externalcfg := &kubeadmapiv1alpha3.MasterConfiguration{} externalcfg := &kubeadmapiv1alpha3.InitConfiguration{}
internalcfg := &kubeadmapi.MasterConfiguration{} internalcfg := &kubeadmapi.InitConfiguration{}
kubeadmscheme.Scheme.Default(externalcfg) kubeadmscheme.Scheme.Default(externalcfg)
kubeadmscheme.Scheme.Convert(externalcfg, internalcfg, nil) kubeadmscheme.Scheme.Convert(externalcfg, internalcfg, nil)
@ -219,9 +219,9 @@ func defaultedInternalConfig() *kubeadmapi.MasterConfiguration {
return internalcfg return internalcfg
} }
// MarshalMasterConfigurationToBytes marshals the internal MasterConfiguration object to bytes. It writes the embedded // MarshalInitConfigurationToBytes marshals the internal InitConfiguration object to bytes. It writes the embedded
// ComponentConfiguration objects out as separate YAML documents // ComponentConfiguration objects out as separate YAML documents
func MarshalMasterConfigurationToBytes(cfg *kubeadmapi.MasterConfiguration, gv schema.GroupVersion) ([]byte, error) { func MarshalInitConfigurationToBytes(cfg *kubeadmapi.InitConfiguration, gv schema.GroupVersion) ([]byte, error) {
masterbytes, err := kubeadmutil.MarshalToYamlForCodecs(cfg, gv, kubeadmscheme.Codecs) masterbytes, err := kubeadmutil.MarshalToYamlForCodecs(cfg, gv, kubeadmscheme.Codecs)
if err != nil { if err != nil {
return []byte{}, err return []byte{}, err

View File

@ -101,7 +101,7 @@ func TestConfigFileAndDefaultsToInternalConfig(t *testing.T) {
for _, rt := range tests { for _, rt := range tests {
t.Run(rt.name, func(t2 *testing.T) { t.Run(rt.name, func(t2 *testing.T) {
internalcfg, err := ConfigFileAndDefaultsToInternalConfig(rt.in, &kubeadmapiv1alpha3.MasterConfiguration{}) internalcfg, err := ConfigFileAndDefaultsToInternalConfig(rt.in, &kubeadmapiv1alpha3.InitConfiguration{})
if err != nil { if err != nil {
if rt.expectedErr { if rt.expectedErr {
return return
@ -109,7 +109,7 @@ func TestConfigFileAndDefaultsToInternalConfig(t *testing.T) {
t2.Fatalf("couldn't unmarshal test data: %v", err) t2.Fatalf("couldn't unmarshal test data: %v", err)
} }
actual, err := MarshalMasterConfigurationToBytes(internalcfg, rt.groupVersion) actual, err := MarshalInitConfigurationToBytes(internalcfg, rt.groupVersion)
if err != nil { if err != nil {
t2.Fatalf("couldn't marshal internal object: %v", err) t2.Fatalf("couldn't marshal internal object: %v", err)
} }

View File

@ -218,7 +218,7 @@ func (c Client) WaitForClusterAvailable(delay time.Duration, retries int, retryI
return false, fmt.Errorf("timeout waiting for etcd cluster to be available") return false, fmt.Errorf("timeout waiting for etcd cluster to be available")
} }
// CheckConfigurationIsHA returns true if the given MasterConfiguration etcd block appears to be an HA configuration. // CheckConfigurationIsHA returns true if the given InitConfiguration etcd block appears to be an HA configuration.
func CheckConfigurationIsHA(cfg *kubeadmapi.Etcd) bool { func CheckConfigurationIsHA(cfg *kubeadmapi.Etcd) bool {
return cfg.External != nil && len(cfg.External.Endpoints) > 1 return cfg.External != nil && len(cfg.External.Endpoints) > 1
} }

View File

@ -147,9 +147,9 @@ func GroupVersionKindsHasKind(gvks []schema.GroupVersionKind, kind string) bool
return false return false
} }
// GroupVersionKindsHasMasterConfiguration returns whether the following gvk slice contains a MasterConfiguration object // GroupVersionKindsHasInitConfiguration returns whether the following gvk slice contains a InitConfiguration object
func GroupVersionKindsHasMasterConfiguration(gvks []schema.GroupVersionKind) bool { func GroupVersionKindsHasInitConfiguration(gvks []schema.GroupVersionKind) bool {
return GroupVersionKindsHasKind(gvks, constants.MasterConfigurationKind) return GroupVersionKindsHasKind(gvks, constants.InitConfigurationKind)
} }
// GroupVersionKindsHasNodeConfiguration returns whether the following gvk slice contains a NodeConfiguration object // GroupVersionKindsHasNodeConfiguration returns whether the following gvk slice contains a NodeConfiguration object

View File

@ -109,9 +109,9 @@ func TestMarshalUnmarshalYaml(t *testing.T) {
} }
func TestMarshalUnmarshalToYamlForCodecs(t *testing.T) { func TestMarshalUnmarshalToYamlForCodecs(t *testing.T) {
cfg := &kubeadmapiv1alpha3.MasterConfiguration{ cfg := &kubeadmapiv1alpha3.InitConfiguration{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "MasterConfiguration", Kind: "InitConfiguration",
APIVersion: kubeadmapiv1alpha3.SchemeGroupVersion.String(), APIVersion: kubeadmapiv1alpha3.SchemeGroupVersion.String(),
}, },
API: kubeadmapiv1alpha3.API{ API: kubeadmapiv1alpha3.API{
@ -133,36 +133,36 @@ func TestMarshalUnmarshalToYamlForCodecs(t *testing.T) {
}, },
} }
kubeadmapiv1alpha3.SetDefaults_MasterConfiguration(cfg) kubeadmapiv1alpha3.SetDefaults_InitConfiguration(cfg)
scheme := runtime.NewScheme() scheme := runtime.NewScheme()
kubeadmapiv1alpha3.AddToScheme(scheme) kubeadmapiv1alpha3.AddToScheme(scheme)
codecs := serializer.NewCodecFactory(scheme) codecs := serializer.NewCodecFactory(scheme)
bytes, err := MarshalToYamlForCodecs(cfg, kubeadmapiv1alpha3.SchemeGroupVersion, codecs) bytes, err := MarshalToYamlForCodecs(cfg, kubeadmapiv1alpha3.SchemeGroupVersion, codecs)
if err != nil { if err != nil {
t.Fatalf("unexpected error marshalling MasterConfiguration: %v", err) t.Fatalf("unexpected error marshalling InitConfiguration: %v", err)
} }
t.Logf("\n%s", bytes) t.Logf("\n%s", bytes)
obj, err := UnmarshalFromYamlForCodecs(bytes, kubeadmapiv1alpha3.SchemeGroupVersion, codecs) obj, err := UnmarshalFromYamlForCodecs(bytes, kubeadmapiv1alpha3.SchemeGroupVersion, codecs)
if err != nil { if err != nil {
t.Fatalf("unexpected error unmarshalling MasterConfiguration: %v", err) t.Fatalf("unexpected error unmarshalling InitConfiguration: %v", err)
} }
cfg2, ok := obj.(*kubeadmapiv1alpha3.MasterConfiguration) cfg2, ok := obj.(*kubeadmapiv1alpha3.InitConfiguration)
if !ok || cfg2 == nil { if !ok || cfg2 == nil {
t.Fatal("did not get MasterConfiguration back") t.Fatal("did not get InitConfiguration back")
} }
if !reflect.DeepEqual(*cfg, *cfg2) { if !reflect.DeepEqual(*cfg, *cfg2) {
t.Errorf("expected %v, got %v", *cfg, *cfg2) t.Errorf("expected %v, got %v", *cfg, *cfg2)
} }
} }
// {{MasterConfiguration kubeadm.k8s.io/v1alpha3} [{<nil> nil <nil> [] []}] {testNode /var/run/cri.sock [] map[]} {10.100.0.1 4332} {0xc4200ad2c0 <nil>} {10.100.0.0/24 10.100.1.0/24 cluster.local} stable-1.11 map[] map[] map[] [] [] [] [] /etc/kubernetes/pki k8s.gcr.io { /var/log/kubernetes/audit 0x156e2f4} map[] kubernetes} // {{InitConfiguration kubeadm.k8s.io/v1alpha3} [{<nil> nil <nil> [] []}] {testNode /var/run/cri.sock [] map[]} {10.100.0.1 4332} {0xc4200ad2c0 <nil>} {10.100.0.0/24 10.100.1.0/24 cluster.local} stable-1.11 map[] map[] map[] [] [] [] [] /etc/kubernetes/pki k8s.gcr.io { /var/log/kubernetes/audit 0x156e2f4} map[] kubernetes}
// {{MasterConfiguration kubeadm.k8s.io/v1alpha3} [{<nil> &Duration{Duration:24h0m0s,} <nil> [signing authentication] [system:bootstrappers:kubeadm:default-node-token]}] {testNode /var/run/cri.sock [] map[]} {10.100.0.1 4332} {0xc4205c5260 <nil>} {10.100.0.0/24 10.100.1.0/24 cluster.local} stable-1.11 map[] map[] map[] [] [] [] [] /etc/kubernetes/pki k8s.gcr.io { /var/log/kubernetes/audit 0xc4204dd82c} map[] kubernetes} // {{InitConfiguration kubeadm.k8s.io/v1alpha3} [{<nil> &Duration{Duration:24h0m0s,} <nil> [signing authentication] [system:bootstrappers:kubeadm:default-node-token]}] {testNode /var/run/cri.sock [] map[]} {10.100.0.1 4332} {0xc4205c5260 <nil>} {10.100.0.0/24 10.100.1.0/24 cluster.local} stable-1.11 map[] map[] map[] [] [] [] [] /etc/kubernetes/pki k8s.gcr.io { /var/log/kubernetes/audit 0xc4204dd82c} map[] kubernetes}
// {{MasterConfiguration kubeadm.k8s.io/v1alpha3} [{abcdef.abcdef0123456789 nil <nil> [] []}] {testNode /var/run/cri.sock [] map[]} {10.100.0.1 4332} {0xc42012ca80 <nil>} {10.100.0.0/24 10.100.1.0/24 cluster.local} stable-1.11 map[] map[] map[] [] [] [] [] /etc/kubernetes/pki k8s.gcr.io { /var/log/kubernetes/audit 0x156e2f4} map[] kubernetes} // {{InitConfiguration kubeadm.k8s.io/v1alpha3} [{abcdef.abcdef0123456789 nil <nil> [] []}] {testNode /var/run/cri.sock [] map[]} {10.100.0.1 4332} {0xc42012ca80 <nil>} {10.100.0.0/24 10.100.1.0/24 cluster.local} stable-1.11 map[] map[] map[] [] [] [] [] /etc/kubernetes/pki k8s.gcr.io { /var/log/kubernetes/audit 0x156e2f4} map[] kubernetes}
// {{MasterConfiguration kubeadm.k8s.io/v1alpha3} [{abcdef.abcdef0123456789 &Duration{Duration:24h0m0s,} <nil> [signing authentication] [system:bootstrappers:kubeadm:default-node-token]}] {testNode /var/run/cri.sock [] map[]} {10.100.0.1 4332} {0xc42039d1a0 <nil>} {10.100.0.0/24 10.100.1.0/24 cluster.local} stable-1.11 map[] map[] map[] [] [] [] [] /etc/kubernetes/pki k8s.gcr.io { /var/log/kubernetes/audit 0xc4204fef3c} map[] kubernetes} // {{InitConfiguration kubeadm.k8s.io/v1alpha3} [{abcdef.abcdef0123456789 &Duration{Duration:24h0m0s,} <nil> [signing authentication] [system:bootstrappers:kubeadm:default-node-token]}] {testNode /var/run/cri.sock [] map[]} {10.100.0.1 4332} {0xc42039d1a0 <nil>} {10.100.0.0/24 10.100.1.0/24 cluster.local} stable-1.11 map[] map[] map[] [] [] [] [] /etc/kubernetes/pki k8s.gcr.io { /var/log/kubernetes/audit 0xc4204fef3c} map[] kubernetes}
func TestSplitYAMLDocuments(t *testing.T) { func TestSplitYAMLDocuments(t *testing.T) {
var tests = []struct { var tests = []struct {
@ -339,7 +339,7 @@ func TestGroupVersionKindsHasKind(t *testing.T) {
} }
} }
func TestGroupVersionKindsHasMasterConfiguration(t *testing.T) { func TestGroupVersionKindsHasInitConfiguration(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
gvks []schema.GroupVersionKind gvks []schema.GroupVersionKind
@ -347,17 +347,17 @@ func TestGroupVersionKindsHasMasterConfiguration(t *testing.T) {
expected bool expected bool
}{ }{
{ {
name: "NoMasterConfiguration", name: "NoInitConfiguration",
gvks: []schema.GroupVersionKind{ gvks: []schema.GroupVersionKind{
{Group: "foo.k8s.io", Version: "v1", Kind: "Foo"}, {Group: "foo.k8s.io", Version: "v1", Kind: "Foo"},
}, },
expected: false, expected: false,
}, },
{ {
name: "MasterConfigurationFound", name: "InitConfigurationFound",
gvks: []schema.GroupVersionKind{ gvks: []schema.GroupVersionKind{
{Group: "foo.k8s.io", Version: "v1", Kind: "Foo"}, {Group: "foo.k8s.io", Version: "v1", Kind: "Foo"},
{Group: "bar.k8s.io", Version: "v2", Kind: "MasterConfiguration"}, {Group: "bar.k8s.io", Version: "v2", Kind: "InitConfiguration"},
}, },
expected: true, expected: true,
}, },
@ -366,9 +366,9 @@ func TestGroupVersionKindsHasMasterConfiguration(t *testing.T) {
for _, rt := range tests { for _, rt := range tests {
t.Run(rt.name, func(t2 *testing.T) { t.Run(rt.name, func(t2 *testing.T) {
actual := GroupVersionKindsHasMasterConfiguration(rt.gvks) actual := GroupVersionKindsHasInitConfiguration(rt.gvks)
if rt.expected != actual { if rt.expected != actual {
t2.Errorf("expected gvks has MasterConfiguration: %t\n\tactual: %t\n", rt.expected, actual) t2.Errorf("expected gvks has InitConfiguration: %t\n\tactual: %t\n", rt.expected, actual)
} }
}) })
} }

View File

@ -82,7 +82,7 @@ func ComponentResources(cpu string) v1.ResourceRequirements {
} }
// ComponentProbe is a helper function building a ready v1.Probe object from some simple parameters // ComponentProbe is a helper function building a ready v1.Probe object from some simple parameters
func ComponentProbe(cfg *kubeadmapi.MasterConfiguration, componentName string, port int, path string, scheme v1.URIScheme) *v1.Probe { func ComponentProbe(cfg *kubeadmapi.InitConfiguration, componentName string, port int, path string, scheme v1.URIScheme) *v1.Probe {
return &v1.Probe{ return &v1.Probe{
Handler: v1.Handler{ Handler: v1.Handler{
HTTPGet: &v1.HTTPGetAction{ HTTPGet: &v1.HTTPGetAction{
@ -99,7 +99,7 @@ func ComponentProbe(cfg *kubeadmapi.MasterConfiguration, componentName string, p
} }
// EtcdProbe is a helper function for building a shell-based, etcdctl v1.Probe object to healthcheck etcd // EtcdProbe is a helper function for building a shell-based, etcdctl v1.Probe object to healthcheck etcd
func EtcdProbe(cfg *kubeadmapi.MasterConfiguration, componentName string, port int, certsDir string, CACertName string, CertName string, KeyName string) *v1.Probe { func EtcdProbe(cfg *kubeadmapi.InitConfiguration, componentName string, port int, certsDir string, CACertName string, CertName string, KeyName string) *v1.Probe {
tlsFlags := fmt.Sprintf("--cacert=%[1]s/%[2]s --cert=%[1]s/%[3]s --key=%[1]s/%[4]s", certsDir, CACertName, CertName, KeyName) tlsFlags := fmt.Sprintf("--cacert=%[1]s/%[2]s --cert=%[1]s/%[3]s --key=%[1]s/%[4]s", certsDir, CACertName, CertName, KeyName)
// etcd pod is alive if a linearizable get succeeds. // etcd pod is alive if a linearizable get succeeds.
cmd := fmt.Sprintf("ETCDCTL_API=3 etcdctl --endpoints=https://[%s]:%d %s get foo", GetProbeAddress(cfg, componentName), port, tlsFlags) cmd := fmt.Sprintf("ETCDCTL_API=3 etcdctl --endpoints=https://[%s]:%d %s get foo", GetProbeAddress(cfg, componentName), port, tlsFlags)
@ -218,7 +218,7 @@ func ReadStaticPodFromDisk(manifestPath string) (*v1.Pod, error) {
// GetProbeAddress returns an IP address or 127.0.0.1 to use for liveness probes // GetProbeAddress returns an IP address or 127.0.0.1 to use for liveness probes
// in static pod manifests. // in static pod manifests.
func GetProbeAddress(cfg *kubeadmapi.MasterConfiguration, componentName string) string { func GetProbeAddress(cfg *kubeadmapi.InitConfiguration, componentName string) string {
switch { switch {
case componentName == kubeadmconstants.KubeAPIServer: case componentName == kubeadmconstants.KubeAPIServer:
// In the case of a self-hosted deployment, the initial host on which kubeadm --init is run, // In the case of a self-hosted deployment, the initial host on which kubeadm --init is run,

View File

@ -46,7 +46,7 @@ func TestComponentResources(t *testing.T) {
func TestComponentProbe(t *testing.T) { func TestComponentProbe(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
component string component string
port int port int
path string path string
@ -55,7 +55,7 @@ func TestComponentProbe(t *testing.T) {
}{ }{
{ {
name: "default apiserver advertise address with http", name: "default apiserver advertise address with http",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{ API: kubeadmapi.API{
AdvertiseAddress: "", AdvertiseAddress: "",
}, },
@ -68,7 +68,7 @@ func TestComponentProbe(t *testing.T) {
}, },
{ {
name: "default apiserver advertise address with http", name: "default apiserver advertise address with http",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{ API: kubeadmapi.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
}, },
@ -84,7 +84,7 @@ func TestComponentProbe(t *testing.T) {
}, },
{ {
name: "default apiserver advertise address with https", name: "default apiserver advertise address with https",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{ API: kubeadmapi.API{
AdvertiseAddress: "", AdvertiseAddress: "",
}, },
@ -97,7 +97,7 @@ func TestComponentProbe(t *testing.T) {
}, },
{ {
name: "valid ipv4 apiserver advertise address with http", name: "valid ipv4 apiserver advertise address with http",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{ API: kubeadmapi.API{
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
}, },
@ -110,7 +110,7 @@ func TestComponentProbe(t *testing.T) {
}, },
{ {
name: "valid ipv6 apiserver advertise address with http", name: "valid ipv6 apiserver advertise address with http",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
API: kubeadmapi.API{ API: kubeadmapi.API{
AdvertiseAddress: "2001:db8::1", AdvertiseAddress: "2001:db8::1",
}, },
@ -123,7 +123,7 @@ func TestComponentProbe(t *testing.T) {
}, },
{ {
name: "valid IPv4 controller-manager probe", name: "valid IPv4 controller-manager probe",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ControllerManagerExtraArgs: map[string]string{"address": "1.2.3.4"}, ControllerManagerExtraArgs: map[string]string{"address": "1.2.3.4"},
}, },
component: kubeadmconstants.KubeControllerManager, component: kubeadmconstants.KubeControllerManager,
@ -134,7 +134,7 @@ func TestComponentProbe(t *testing.T) {
}, },
{ {
name: "valid IPv6 controller-manager probe", name: "valid IPv6 controller-manager probe",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
ControllerManagerExtraArgs: map[string]string{"address": "2001:db8::1"}, ControllerManagerExtraArgs: map[string]string{"address": "2001:db8::1"},
}, },
component: kubeadmconstants.KubeControllerManager, component: kubeadmconstants.KubeControllerManager,
@ -145,7 +145,7 @@ func TestComponentProbe(t *testing.T) {
}, },
{ {
name: "valid IPv4 scheduler probe", name: "valid IPv4 scheduler probe",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
SchedulerExtraArgs: map[string]string{"address": "1.2.3.4"}, SchedulerExtraArgs: map[string]string{"address": "1.2.3.4"},
}, },
component: kubeadmconstants.KubeScheduler, component: kubeadmconstants.KubeScheduler,
@ -156,7 +156,7 @@ func TestComponentProbe(t *testing.T) {
}, },
{ {
name: "valid IPv6 scheduler probe", name: "valid IPv6 scheduler probe",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
SchedulerExtraArgs: map[string]string{"address": "2001:db8::1"}, SchedulerExtraArgs: map[string]string{"address": "2001:db8::1"},
}, },
component: kubeadmconstants.KubeScheduler, component: kubeadmconstants.KubeScheduler,
@ -194,7 +194,7 @@ func TestComponentProbe(t *testing.T) {
func TestEtcdProbe(t *testing.T) { func TestEtcdProbe(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
cfg *kubeadmapi.MasterConfiguration cfg *kubeadmapi.InitConfiguration
component string component string
port int port int
certsDir string certsDir string
@ -205,7 +205,7 @@ func TestEtcdProbe(t *testing.T) {
}{ }{
{ {
name: "valid etcd probe using listen-client-urls IPv4 addresses", name: "valid etcd probe using listen-client-urls IPv4 addresses",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ExtraArgs: map[string]string{ ExtraArgs: map[string]string{
@ -223,7 +223,7 @@ func TestEtcdProbe(t *testing.T) {
}, },
{ {
name: "valid etcd probe using listen-client-urls unspecified IPv6 address", name: "valid etcd probe using listen-client-urls unspecified IPv6 address",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ExtraArgs: map[string]string{ ExtraArgs: map[string]string{
@ -241,7 +241,7 @@ func TestEtcdProbe(t *testing.T) {
}, },
{ {
name: "valid etcd probe using listen-client-urls unspecified IPv6 address 2", name: "valid etcd probe using listen-client-urls unspecified IPv6 address 2",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ExtraArgs: map[string]string{ ExtraArgs: map[string]string{
@ -259,7 +259,7 @@ func TestEtcdProbe(t *testing.T) {
}, },
{ {
name: "valid etcd probe using listen-client-urls unspecified IPv6 address 3", name: "valid etcd probe using listen-client-urls unspecified IPv6 address 3",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ExtraArgs: map[string]string{ ExtraArgs: map[string]string{
@ -277,7 +277,7 @@ func TestEtcdProbe(t *testing.T) {
}, },
{ {
name: "valid etcd probe using listen-client-urls unspecified IPv4 address", name: "valid etcd probe using listen-client-urls unspecified IPv4 address",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ExtraArgs: map[string]string{ ExtraArgs: map[string]string{
@ -295,7 +295,7 @@ func TestEtcdProbe(t *testing.T) {
}, },
{ {
name: "valid etcd probe using listen-client-urls IPv6 addresses", name: "valid etcd probe using listen-client-urls IPv6 addresses",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ExtraArgs: map[string]string{ ExtraArgs: map[string]string{
@ -313,7 +313,7 @@ func TestEtcdProbe(t *testing.T) {
}, },
{ {
name: "valid IPv4 etcd probe using hostname for listen-client-urls", name: "valid IPv4 etcd probe using hostname for listen-client-urls",
cfg: &kubeadmapi.MasterConfiguration{ cfg: &kubeadmapi.InitConfiguration{
Etcd: kubeadmapi.Etcd{ Etcd: kubeadmapi.Etcd{
Local: &kubeadmapi.LocalEtcd{ Local: &kubeadmapi.LocalEtcd{
ExtraArgs: map[string]string{ ExtraArgs: map[string]string{

View File

@ -42,10 +42,10 @@ func SetupTempDir(t *testing.T) string {
return tmpdir return tmpdir
} }
// SetupMasterConfigurationFile is a utility function for kubeadm testing that writes a master configuration file // SetupInitConfigurationFile is a utility function for kubeadm testing that writes a master configuration file
// into /config subfolder of a given temporary directory. // into /config subfolder of a given temporary directory.
// The function returns the path of the created master configuration file. // The function returns the path of the created master configuration file.
func SetupMasterConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.MasterConfiguration) string { func SetupInitConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.InitConfiguration) string {
cfgPath := filepath.Join(tmpdir, "config/masterconfig.yaml") cfgPath := filepath.Join(tmpdir, "config/masterconfig.yaml")
if err := os.MkdirAll(filepath.Dir(cfgPath), os.FileMode(0755)); err != nil { if err := os.MkdirAll(filepath.Dir(cfgPath), os.FileMode(0755)); err != nil {
@ -54,7 +54,7 @@ func SetupMasterConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.M
cfgTemplate := template.Must(template.New("init").Parse(dedent.Dedent(` cfgTemplate := template.Must(template.New("init").Parse(dedent.Dedent(`
apiVersion: kubeadm.k8s.io/v1alpha3 apiVersion: kubeadm.k8s.io/v1alpha3
kind: MasterConfiguration kind: InitConfiguration
certificatesDir: {{.CertificatesDir}} certificatesDir: {{.CertificatesDir}}
api: api:
advertiseAddress: {{.API.AdvertiseAddress}} advertiseAddress: {{.API.AdvertiseAddress}}