From de4abee3ef6f23d0ff43e01639c046c47001edc8 Mon Sep 17 00:00:00 2001 From: Antoine Pelisse Date: Wed, 11 Nov 2020 12:42:12 -0800 Subject: [PATCH] Strip defaults in new places --- pkg/generated/openapi/BUILD | 1 + pkg/generated/openapi/openapi_test.go | 3 +++ .../pkg/apiserver/customresource_handler.go | 4 ++-- .../pkg/controller/openapi/controller.go | 3 ++- staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go | 2 +- .../pkg/controllers/openapi/aggregator/aggregator.go | 7 ++++++- 6 files changed, 15 insertions(+), 5 deletions(-) diff --git a/pkg/generated/openapi/BUILD b/pkg/generated/openapi/BUILD index db1e52ea901..63213ff5986 100644 --- a/pkg/generated/openapi/BUILD +++ b/pkg/generated/openapi/BUILD @@ -42,5 +42,6 @@ go_test( deps = [ "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//vendor/github.com/go-openapi/spec:go_default_library", + "//vendor/k8s.io/kube-openapi/pkg/handler:go_default_library", ], ) diff --git a/pkg/generated/openapi/openapi_test.go b/pkg/generated/openapi/openapi_test.go index bf3513abbe2..dfa3ef4c113 100644 --- a/pkg/generated/openapi/openapi_test.go +++ b/pkg/generated/openapi/openapi_test.go @@ -24,12 +24,15 @@ import ( "github.com/go-openapi/spec" "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/kube-openapi/pkg/handler" ) func TestOpenAPIRoundtrip(t *testing.T) { dummyRef := func(name string) spec.Ref { return spec.MustCreateRef("#/definitions/dummy") } for name, value := range GetOpenAPIDefinitions(dummyRef) { 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) if err != nil { t.Error(err) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index 2391639a140..48045897d2b 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -1320,7 +1320,8 @@ func buildOpenAPIModelsForApply(staticOpenAPISpec *goopenapispec.Swagger, crd *a specs := []*goopenapispec.Swagger{} 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 { return nil, err } @@ -1331,7 +1332,6 @@ func buildOpenAPIModelsForApply(staticOpenAPISpec *goopenapispec.Swagger, crd *a if err != nil { return nil, err } - models, err := utilopenapi.ToProtoModels(mergedOpenAPI) if err != nil { return nil, err diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go index eae81724108..576a59c89bd 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go @@ -202,7 +202,8 @@ func buildVersionSpecs(crd *apiextensionsv1.CustomResourceDefinition, oldSpecs m if !v.Served { 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 { return nil, false, err } diff --git a/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go b/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go index d920dc2a2f7..c9fb43b9598 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go +++ b/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go @@ -38,7 +38,7 @@ func (oa OpenAPI) Install(c *restful.Container, mux *mux.PathRecorderMux) (*hand if err != nil { klog.Fatalf("Failed to build open api spec for root: %v", err) } - + spec.Definitions = handler.PruneDefaults(spec.Definitions) openAPIVersionedService, err := handler.NewOpenAPIService(spec) if err != nil { klog.Fatalf("Failed to create OpenAPIService: %v", err) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go b/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go index 10f68665d92..f128a523914 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go @@ -175,7 +175,12 @@ func (s *specAggregator) buildOpenAPISpec() (specToReturn *spec.Swagger, err err if specInfo.spec == nil { 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 { return &spec.Swagger{}, nil