Skip to content

Commit 1381068

Browse files
committed
Migrate apiextensions-apiserver to versioned feature gates
1 parent 5ebd0da commit 1381068

File tree

3 files changed

+35
-14
lines changed

3 files changed

+35
-14
lines changed

pkg/features/kube_features.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ limitations under the License.
1717
package features
1818

1919
import (
20-
apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
2120
"k8s.io/apimachinery/pkg/util/runtime"
2221
genericfeatures "k8s.io/apiserver/pkg/features"
2322
utilfeature "k8s.io/apiserver/pkg/util/feature"
@@ -971,13 +970,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
971970

972971
genericfeatures.KMSv1: {Default: false, PreRelease: featuregate.Deprecated},
973972

974-
// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed
975-
// unintentionally on either side:
976-
977-
apiextensionsfeatures.CRDValidationRatcheting: {Default: true, PreRelease: featuregate.Beta},
978-
979-
apiextensionsfeatures.CustomResourceFieldSelectors: {Default: true, PreRelease: featuregate.Beta},
980-
981973
// features with duplicate definition in apiserver/controller-manager
982974

983975
CloudControllerManagerWebhook: {Default: false, PreRelease: featuregate.Alpha},

pkg/features/versioned_kube_features.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package features
1818

1919
import (
20+
apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
2021
"k8s.io/apimachinery/pkg/util/version"
2122
genericfeatures "k8s.io/apiserver/pkg/features"
2223
"k8s.io/component-base/featuregate"
@@ -95,6 +96,13 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
9596
{Version: version.MustParse("1.28"), Default: true, PreRelease: featuregate.Beta},
9697
},
9798

99+
// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed
100+
// unintentionally on either side:
101+
apiextensionsfeatures.CRDValidationRatcheting: {
102+
{Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha},
103+
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta},
104+
},
105+
98106
CrossNamespaceVolumeDataSource: {
99107
{Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha},
100108
},
@@ -109,6 +117,13 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
109117
{Version: version.MustParse("1.21"), Default: false, PreRelease: featuregate.Alpha},
110118
},
111119

120+
// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed
121+
// unintentionally on either side:
122+
apiextensionsfeatures.CustomResourceFieldSelectors: {
123+
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
124+
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
125+
},
126+
112127
DevicePluginCDIDevices: {
113128
{Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha},
114129
{Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.Beta},

staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package features
1818

1919
import (
20+
"k8s.io/apimachinery/pkg/util/runtime"
21+
"k8s.io/apimachinery/pkg/util/version"
2022
utilfeature "k8s.io/apiserver/pkg/util/feature"
2123
"k8s.io/component-base/featuregate"
2224
)
@@ -30,27 +32,39 @@ const (
3032

3133
// owner: @alexzielenski
3234
// alpha: v1.28
35+
// beta: v1.30
3336
//
3437
// Ignores errors raised on unchanged fields of Custom Resources
3538
// across UPDATE/PATCH requests.
3639
CRDValidationRatcheting featuregate.Feature = "CRDValidationRatcheting"
3740

3841
// owner: @jpbetz
3942
// alpha: v1.30
43+
// beta: v1.31
44+
// ga: v1.32
4045
//
4146
// CustomResourceDefinitions may include SelectableFields to declare which fields
4247
// may be used as field selectors.
4348
CustomResourceFieldSelectors featuregate.Feature = "CustomResourceFieldSelectors"
4449
)
4550

4651
func init() {
47-
utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates)
52+
runtime.Must(utilfeature.DefaultMutableFeatureGate.AddVersioned(defaultVersionedKubernetesFeatureGates))
4853
}
4954

50-
// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys.
51-
// To add a new feature, define a key for it above and add it here. The features will be
55+
// defaultVersionedKubernetesFeatureGates consists of all known Kubernetes-specific feature keys with VersionedSpecs.
56+
// To add a new feature, define a key for it above and add it below. The features will be
5257
// available throughout Kubernetes binaries.
53-
var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
54-
CRDValidationRatcheting: {Default: true, PreRelease: featuregate.Beta},
55-
CustomResourceFieldSelectors: {Default: true, PreRelease: featuregate.Beta},
58+
// To support n-3 compatibility version, features may only be removed 3 releases after graduation.
59+
//
60+
// Entries are alphabetized.
61+
var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
62+
CRDValidationRatcheting: {
63+
{Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha},
64+
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta},
65+
},
66+
CustomResourceFieldSelectors: {
67+
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
68+
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
69+
},
5670
}

0 commit comments

Comments
 (0)