From 3659bc8f7f3edda906cf8e9826904b582edd5540 Mon Sep 17 00:00:00 2001 From: Gautier Delorme Date: Sat, 7 Nov 2020 17:11:27 +0100 Subject: [PATCH] prune type in preserve-unknown-fields objects Signed-off-by: Gautier Delorme --- .../pkg/controller/openapi/builder/builder_test.go | 3 +-- .../pkg/controller/openapi/v2/conversion.go | 7 +++++++ .../pkg/controller/openapi/v2/conversion_test.go | 3 +-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go index 78de23af7ec..fac53c71b58 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go @@ -172,8 +172,7 @@ func TestNewBuilder(t *testing.T) { }, "embedded-object": { "x-kubernetes-embedded-resource": true, - "x-kubernetes-preserve-unknown-fields": true, - "type":"object" + "x-kubernetes-preserve-unknown-fields": true } }, "x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v1"}] diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go index 320529bf68d..ae5b86a1932 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go @@ -81,6 +81,13 @@ func ToStructuralOpenAPIV2(in *structuralschema.Structural) *structuralschema.St changed = true } + if s.XPreserveUnknownFields && s.Type == "object" { + // similar as above, kubectl doesn't properly handle object fields with `x-kubernetes-preserve-unknown-fields: true` + s.Type = "" + + changed = true + } + for f, fs := range s.Properties { if fs.Nullable { s.ValueValidation.Required, changed = filterOut(s.ValueValidation.Required, f) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go index eacb92efb98..7a8cb5aabe6 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go @@ -666,8 +666,7 @@ func Test_ConvertJSONSchemaPropsToOpenAPIv2SchemaByType(t *testing.T) { }, }, }, - expected: withVendorExtensions(new(spec.Schema), "x-kubernetes-preserve-unknown-fields", true). - Typed("object", ""), + expected: withVendorExtensions(new(spec.Schema), "x-kubernetes-preserve-unknown-fields", true), }, }