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.go b/metropolis/node/kubernetes/feature_gates.go
new file mode 100644
index 0000000..06d970f
--- /dev/null
+++ b/metropolis/node/kubernetes/feature_gates.go
@@ -0,0 +1,35 @@
+package kubernetes
+
+import (
+ "fmt"
+ "strings"
+
+ "k8s.io/component-base/featuregate"
+)
+
+type featureGates map[featuregate.Feature]bool
+
+// AsFlag returns the feature gates as a --feature-gate flag.
+func (fgs featureGates) AsFlag() string {
+ var strb strings.Builder
+ strb.WriteString("--feature-gates=")
+ i := 0
+ for f, en := range fgs {
+ fmt.Fprintf(&strb, "%s=%v", string(f), en)
+ if i++; i != len(fgs) {
+ strb.WriteByte(',')
+ }
+ }
+ return strb.String()
+}
+
+// AsConfigObject returns the feature gates as a plain map for K8s configs.
+func (fgs featureGates) AsMap() map[string]bool {
+ out := make(map[string]bool)
+ for f, en := range fgs {
+ out[string(f)] = en
+ }
+ return out
+}
+
+var extraFeatureGates = featureGates{}