From acb8d4ed20635c79a359dba41d75c82f0153b4e2 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Fri, 21 Jan 2022 14:06:49 -0500 Subject: [PATCH] Fix regression pruning array fields with x-kubernetes-preserve-unknown-fields: true --- .../pkg/apiserver/schema/pruning/algorithm.go | 2 +- .../pkg/apiserver/schema/pruning/algorithm_test.go | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning/algorithm.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning/algorithm.go index b7ed87b439e..b2b1bf81fbd 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning/algorithm.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning/algorithm.go @@ -189,7 +189,7 @@ func skipPrune(x interface{}, s *structuralschema.Structural, opts *PruneOptions case []interface{}: for i, v := range x { opts.appendIndex(i) - prune(v, s.Items, opts) + skipPrune(v, s.Items, opts) opts.parentPath = opts.parentPath[:origPathLen] } default: diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning/algorithm_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning/algorithm_test.go index f050d3eb5f1..c7505478f5e 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning/algorithm_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning/algorithm_test.go @@ -88,7 +88,8 @@ func TestPrune(t *testing.T) { "unspecified": "bar", "unspecifiedObject": {"unspecified": "bar"}, "pruning": {"unspecified": "bar"}, - "preserving": {"unspecified": "bar"} + "preserving": {"unspecified": "bar"}, + "preservingUnknownType": [{"foo":true},{"bar":true}] }, "preservingAdditionalPropertiesNotInheritingXPreserveUnknownFields": { "foo": { @@ -129,6 +130,10 @@ func TestPrune(t *testing.T) { Generic: structuralschema.Generic{Type: "object"}, Extensions: structuralschema.Extensions{XPreserveUnknownFields: true}, }, + "preservingUnknownType": { + Generic: structuralschema.Generic{Type: ""}, + Extensions: structuralschema.Extensions{XPreserveUnknownFields: true}, + }, "pruning": { Generic: structuralschema.Generic{Type: "object"}, }, @@ -177,7 +182,8 @@ func TestPrune(t *testing.T) { "unspecified": "bar", "unspecifiedObject": {"unspecified": "bar"}, "pruning": {}, - "preserving": {"unspecified": "bar"} + "preserving": {"unspecified": "bar"}, + "preservingUnknownType": [{"foo":true},{"bar":true}] }, "preservingAdditionalPropertiesNotInheritingXPreserveUnknownFields": { "foo": {