Strip defaults in new places

This commit is contained in:
Antoine Pelisse 2020-11-11 12:42:12 -08:00
parent 07a40273eb
commit de4abee3ef
6 changed files with 15 additions and 5 deletions

View File

@ -42,5 +42,6 @@ go_test(
deps = [ deps = [
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//vendor/github.com/go-openapi/spec:go_default_library", "//vendor/github.com/go-openapi/spec:go_default_library",
"//vendor/k8s.io/kube-openapi/pkg/handler:go_default_library",
], ],
) )

View File

@ -24,12 +24,15 @@ import (
"github.com/go-openapi/spec" "github.com/go-openapi/spec"
"k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/diff"
"k8s.io/kube-openapi/pkg/handler"
) )
func TestOpenAPIRoundtrip(t *testing.T) { func TestOpenAPIRoundtrip(t *testing.T) {
dummyRef := func(name string) spec.Ref { return spec.MustCreateRef("#/definitions/dummy") } dummyRef := func(name string) spec.Ref { return spec.MustCreateRef("#/definitions/dummy") }
for name, value := range GetOpenAPIDefinitions(dummyRef) { for name, value := range GetOpenAPIDefinitions(dummyRef) {
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
// TODO(kubernetes/gengo#193): We currently round-trip ints to floats.
value.Schema = *handler.PruneDefaultsSchema(&value.Schema)
data, err := json.Marshal(value.Schema) data, err := json.Marshal(value.Schema)
if err != nil { if err != nil {
t.Error(err) t.Error(err)

View File

@ -1320,7 +1320,8 @@ func buildOpenAPIModelsForApply(staticOpenAPISpec *goopenapispec.Swagger, crd *a
specs := []*goopenapispec.Swagger{} specs := []*goopenapispec.Swagger{}
for _, v := range crd.Spec.Versions { for _, v := range crd.Spec.Versions {
s, err := builder.BuildSwagger(crd, v.Name, builder.Options{V2: false, StripDefaults: true, StripValueValidation: true, StripNullable: true, AllowNonStructural: true}) // Defaults are not pruned here, but before being served.
s, err := builder.BuildSwagger(crd, v.Name, builder.Options{V2: false, StripDefaults: false, StripValueValidation: true, StripNullable: true, AllowNonStructural: true})
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -1331,7 +1332,6 @@ func buildOpenAPIModelsForApply(staticOpenAPISpec *goopenapispec.Swagger, crd *a
if err != nil { if err != nil {
return nil, err return nil, err
} }
models, err := utilopenapi.ToProtoModels(mergedOpenAPI) models, err := utilopenapi.ToProtoModels(mergedOpenAPI)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -202,7 +202,8 @@ func buildVersionSpecs(crd *apiextensionsv1.CustomResourceDefinition, oldSpecs m
if !v.Served { if !v.Served {
continue continue
} }
spec, err := builder.BuildSwagger(crd, v.Name, builder.Options{V2: true, StripDefaults: true}) // Defaults are not pruned here, but before being served.
spec, err := builder.BuildSwagger(crd, v.Name, builder.Options{V2: true, StripDefaults: false})
if err != nil { if err != nil {
return nil, false, err return nil, false, err
} }

View File

@ -38,7 +38,7 @@ func (oa OpenAPI) Install(c *restful.Container, mux *mux.PathRecorderMux) (*hand
if err != nil { if err != nil {
klog.Fatalf("Failed to build open api spec for root: %v", err) klog.Fatalf("Failed to build open api spec for root: %v", err)
} }
spec.Definitions = handler.PruneDefaults(spec.Definitions)
openAPIVersionedService, err := handler.NewOpenAPIService(spec) openAPIVersionedService, err := handler.NewOpenAPIService(spec)
if err != nil { if err != nil {
klog.Fatalf("Failed to create OpenAPIService: %v", err) klog.Fatalf("Failed to create OpenAPIService: %v", err)

View File

@ -175,7 +175,12 @@ func (s *specAggregator) buildOpenAPISpec() (specToReturn *spec.Swagger, err err
if specInfo.spec == nil { if specInfo.spec == nil {
continue continue
} }
specs = append(specs, *specInfo) // Copy the spec before removing the defaults.
localSpec := *specInfo.spec
localSpecInfo := *specInfo
localSpecInfo.spec = &localSpec
localSpecInfo.spec.Definitions = handler.PruneDefaults(specInfo.spec.Definitions)
specs = append(specs, localSpecInfo)
} }
if len(specs) == 0 { if len(specs) == 0 {
return &spec.Swagger{}, nil return &spec.Swagger{}, nil