Merge pull request #108898 from jiahuif-forks/feature/openapi-enums/to-beta

Graduate OpenAPI Enums to beta
This commit is contained in:
Kubernetes Prow Robot 2022-03-25 15:34:37 -07:00 committed by GitHub
commit 8f12e4a44b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 13 deletions

View File

@ -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},

View File

@ -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},

View File

@ -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")
}
})
}
}