diff --git a/cmd/kubeadm/app/features/features.go b/cmd/kubeadm/app/features/features.go index 52d84f30069..0104c31d35e 100644 --- a/cmd/kubeadm/app/features/features.go +++ b/cmd/kubeadm/app/features/features.go @@ -170,14 +170,14 @@ func NewFeatureGate(f *FeatureList, value string) (map[string]bool, error) { // ResolveFeatureGateDependencies resolve dependencies between feature gates func ResolveFeatureGateDependencies(featureGate map[string]bool) { + // if HighAvailability enabled and StoreCertsInSecrets disabled, both StoreCertsInSecrets + // and SelfHosting should enabled + if Enabled(featureGate, HighAvailability) && !Enabled(featureGate, StoreCertsInSecrets) { + featureGate[StoreCertsInSecrets] = true + } + // if StoreCertsInSecrets enabled, SelfHosting should enabled if Enabled(featureGate, StoreCertsInSecrets) { featureGate[SelfHosting] = true } - - // if HighAvailability enabled, both StoreCertsInSecrets and SelfHosting should enabled - if Enabled(featureGate, HighAvailability) && !Enabled(featureGate, StoreCertsInSecrets) { - featureGate[SelfHosting] = true - featureGate[StoreCertsInSecrets] = true - } } diff --git a/cmd/kubeadm/app/features/features_test.go b/cmd/kubeadm/app/features/features_test.go index 347918d1967..232b56bb797 100644 --- a/cmd/kubeadm/app/features/features_test.go +++ b/cmd/kubeadm/app/features/features_test.go @@ -21,8 +21,11 @@ import ( "testing" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/kubernetes/pkg/util/version" ) +var TestMinVersion = version.MustParseSemantic("v1.10.0-alpha.1") + func TestKnownFeatures(t *testing.T) { var someFeatures = FeatureList{ "feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}}, @@ -121,7 +124,7 @@ func TestNewFeatureGate(t *testing.T) { func TestValidateVersion(t *testing.T) { var someFeatures = FeatureList{ "feature1": {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Beta}}, - "feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}}, + "feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}, MinimumVersion: TestMinVersion}, } var tests = []struct { @@ -133,10 +136,16 @@ func TestValidateVersion(t *testing.T) { requestedFeatures: map[string]bool{"feature1": true}, expectedError: false, }, - { //no min version + { //min version but correct value given requestedFeatures: map[string]bool{"feature2": true}, + requestedVersion: "v1.10.0", expectedError: false, }, + { //min version and incorrect value given + requestedFeatures: map[string]bool{"feature2": true}, + requestedVersion: "v1.9.2", + expectedError: true, + }, } for _, test := range tests {