Skip to content

Commit 466a6c3

Browse files
authored
Merge pull request kubernetes#127672 from jpbetz/apiextensions-versioned-feature-gates
Migrate apiextensions-apiserver to versioned feature gates
2 parents f84bbfe + 82415c3 commit 466a6c3

File tree

5 files changed

+55
-26
lines changed

5 files changed

+55
-26
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
}

test/featuregates_linter/test_data/unversioned_feature_list.yaml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,6 @@
2828
lockToDefault: false
2929
preRelease: Beta
3030
version: ""
31-
- name: CRDValidationRatcheting
32-
versionedSpecs:
33-
- default: true
34-
lockToDefault: false
35-
preRelease: Beta
36-
version: ""
37-
- name: CustomResourceFieldSelectors
38-
versionedSpecs:
39-
- default: true
40-
lockToDefault: false
41-
preRelease: Beta
42-
version: ""
4331
- name: DisableNodeKubeProxyVersion
4432
versionedSpecs:
4533
- default: false

test/featuregates_linter/test_data/versioned_feature_list.yaml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,16 @@
220220
lockToDefault: false
221221
preRelease: Beta
222222
version: "1.23"
223+
- name: CRDValidationRatcheting
224+
versionedSpecs:
225+
- default: false
226+
lockToDefault: false
227+
preRelease: Alpha
228+
version: "1.28"
229+
- default: true
230+
lockToDefault: false
231+
preRelease: Beta
232+
version: "1.30"
223233
- name: CronJobsScheduledAnnotation
224234
versionedSpecs:
225235
- default: true
@@ -252,6 +262,16 @@
252262
lockToDefault: false
253263
preRelease: Alpha
254264
version: "1.21"
265+
- name: CustomResourceFieldSelectors
266+
versionedSpecs:
267+
- default: false
268+
lockToDefault: false
269+
preRelease: Alpha
270+
version: "1.30"
271+
- default: true
272+
lockToDefault: false
273+
preRelease: Beta
274+
version: "1.31"
255275
- name: DevicePluginCDIDevices
256276
versionedSpecs:
257277
- default: false

0 commit comments

Comments
 (0)