blob: 074aecdaad3eec7cd2bf5a55805742ca35a579f7 [file] [log] [blame]
Lorenz Brund58edf42024-11-27 20:38:14 +00001package kubernetes
2
3import (
4 "fmt"
Lorenz Brunb62b8e02024-12-16 20:18:47 +01005 "sort"
Lorenz Brund58edf42024-11-27 20:38:14 +00006 "strings"
7
8 "k8s.io/component-base/featuregate"
Lorenz Brun2ecccae2024-11-27 22:03:35 +01009 "k8s.io/kubernetes/pkg/features"
Lorenz Brund58edf42024-11-27 20:38:14 +000010)
11
12type featureGates map[featuregate.Feature]bool
13
14// AsFlag returns the feature gates as a --feature-gate flag.
15func (fgs featureGates) AsFlag() string {
16 var strb strings.Builder
17 strb.WriteString("--feature-gates=")
Lorenz Brunb62b8e02024-12-16 20:18:47 +010018 features := make([]string, 0, len(fgs))
19 for f := range fgs {
20 features = append(features, string(f))
21 }
22 // Ensure deterministic output by sorting the map keys
23 sort.Strings(features)
24 for i, f := range features {
25 fmt.Fprintf(&strb, "%s=%v", f, fgs[featuregate.Feature(f)])
26 if i+1 != len(features) {
Lorenz Brund58edf42024-11-27 20:38:14 +000027 strb.WriteByte(',')
28 }
29 }
30 return strb.String()
31}
32
33// AsConfigObject returns the feature gates as a plain map for K8s configs.
34func (fgs featureGates) AsMap() map[string]bool {
35 out := make(map[string]bool)
36 for f, en := range fgs {
37 out[string(f)] = en
38 }
39 return out
40}
41
Lorenz Brun2ecccae2024-11-27 22:03:35 +010042var extraFeatureGates = featureGates{
43 features.UserNamespacesSupport: true,
44 features.UserNamespacesPodSecurityStandards: true,
45}