Skip to content

Commit 73203bd

Browse files
committed
Add feature gate for CustomResourceValidation
update feature gates for generic apiserver Add apiextensions-apiserver features to golint_failures Ignore alpha feature if gate is disabled
1 parent 5f0e5df commit 73203bd

File tree

9 files changed

+100
-13
lines changed

9 files changed

+100
-13
lines changed

Diff for: hack/.golint_failures

+1
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,7 @@ staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/
548548
staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server
549549
staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer
550550
staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status
551+
staging/src/k8s.io/apiextensions-apiserver/pkg/features
551552
staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource
552553
staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition
553554
staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver

Diff for: pkg/features/BUILD

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ go_library(
99
name = "go_default_library",
1010
srcs = ["kube_features.go"],
1111
deps = [
12+
"//vendor/k8s.io/apiextensions-apiserver/pkg/features:go_default_library",
1213
"//vendor/k8s.io/apiserver/pkg/features:go_default_library",
1314
"//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
1415
],

Diff for: pkg/features/kube_features.go

+10-11
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
genericfeatures "k8s.io/apiserver/pkg/features"
2122
utilfeature "k8s.io/apiserver/pkg/util/feature"
2223
)
@@ -44,13 +45,6 @@ const (
4445
// alpha: v1.4
4546
DynamicKubeletConfig utilfeature.Feature = "DynamicKubeletConfig"
4647

47-
// owner: tallclair
48-
// alpha: v1.5
49-
//
50-
// StreamingProxyRedirects controls whether the apiserver should intercept (and follow)
51-
// redirects from the backend (Kubelet) for streaming requests (exec/attach/port-forward).
52-
StreamingProxyRedirects utilfeature.Feature = genericfeatures.StreamingProxyRedirects
53-
5448
// owner: @pweil-
5549
// alpha: v1.5
5650
//
@@ -158,11 +152,16 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
158152
DebugContainers: {Default: false, PreRelease: utilfeature.Alpha},
159153
PodPriority: {Default: false, PreRelease: utilfeature.Alpha},
160154
EnableEquivalenceClassCache: {Default: false, PreRelease: utilfeature.Alpha},
155+
TaintNodesByCondition: {Default: false, PreRelease: utilfeature.Alpha},
161156

162157
// inherited features from generic apiserver, relisted here to get a conflict if it is changed
163158
// unintentionally on either side:
164-
StreamingProxyRedirects: {Default: true, PreRelease: utilfeature.Beta},
165-
genericfeatures.AdvancedAuditing: {Default: false, PreRelease: utilfeature.Alpha},
166-
TaintNodesByCondition: {Default: false, PreRelease: utilfeature.Alpha},
167-
genericfeatures.Initializers: {Default: false, PreRelease: utilfeature.Alpha},
159+
genericfeatures.StreamingProxyRedirects: {Default: true, PreRelease: utilfeature.Beta},
160+
genericfeatures.AdvancedAuditing: {Default: false, PreRelease: utilfeature.Alpha},
161+
genericfeatures.APIResponseCompression: {Default: false, PreRelease: utilfeature.Alpha},
162+
genericfeatures.Initializers: {Default: false, PreRelease: utilfeature.Alpha},
163+
164+
// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed
165+
// unintentionally on either side:
166+
apiextensionsfeatures.CustomResourceValidation: {Default: false, PreRelease: utilfeature.Alpha},
168167
}

Diff for: staging/src/k8s.io/apiextensions-apiserver/BUILD

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ filegroup(
4545
"//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server:all-srcs",
4646
"//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer:all-srcs",
4747
"//staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status:all-srcs",
48+
"//staging/src/k8s.io/apiextensions-apiserver/pkg/features:all-srcs",
4849
"//staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource:all-srcs",
4950
"//staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition:all-srcs",
5051
"//staging/src/k8s.io/apiextensions-apiserver/test/integration:all-srcs",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package(default_visibility = ["//visibility:public"])
2+
3+
load(
4+
"@io_bazel_rules_go//go:def.bzl",
5+
"go_library",
6+
)
7+
8+
go_library(
9+
name = "go_default_library",
10+
srcs = ["kube_features.go"],
11+
deps = ["//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library"],
12+
)
13+
14+
filegroup(
15+
name = "package-srcs",
16+
srcs = glob(["**"]),
17+
tags = ["automanaged"],
18+
visibility = ["//visibility:private"],
19+
)
20+
21+
filegroup(
22+
name = "all-srcs",
23+
srcs = [":package-srcs"],
24+
tags = ["automanaged"],
25+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
Copyright 2017 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package features
18+
19+
import (
20+
utilfeature "k8s.io/apiserver/pkg/util/feature"
21+
)
22+
23+
const (
24+
// Every feature gate should add method here following this template:
25+
//
26+
// // owner: @username
27+
// // alpha: v1.4
28+
// MyFeature() bool
29+
30+
// owner: @sttts, @nikhita
31+
// alpha: v1.8
32+
//
33+
// CustomResourceValidation is a list of validation methods for CustomResources
34+
CustomResourceValidation utilfeature.Feature = "CustomResourceValidation"
35+
)
36+
37+
func init() {
38+
utilfeature.DefaultFeatureGate.Add(defaultKubernetesFeatureGates)
39+
}
40+
41+
// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys.
42+
// To add a new feature, define a key for it above and add it here. The features will be
43+
// available throughout Kubernetes binaries.
44+
var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{
45+
CustomResourceValidation: {Default: false, PreRelease: utilfeature.Alpha},
46+
}

Diff for: staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/BUILD

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ go_library(
1414
deps = [
1515
"//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library",
1616
"//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation:go_default_library",
17+
"//vendor/k8s.io/apiextensions-apiserver/pkg/features:go_default_library",
1718
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
1819
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
1920
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
@@ -28,6 +29,7 @@ go_library(
2829
"//vendor/k8s.io/apiserver/pkg/storage:go_default_library",
2930
"//vendor/k8s.io/apiserver/pkg/storage/errors:go_default_library",
3031
"//vendor/k8s.io/apiserver/pkg/storage/names:go_default_library",
32+
"//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
3133
],
3234
)
3335

Diff for: staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/strategy.go

+12
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ import (
2828
"k8s.io/apiserver/pkg/registry/generic"
2929
"k8s.io/apiserver/pkg/storage"
3030
"k8s.io/apiserver/pkg/storage/names"
31+
utilfeature "k8s.io/apiserver/pkg/util/feature"
3132

3233
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
3334
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation"
35+
apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
3436
)
3537

3638
type strategy struct {
@@ -50,6 +52,11 @@ func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Obje
5052
crd := obj.(*apiextensions.CustomResourceDefinition)
5153
crd.Status = apiextensions.CustomResourceDefinitionStatus{}
5254
crd.Generation = 1
55+
56+
// if the feature gate is disabled, drop the feature.
57+
if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceValidation) {
58+
crd.Spec.Validation = nil
59+
}
5360
}
5461

5562
func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) {
@@ -68,6 +75,11 @@ func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime
6875
if !apiequality.Semantic.DeepEqual(oldCRD.Spec, newCRD.Spec) {
6976
newCRD.Generation = oldCRD.Generation + 1
7077
}
78+
79+
if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceValidation) {
80+
newCRD.Spec.Validation = nil
81+
oldCRD.Spec.Validation = nil
82+
}
7183
}
7284

7385
func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList {

Diff for: staging/src/k8s.io/apiserver/pkg/features/kube_features.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ const (
2727
// // alpha: v1.4
2828
// MyFeature() bool
2929

30-
// owner: tallclair
30+
// owner: @tallclair
3131
// alpha: v1.5
3232
//
3333
// StreamingProxyRedirects controls whether the apiserver should intercept (and follow)
3434
// redirects from the backend (Kubelet) for streaming requests (exec/attach/port-forward).
3535
StreamingProxyRedirects utilfeature.Feature = "StreamingProxyRedirects"
3636

37-
// owner: tallclair
37+
// owner: @tallclair
3838
// alpha: v1.7
3939
//
4040
// AdvancedAuditing enables a much more general API auditing pipeline, which includes support for

0 commit comments

Comments
 (0)