mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
kubeadm: Make the kubeadm config kinds mutually exclusive
This commit is contained in:
parent
d43e1b3032
commit
728b30b3f1
@ -82,10 +82,25 @@ func DetectUnsupportedVersion(b []byte) error {
|
|||||||
"kubeadm.k8s.io/v1alpha1": "v1.11",
|
"kubeadm.k8s.io/v1alpha1": "v1.11",
|
||||||
}
|
}
|
||||||
// If we find an old API version in this gvk list, error out and tell the user why this doesn't work
|
// If we find an old API version in this gvk list, error out and tell the user why this doesn't work
|
||||||
|
knownKinds := map[string]bool{}
|
||||||
for _, gvk := range gvks {
|
for _, gvk := range gvks {
|
||||||
if useKubeadmVersion := oldKnownAPIVersions[gvk.GroupVersion().String()]; len(useKubeadmVersion) != 0 {
|
if useKubeadmVersion := oldKnownAPIVersions[gvk.GroupVersion().String()]; len(useKubeadmVersion) != 0 {
|
||||||
return fmt.Errorf("your configuration file uses an old API spec: %q. Please use kubeadm %s instead and run 'kubeadm config migrate --old-config old.yaml --new-config new.yaml', which will write the new, similar spec using a newer API version.", gvk.GroupVersion().String(), useKubeadmVersion)
|
return fmt.Errorf("your configuration file uses an old API spec: %q. Please use kubeadm %s instead and run 'kubeadm config migrate --old-config old.yaml --new-config new.yaml', which will write the new, similar spec using a newer API version.", gvk.GroupVersion().String(), useKubeadmVersion)
|
||||||
}
|
}
|
||||||
|
knownKinds[gvk.Kind] = true
|
||||||
|
}
|
||||||
|
// InitConfiguration, MasterConfiguration and NodeConfiguration are mutually exclusive, error if more than one are specified
|
||||||
|
mutuallyExclusive := []string{constants.InitConfigurationKind, constants.MasterConfigurationKind, constants.JoinConfigurationKind, constants.NodeConfigurationKind}
|
||||||
|
foundOne := false
|
||||||
|
for _, kind := range mutuallyExclusive {
|
||||||
|
if knownKinds[kind] {
|
||||||
|
if !foundOne {
|
||||||
|
foundOne = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("invalid configuration: kinds %v are mutually exclusive", mutuallyExclusive)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -31,13 +31,21 @@ kind: InitConfiguration
|
|||||||
`),
|
`),
|
||||||
"Node_v1alpha1": []byte(`
|
"Node_v1alpha1": []byte(`
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
apiVersion: kubeadm.k8s.io/v1alpha1
|
||||||
kind: JoinConfiguration
|
kind: NodeConfiguration
|
||||||
`),
|
`),
|
||||||
"Master_v1alpha3": []byte(`
|
"Master_v1alpha2": []byte(`
|
||||||
|
apiVersion: kubeadm.k8s.io/v1alpha2
|
||||||
|
kind: MasterConfiguration
|
||||||
|
`),
|
||||||
|
"Node_v1alpha2": []byte(`
|
||||||
|
apiVersion: kubeadm.k8s.io/v1alpha2
|
||||||
|
kind: NodeConfiguration
|
||||||
|
`),
|
||||||
|
"Init_v1alpha3": []byte(`
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha3
|
apiVersion: kubeadm.k8s.io/v1alpha3
|
||||||
kind: InitConfiguration
|
kind: InitConfiguration
|
||||||
`),
|
`),
|
||||||
"Node_v1alpha3": []byte(`
|
"Join_v1alpha3": []byte(`
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha3
|
apiVersion: kubeadm.k8s.io/v1alpha3
|
||||||
kind: JoinConfiguration
|
kind: JoinConfiguration
|
||||||
`),
|
`),
|
||||||
@ -50,6 +58,10 @@ bar: bar
|
|||||||
kind: Bar
|
kind: Bar
|
||||||
foo: foo
|
foo: foo
|
||||||
bar: bar
|
bar: bar
|
||||||
|
`),
|
||||||
|
"Foo": []byte(`
|
||||||
|
apiVersion: foo.k8s.io/v1
|
||||||
|
kind: Foo
|
||||||
`),
|
`),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,16 +82,39 @@ func TestDetectUnsupportedVersion(t *testing.T) {
|
|||||||
expectedErr: true,
|
expectedErr: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Master_v1alpha3",
|
name: "Master_v1alpha2",
|
||||||
fileContents: files["Master_v1alpha3"],
|
fileContents: files["Master_v1alpha2"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Node_v1alpha3",
|
name: "Node_v1alpha2",
|
||||||
fileContents: files["Node_v1alpha3"],
|
fileContents: files["Node_v1alpha2"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Init_v1alpha3",
|
||||||
|
fileContents: files["Init_v1alpha3"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Join_v1alpha3",
|
||||||
|
fileContents: files["Join_v1alpha3"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "DuplicateMaster",
|
name: "DuplicateMaster",
|
||||||
fileContents: bytes.Join([][]byte{files["Master_v1alpha3"], files["Master_v1alpha3"]}, []byte(constants.YAMLDocumentSeparator)),
|
fileContents: bytes.Join([][]byte{files["Master_v1alpha2"], files["Master_v1alpha2"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "DuplicateNode",
|
||||||
|
fileContents: bytes.Join([][]byte{files["Node_v1alpha2"], files["Node_v1alpha2"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "DuplicateInit",
|
||||||
|
fileContents: bytes.Join([][]byte{files["Init_v1alpha3"], files["Init_v1alpha3"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "DuplicateJoin",
|
||||||
|
fileContents: bytes.Join([][]byte{files["Join_v1alpha3"], files["Join_v1alpha3"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
expectedErr: true,
|
expectedErr: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -94,7 +129,37 @@ func TestDetectUnsupportedVersion(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "v1alpha1InMultiple",
|
name: "v1alpha1InMultiple",
|
||||||
fileContents: bytes.Join([][]byte{files["Master_v1alpha3"], files["Master_v1alpha1"]}, []byte(constants.YAMLDocumentSeparator)),
|
fileContents: bytes.Join([][]byte{files["Foo"], files["Master_v1alpha1"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MustNotMixMasterNode",
|
||||||
|
fileContents: bytes.Join([][]byte{files["Master_v1alpha2"], files["Node_v1alpha2"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MustNotMixMasterJoin",
|
||||||
|
fileContents: bytes.Join([][]byte{files["Master_v1alpha2"], files["Join_v1alpha3"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MustNotMixJoinNode",
|
||||||
|
fileContents: bytes.Join([][]byte{files["Join_v1alpha3"], files["Node_v1alpha2"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MustNotMixInitMaster",
|
||||||
|
fileContents: bytes.Join([][]byte{files["Init_v1alpha3"], files["Master_v1alpha2"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MustNotMixInitNode",
|
||||||
|
fileContents: bytes.Join([][]byte{files["Init_v1alpha3"], files["Node_v1alpha2"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MustNotMixInitJoin",
|
||||||
|
fileContents: bytes.Join([][]byte{files["Init_v1alpha3"], files["Join_v1alpha3"]}, []byte(constants.YAMLDocumentSeparator)),
|
||||||
expectedErr: true,
|
expectedErr: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user