diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha2/register.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha2/register.go index f80e17bd67a..1a36910961f 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha2/register.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha2/register.go @@ -58,9 +58,9 @@ func Resource(resource string) schema.GroupResource { func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, - &InitConfiguration{}, &NodeConfiguration{}, ) + scheme.AddKnownTypeWithName(SchemeGroupVersion.WithKind("MasterConfiguration"), &InitConfiguration{}) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) return nil } diff --git a/cmd/kubeadm/app/cmd/config.go b/cmd/kubeadm/app/cmd/config.go index 3580694e0a1..fcf70fa2102 100644 --- a/cmd/kubeadm/app/cmd/config.go +++ b/cmd/kubeadm/app/cmd/config.go @@ -47,7 +47,8 @@ import ( ) var ( - availableAPIObjects = []string{constants.InitConfigurationKind, constants.NodeConfigurationKind} + defaultAPIObjects = []string{constants.InitConfigurationKind, constants.NodeConfigurationKind} + availableAPIObjects = []string{constants.InitConfigurationKind, constants.MasterConfigurationKind, constants.NodeConfigurationKind} // sillyToken is only set statically to make kubeadm not randomize the token on every run sillyToken = kubeadmapiv1alpha3.BootstrapToken{ Token: &kubeadmapiv1alpha3.BootstrapTokenString{ @@ -105,7 +106,7 @@ func NewCmdConfigPrintDefault(out io.Writer) *cobra.Command { `), sillyToken), Run: func(cmd *cobra.Command, args []string) { if len(apiObjects) == 0 { - apiObjects = availableAPIObjects + apiObjects = defaultAPIObjects } allBytes := [][]byte{} for _, apiObject := range apiObjects { @@ -125,7 +126,7 @@ func getDefaultAPIObjectBytes(apiObject string) ([]byte, error) { var internalcfg runtime.Object var err error switch apiObject { - case constants.InitConfigurationKind: + case constants.InitConfigurationKind, constants.MasterConfigurationKind: internalcfg, err = configutil.ConfigFileAndDefaultsToInternalConfig("", &kubeadmapiv1alpha3.InitConfiguration{ API: kubeadmapiv1alpha3.API{AdvertiseAddress: "1.2.3.4"}, BootstrapTokens: []kubeadmapiv1alpha3.BootstrapToken{sillyToken}, diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index 16ef56e7575..96a67d0942c 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -289,6 +289,10 @@ const ( // InitConfigurationKind is the string kind value for the InitConfiguration struct InitConfigurationKind = "InitConfiguration" + // MasterConfigurationKind is the string kind value for the v1alpha2-named MasterConfiguration struct + // In v1alpha3 and higher, this struct is now named InitConfiguration + MasterConfigurationKind = "MasterConfiguration" + // NodeConfigurationKind is the string kind value for the InitConfiguration struct NodeConfigurationKind = "NodeConfiguration" diff --git a/cmd/kubeadm/app/util/config/common.go b/cmd/kubeadm/app/util/config/common.go index 5ed571eb409..5e2a6a86df1 100644 --- a/cmd/kubeadm/app/util/config/common.go +++ b/cmd/kubeadm/app/util/config/common.go @@ -45,7 +45,7 @@ func AnyConfigFileAndDefaultsToInternal(cfgPath string) (runtime.Object, error) } // First, check if the gvk list has InitConfiguration and in that case try to unmarshal it - if kubeadmutil.GroupVersionKindsHasInitConfiguration(gvks) { + if kubeadmutil.GroupVersionKindsHasInitConfiguration(gvks...) { return ConfigFileAndDefaultsToInternalConfig(cfgPath, &kubeadmapiv1alpha3.InitConfiguration{}) } if kubeadmutil.GroupVersionKindsHasNodeConfiguration(gvks) { diff --git a/cmd/kubeadm/app/util/config/masterconfig.go b/cmd/kubeadm/app/util/config/masterconfig.go index b9713e8f385..dbddb03f978 100644 --- a/cmd/kubeadm/app/util/config/masterconfig.go +++ b/cmd/kubeadm/app/util/config/masterconfig.go @@ -163,7 +163,7 @@ func BytesToInternalConfig(b []byte) (*kubeadmapi.InitConfiguration, error) { continue } - if gvk.Kind == kubeadmconstants.InitConfigurationKind { + if kubeadmutil.GroupVersionKindsHasInitConfiguration(gvk) { if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), fileContent, internalcfg); err != nil { return nil, err } diff --git a/cmd/kubeadm/app/util/config/testdata/conversion/master/v1alpha3.yaml b/cmd/kubeadm/app/util/config/testdata/conversion/master/v1alpha3.yaml index cc9952ed3b3..0c620507182 100644 --- a/cmd/kubeadm/app/util/config/testdata/conversion/master/v1alpha3.yaml +++ b/cmd/kubeadm/app/util/config/testdata/conversion/master/v1alpha3.yaml @@ -24,7 +24,7 @@ etcd: dataDir: /var/lib/etcd image: "" imageRepository: k8s.gcr.io -kind: MasterConfiguration +kind: InitConfiguration kubernetesVersion: v1.10.2 networking: dnsDomain: cluster.local diff --git a/cmd/kubeadm/app/util/config/testdata/defaulting/master/defaulted.yaml b/cmd/kubeadm/app/util/config/testdata/defaulting/master/defaulted.yaml index 98f35196a89..8633b690729 100644 --- a/cmd/kubeadm/app/util/config/testdata/defaulting/master/defaulted.yaml +++ b/cmd/kubeadm/app/util/config/testdata/defaulting/master/defaulted.yaml @@ -22,7 +22,7 @@ etcd: dataDir: /var/lib/etcd image: "" imageRepository: my-company.com -kind: MasterConfiguration +kind: InitConfiguration kubernetesVersion: v1.10.2 networking: dnsDomain: cluster.global diff --git a/cmd/kubeadm/app/util/marshal.go b/cmd/kubeadm/app/util/marshal.go index b66e3d655f4..23bf6552137 100644 --- a/cmd/kubeadm/app/util/marshal.go +++ b/cmd/kubeadm/app/util/marshal.go @@ -148,8 +148,10 @@ func GroupVersionKindsHasKind(gvks []schema.GroupVersionKind, kind string) bool } // GroupVersionKindsHasInitConfiguration returns whether the following gvk slice contains a InitConfiguration object -func GroupVersionKindsHasInitConfiguration(gvks []schema.GroupVersionKind) bool { - return GroupVersionKindsHasKind(gvks, constants.InitConfigurationKind) +func GroupVersionKindsHasInitConfiguration(gvks ...schema.GroupVersionKind) bool { + // Finding a MasterConfiguration kind is also okay, as it will decode and convert into an InitConfiguration struct eventually + // TODO: When we remove support for the v1alpha2 API, remove support for MasterConfiguration + return GroupVersionKindsHasKind(gvks, constants.InitConfigurationKind) || GroupVersionKindsHasKind(gvks, constants.MasterConfigurationKind) } // GroupVersionKindsHasNodeConfiguration returns whether the following gvk slice contains a NodeConfiguration object diff --git a/cmd/kubeadm/app/util/marshal_test.go b/cmd/kubeadm/app/util/marshal_test.go index d5737ce4732..8952f34cfe1 100644 --- a/cmd/kubeadm/app/util/marshal_test.go +++ b/cmd/kubeadm/app/util/marshal_test.go @@ -366,7 +366,7 @@ func TestGroupVersionKindsHasInitConfiguration(t *testing.T) { for _, rt := range tests { t.Run(rt.name, func(t2 *testing.T) { - actual := GroupVersionKindsHasInitConfiguration(rt.gvks) + actual := GroupVersionKindsHasInitConfiguration(rt.gvks...) if rt.expected != actual { t2.Errorf("expected gvks has InitConfiguration: %t\n\tactual: %t\n", rt.expected, actual) }