Skip to content

Commit

Permalink
Merge pull request #69426 from rosti/allow-init-join-mix
Browse files Browse the repository at this point in the history
kubeadm: Allow mixing Init and Join Configurations
  • Loading branch information
k8s-ci-robot committed Oct 5, 2018
2 parents 6764bc4 + f0d82fb commit 1aba19a
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 17 deletions.
16 changes: 8 additions & 8 deletions cmd/kubeadm/app/util/config/common.go
Expand Up @@ -93,19 +93,19 @@ func DetectUnsupportedVersion(b []byte) error {
}
knownKinds[gvk.Kind] = true
}
// InitConfiguration, MasterConfiguration and NodeConfiguration are mutually exclusive, error if more than one are specified

// InitConfiguration and JoinConfiguration may not apply together, warn if more than one is specified
mutuallyExclusive := []string{constants.InitConfigurationKind, constants.JoinConfigurationKind}
foundOne := false
mutuallyExclusiveCount := 0
for _, kind := range mutuallyExclusive {
if knownKinds[kind] {
if !foundOne {
foundOne = true
continue
}

return fmt.Errorf("invalid configuration: kinds %v are mutually exclusive", mutuallyExclusive)
mutuallyExclusiveCount++
}
}
if mutuallyExclusiveCount > 1 {
glog.Warningf("WARNING: Detected resource kinds that may not apply: %v", mutuallyExclusive)
}

return nil
}

Expand Down
18 changes: 10 additions & 8 deletions cmd/kubeadm/app/util/config/common_test.go
Expand Up @@ -163,25 +163,27 @@ func TestDetectUnsupportedVersion(t *testing.T) {
name: "Ignore other Kind",
fileContents: bytes.Join([][]byte{files["Foo"], files["Master_v1beta1"]}, []byte(constants.YAMLDocumentSeparator)),
},
// CanMixInitJoin cases used to be MustNotMixInitJoin, however due to UX issues DetectUnsupportedVersion had to tolerate that.
// So the following tests actually verify, that Init and Join can be mixed together with no error.
{
name: "MustNotMixInitJoin v1alpha3",
name: "CanMixInitJoin v1alpha3",
fileContents: bytes.Join([][]byte{files["Init_v1alpha3"], files["Join_v1alpha3"]}, []byte(constants.YAMLDocumentSeparator)),
expectedErr: true,
expectedErr: false,
},
{
name: "MustNotMixInitJoin v1alpha3 - v1beta1",
name: "CanMixInitJoin v1alpha3 - v1beta1",
fileContents: bytes.Join([][]byte{files["Init_v1alpha3"], files["Join_v1beta1"]}, []byte(constants.YAMLDocumentSeparator)),
expectedErr: true,
expectedErr: false,
},
{
name: "MustNotMixInitJoin v1beta1 - v1alpha3",
name: "CanMixInitJoin v1beta1 - v1alpha3",
fileContents: bytes.Join([][]byte{files["Init_v1beta1"], files["Join_v1alpha3"]}, []byte(constants.YAMLDocumentSeparator)),
expectedErr: true,
expectedErr: false,
},
{
name: "MustNotMixInitJoin v1beta1",
name: "CanMixInitJoin v1beta1",
fileContents: bytes.Join([][]byte{files["Init_v1beta1"], files["Join_v1beta1"]}, []byte(constants.YAMLDocumentSeparator)),
expectedErr: true,
expectedErr: false,
},
}

Expand Down
20 changes: 19 additions & 1 deletion cmd/kubeadm/app/util/config/nodeconfig.go
Expand Up @@ -19,6 +19,7 @@ package config
import (
"fmt"
"io/ioutil"
"k8s.io/kubernetes/cmd/kubeadm/app/constants"

"github.com/golang/glog"

Expand All @@ -27,6 +28,7 @@ import (
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1"
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
)

// SetJoinDynamicDefaults checks and sets configuration values for the JoinConfiguration object
Expand Down Expand Up @@ -61,7 +63,23 @@ func NodeConfigFileAndDefaultsToInternalConfig(cfgPath string, defaultversionedc
return nil, err
}

if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), b, internalcfg); err != nil {
gvkmap, err := kubeadmutil.SplitYAMLDocuments(b)
if err != nil {
return nil, err
}

joinBytes := []byte{}
for gvk, bytes := range gvkmap {
if gvk.Kind == constants.JoinConfigurationKind {
joinBytes = bytes
}
}

if len(joinBytes) == 0 {
return nil, fmt.Errorf("no %s found in config file %q", constants.JoinConfigurationKind, cfgPath)
}

if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), joinBytes, internalcfg); err != nil {
return nil, err
}
} else {
Expand Down

0 comments on commit 1aba19a

Please sign in to comment.