Commit 37046e30 authored by Dr. Stefan Schimanski's avatar Dr. Stefan Schimanski

Handle feature gate errors

parent 7cdd26e1
...@@ -11,6 +11,7 @@ go_library( ...@@ -11,6 +11,7 @@ go_library(
importpath = "k8s.io/kubernetes/pkg/features", importpath = "k8s.io/kubernetes/pkg/features",
deps = [ deps = [
"//staging/src/k8s.io/apiextensions-apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/features:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/features:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/cloud-provider/features:go_default_library", "//staging/src/k8s.io/cloud-provider/features:go_default_library",
......
...@@ -18,6 +18,7 @@ package features ...@@ -18,6 +18,7 @@ package features
import ( import (
apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
"k8s.io/apimachinery/pkg/util/runtime"
genericfeatures "k8s.io/apiserver/pkg/features" genericfeatures "k8s.io/apiserver/pkg/features"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
cloudfeatures "k8s.io/cloud-provider/features" cloudfeatures "k8s.io/cloud-provider/features"
...@@ -436,7 +437,7 @@ const ( ...@@ -436,7 +437,7 @@ const (
) )
func init() { func init() {
utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates) runtime.Must(utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates))
} }
// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. // defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys.
......
...@@ -35,7 +35,9 @@ func ValidateKubeletConfiguration(kc *kubeletconfig.KubeletConfiguration) error ...@@ -35,7 +35,9 @@ func ValidateKubeletConfiguration(kc *kubeletconfig.KubeletConfiguration) error
// Make a local copy of the global feature gates and combine it with the gates set by this configuration. // Make a local copy of the global feature gates and combine it with the gates set by this configuration.
// This allows us to validate the config against the set of gates it will actually run against. // This allows us to validate the config against the set of gates it will actually run against.
localFeatureGate := utilfeature.DefaultFeatureGate.DeepCopy() localFeatureGate := utilfeature.DefaultFeatureGate.DeepCopy()
localFeatureGate.SetFromMap(kc.FeatureGates) if err := localFeatureGate.SetFromMap(kc.FeatureGates); err != nil {
return err
}
if kc.NodeLeaseDurationSeconds <= 0 { if kc.NodeLeaseDurationSeconds <= 0 {
allErrors = append(allErrors, fmt.Errorf("invalid configuration: NodeLeaseDurationSeconds must be greater than 0")) allErrors = append(allErrors, fmt.Errorf("invalid configuration: NodeLeaseDurationSeconds must be greater than 0"))
......
...@@ -10,7 +10,10 @@ go_library( ...@@ -10,7 +10,10 @@ go_library(
srcs = ["kube_features.go"], srcs = ["kube_features.go"],
importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/features", importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/features",
importpath = "k8s.io/apiserver/pkg/features", importpath = "k8s.io/apiserver/pkg/features",
deps = ["//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library"], deps = [
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
],
) )
filegroup( filegroup(
......
...@@ -17,6 +17,8 @@ limitations under the License. ...@@ -17,6 +17,8 @@ limitations under the License.
package features package features
import ( import (
"k8s.io/apimachinery/pkg/util/runtime"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
) )
...@@ -110,7 +112,7 @@ const ( ...@@ -110,7 +112,7 @@ const (
) )
func init() { func init() {
utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates) runtime.Must(utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates))
} }
// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. // defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys.
......
...@@ -108,7 +108,9 @@ func (e *E2EServices) startKubelet() (*server, error) { ...@@ -108,7 +108,9 @@ func (e *E2EServices) startKubelet() (*server, error) {
klog.Info("Starting kubelet") klog.Info("Starting kubelet")
// set feature gates so we can check which features are enabled and pass the appropriate flags // set feature gates so we can check which features are enabled and pass the appropriate flags
utilfeature.DefaultMutableFeatureGate.SetFromMap(framework.TestContext.FeatureGates) if err := utilfeature.DefaultMutableFeatureGate.SetFromMap(framework.TestContext.FeatureGates); err != nil {
return nil, err
}
// Build kubeconfig // Build kubeconfig
kubeconfigPath, err := createKubeconfigCWD() kubeconfigPath, err := createKubeconfigCWD()
......
...@@ -109,7 +109,9 @@ func (e *E2EServices) Stop() { ...@@ -109,7 +109,9 @@ func (e *E2EServices) Stop() {
func RunE2EServices(t *testing.T) { func RunE2EServices(t *testing.T) {
// Populate global DefaultFeatureGate with value from TestContext.FeatureGates. // Populate global DefaultFeatureGate with value from TestContext.FeatureGates.
// This way, statically-linked components see the same feature gate config as the test context. // This way, statically-linked components see the same feature gate config as the test context.
utilfeature.DefaultMutableFeatureGate.SetFromMap(framework.TestContext.FeatureGates) if err := utilfeature.DefaultMutableFeatureGate.SetFromMap(framework.TestContext.FeatureGates); err != nil {
t.Fatal(err)
}
e := newE2EServices() e := newE2EServices()
if err := e.run(t); err != nil { if err := e.run(t); err != nil {
klog.Fatalf("Failed to run e2e services: %v", err) klog.Fatalf("Failed to run e2e services: %v", err)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment