m/n/kubernetes: introduce feature gate infra
This introduces centralized infrastructure to control feature gates in K8s.
It includes a test to make sure that we do not keep outdated flags in there.
Change-Id: Ife251cbd5210bc8b3757bb3829e91bcdb2e6fdfb
Reviewed-on: https://review.monogon.dev/c/monogon/+/3664
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/node/kubernetes/feature_gates_test.go b/metropolis/node/kubernetes/feature_gates_test.go
new file mode 100644
index 0000000..3cccd14
--- /dev/null
+++ b/metropolis/node/kubernetes/feature_gates_test.go
@@ -0,0 +1,35 @@
+package kubernetes
+
+import (
+ "testing"
+
+ utilfeature "k8s.io/apiserver/pkg/util/feature"
+ "k8s.io/component-base/featuregate"
+)
+
+func TestFeatureGateDefaults(t *testing.T) {
+ for f, en := range extraFeatureGates {
+ if utilfeature.DefaultFeatureGate.Enabled(f) == en {
+ t.Errorf("Feature gate %q is already %v by default, remove it from extraFeatureGates", string(f), en)
+ }
+ }
+}
+
+func TestAsFlags(t *testing.T) {
+ for _, c := range []struct {
+ name string
+ fg featureGates
+ expected string
+ }{
+ {"None", featureGates{}, "--feature-gates="},
+ {"Single", featureGates{featuregate.Feature("Test"): true}, "--feature-gates=Test=true"},
+ {"Multiple", featureGates{featuregate.Feature("Test"): true, featuregate.Feature("Test2"): false}, "--feature-gates=Test=true,Test2=false"},
+ } {
+ t.Run(c.name, func(t *testing.T) {
+ got := c.fg.AsFlag()
+ if got != c.expected {
+ t.Errorf("Expected %q, got %q", c.expected, got)
+ }
+ })
+ }
+}