Merge pull request #109268 from liggitt/pruning-metadata

ServerSideFieldValidation: Fix bug treating metadata fields as unknown fields
This commit is contained in:
Kubernetes Prow Robot 2022-05-04 14:14:19 -07:00 committed by GitHub
commit 6b988c516e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 3 deletions

View File

@ -1332,7 +1332,7 @@ func (v *unstructuredSchemaCoercer) apply(u *unstructured.Unstructured) (unknown
if v.returnUnknownFieldPaths {
pruneOpts.ReturnPruned = true
}
unknownFieldPaths = structuralpruning.PruneWithOptions(u.Object, v.structuralSchemas[gv.Version], false, pruneOpts)
unknownFieldPaths = structuralpruning.PruneWithOptions(u.Object, v.structuralSchemas[gv.Version], true, pruneOpts)
structuraldefaulting.PruneNonNullableNullsWithoutDefaults(u.Object, v.structuralSchemas[gv.Version])
}

View File

@ -383,6 +383,8 @@ func TestPrune(t *testing.T) {
"kind": "Foo",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels":{"foo":"bar"},
"unspecified": "bar"
},
"unspecified":"bar",
@ -392,6 +394,8 @@ func TestPrune(t *testing.T) {
"unspecified": "bar",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels":{"foo":"bar"},
"unspecified": "bar"
},
"spec": {
@ -404,6 +408,8 @@ func TestPrune(t *testing.T) {
"unspecified": "bar",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels":{"foo":"bar"},
"unspecified": "bar"
},
"spec": {
@ -416,6 +422,8 @@ func TestPrune(t *testing.T) {
"unspecified": "bar",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels":{"foo":"bar"},
"unspecified": "bar"
},
"spec": {
@ -426,6 +434,8 @@ func TestPrune(t *testing.T) {
"unspecified": "bar",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels":{"foo":"bar"},
"unspecified": "bar"
},
"spec": {
@ -438,12 +448,18 @@ func TestPrune(t *testing.T) {
`, isResourceRoot: true, schema: &structuralschema.Structural{
Generic: structuralschema.Generic{Type: "object"},
Properties: map[string]structuralschema.Structural{
"metadata": {
Generic: structuralschema.Generic{Type: "object"},
},
"pruned": {
Generic: structuralschema.Generic{Type: "object"},
Extensions: structuralschema.Extensions{
XEmbeddedResource: true,
},
Properties: map[string]structuralschema.Structural{
"metadata": {
Generic: structuralschema.Generic{Type: "object"},
},
"spec": {
Generic: structuralschema.Generic{Type: "object"},
},
@ -471,6 +487,9 @@ func TestPrune(t *testing.T) {
XEmbeddedResource: true,
},
Properties: map[string]structuralschema.Structural{
"metadata": {
Generic: structuralschema.Generic{Type: "object"},
},
"spec": {
Generic: structuralschema.Generic{Type: "object"},
},
@ -487,6 +506,8 @@ func TestPrune(t *testing.T) {
"kind": "Foo",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels": {"foo": "bar"},
"unspecified": "bar"
},
"pruned": {
@ -494,6 +515,8 @@ func TestPrune(t *testing.T) {
"kind": "Foo",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels": {"foo": "bar"},
"unspecified": "bar"
},
"spec": {
@ -505,6 +528,8 @@ func TestPrune(t *testing.T) {
"unspecified": "bar",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels": {"foo": "bar"},
"unspecified": "bar"
},
"spec": {
@ -516,6 +541,8 @@ func TestPrune(t *testing.T) {
"kind": "Foo",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels": {"foo": "bar"},
"unspecified": "bar"
},
"spec": {
@ -524,6 +551,8 @@ func TestPrune(t *testing.T) {
"kind": "Foo",
"metadata": {
"name": "instance",
"namespace": "myns",
"labels": {"foo": "bar"},
"unspecified": "bar"
},
"spec": {

View File

@ -45,8 +45,22 @@ run_crd_tests() {
"storage": true,
"schema": {
"openAPIV3Schema": {
"x-kubernetes-preserve-unknown-fields": true,
"type": "object"
"type": "object",
"properties": {
"metadata": {"type": "object"},
"nestedField": {
"type": "object",
"properties": {
"someSubfield": {"type": "string"},
"otherSubfield": {"type": "string"},
"newSubfield": {"type": "string"}
}
},
"otherField": {"type": "string"},
"someField": {"type": "string"},
"newField": {"type": "string"},
"patched": {"type": "string"}
}
}
}
}