blob: 582110141288f0ef36324d82a182aa9d769989c6 [file] [log] [blame]
Tim Windelschmidt6d33a432025-02-04 14:34:25 +01001// Copyright The Monogon Project Authors.
2// SPDX-License-Identifier: Apache-2.0
3
Lorenz Brund58edf42024-11-27 20:38:14 +00004package kubernetes
5
6import (
7 "fmt"
Lorenz Brunb62b8e02024-12-16 20:18:47 +01008 "sort"
Lorenz Brund58edf42024-11-27 20:38:14 +00009 "strings"
10
11 "k8s.io/component-base/featuregate"
Lorenz Brun2ecccae2024-11-27 22:03:35 +010012 "k8s.io/kubernetes/pkg/features"
Lorenz Brund58edf42024-11-27 20:38:14 +000013)
14
15type featureGates map[featuregate.Feature]bool
16
17// AsFlag returns the feature gates as a --feature-gate flag.
18func (fgs featureGates) AsFlag() string {
19 var strb strings.Builder
20 strb.WriteString("--feature-gates=")
Lorenz Brunb62b8e02024-12-16 20:18:47 +010021 features := make([]string, 0, len(fgs))
22 for f := range fgs {
23 features = append(features, string(f))
24 }
25 // Ensure deterministic output by sorting the map keys
26 sort.Strings(features)
27 for i, f := range features {
28 fmt.Fprintf(&strb, "%s=%v", f, fgs[featuregate.Feature(f)])
29 if i+1 != len(features) {
Lorenz Brund58edf42024-11-27 20:38:14 +000030 strb.WriteByte(',')
31 }
32 }
33 return strb.String()
34}
35
36// AsConfigObject returns the feature gates as a plain map for K8s configs.
37func (fgs featureGates) AsMap() map[string]bool {
38 out := make(map[string]bool)
39 for f, en := range fgs {
40 out[string(f)] = en
41 }
42 return out
43}
44
Lorenz Brun2ecccae2024-11-27 22:03:35 +010045var extraFeatureGates = featureGates{
46 features.UserNamespacesSupport: true,
47 features.UserNamespacesPodSecurityStandards: true,
48}