diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 374043b782b..fb2588b80be 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -979,7 +979,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS genericfeatures.DryRun: {Default: true, PreRelease: featuregate.GA}, genericfeatures.ServerSideApply: {Default: true, PreRelease: featuregate.GA}, genericfeatures.APIPriorityAndFairness: {Default: true, PreRelease: featuregate.Beta}, - genericfeatures.OpenAPIEnums: {Default: false, PreRelease: featuregate.Alpha}, + genericfeatures.OpenAPIEnums: {Default: true, PreRelease: featuregate.Beta}, genericfeatures.CustomResourceValidationExpressions: {Default: false, PreRelease: featuregate.Alpha}, genericfeatures.OpenAPIV3: {Default: false, PreRelease: featuregate.Alpha}, genericfeatures.ServerSideFieldValidation: {Default: false, PreRelease: featuregate.Alpha}, diff --git a/staging/src/k8s.io/apiserver/pkg/features/kube_features.go b/staging/src/k8s.io/apiserver/pkg/features/kube_features.go index 1cb1aaf0918..f5ff7f073dd 100644 --- a/staging/src/k8s.io/apiserver/pkg/features/kube_features.go +++ b/staging/src/k8s.io/apiserver/pkg/features/kube_features.go @@ -151,6 +151,7 @@ const ( // owner: @jiahuif // kep: http://kep.k8s.io/2887 // alpha: v1.23 + // beta: v1.24 // // Enables populating "enum" field of OpenAPI schemas // in the spec returned from kube-apiserver. @@ -201,7 +202,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS EfficientWatchResumption: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, APIServerIdentity: {Default: false, PreRelease: featuregate.Alpha}, APIServerTracing: {Default: false, PreRelease: featuregate.Alpha}, - OpenAPIEnums: {Default: false, PreRelease: featuregate.Alpha}, + OpenAPIEnums: {Default: true, PreRelease: featuregate.Beta}, CustomResourceValidationExpressions: {Default: false, PreRelease: featuregate.Alpha}, OpenAPIV3: {Default: false, PreRelease: featuregate.Alpha}, ServerSideFieldValidation: {Default: false, PreRelease: featuregate.Alpha}, diff --git a/staging/src/k8s.io/apiserver/pkg/util/openapi/enablement_test.go b/staging/src/k8s.io/apiserver/pkg/util/openapi/enablement_test.go index 35bfd647f2b..7b6999a621a 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/openapi/enablement_test.go +++ b/staging/src/k8s.io/apiserver/pkg/util/openapi/enablement_test.go @@ -17,9 +17,13 @@ limitations under the License. package openapi import ( + "fmt" "strings" "testing" + "k8s.io/apiserver/pkg/features" + utilfeature "k8s.io/apiserver/pkg/util/feature" + featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/kube-openapi/pkg/common" "k8s.io/kube-openapi/pkg/validation/spec" ) @@ -91,16 +95,44 @@ var getOpenAPIDefs common.GetOpenAPIDefinitions = func(ref common.ReferenceCallb } func TestGetOpenAPIDefinitionsWithoutDisabledFeatures(t *testing.T) { - defs := GetOpenAPIDefinitionsWithoutDisabledFeatures(getOpenAPIDefs)(func(path string) spec.Ref { - return spec.Ref{} - }) - def := defs["k8s.io/api/apps/v1.DeploymentCondition"] - for _, prop := range def.Schema.Properties { - if strings.Contains(prop.Description, "enum") { - t.Errorf("enum in description: %s", prop.Description) - } - if len(prop.Enum) != 0 { - t.Errorf("unexpected enum: %v", prop.Enum) - } + for _, tc := range []struct { + enabled bool + shouldHaveEnum bool + }{ + { + enabled: true, + shouldHaveEnum: true, + }, + { + enabled: false, + shouldHaveEnum: false, + }, + } { + t.Run(fmt.Sprintf("enabled=%v", tc.enabled), func(t *testing.T) { + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.OpenAPIEnums, tc.enabled)() + defs := GetOpenAPIDefinitionsWithoutDisabledFeatures(getOpenAPIDefs)(func(path string) spec.Ref { + return spec.Ref{} + }) + def := defs["k8s.io/api/apps/v1.DeploymentCondition"] + enumAppeared := false + for _, prop := range def.Schema.Properties { + if strings.Contains(prop.Description, "enum") { + enumAppeared = true + if !tc.shouldHaveEnum { + t.Errorf("enum appeared, description: %s", prop.Description) + } + } + if len(prop.Enum) != 0 { + enumAppeared = true + if !tc.shouldHaveEnum { + t.Errorf("enum appeared, enum: %v", prop.Enum) + } + } + } + if !enumAppeared && tc.shouldHaveEnum { + t.Errorf("enum did not appear") + } + }) } + }