From 09c0be6ed0e17b5a385ebcb9cb37ced86ee1fe37 Mon Sep 17 00:00:00 2001 From: Joe Lanford Date: Wed, 12 Mar 2025 09:12:59 -0400 Subject: [PATCH] crdupgradesafety: CalculateFlatSchemaDiff should ignore child items Signed-off-by: Joe Lanford --- pkg/kapp/crdupgradesafety/change_validator.go | 4 ++-- .../crdupgradesafety/change_validator_test.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/pkg/kapp/crdupgradesafety/change_validator.go b/pkg/kapp/crdupgradesafety/change_validator.go index f69e67410..775f3ed46 100644 --- a/pkg/kapp/crdupgradesafety/change_validator.go +++ b/pkg/kapp/crdupgradesafety/change_validator.go @@ -540,8 +540,8 @@ func CalculateFlatSchemaDiff(o, n FlatSchema) (map[string]FieldDiff, error) { // we should still detect changes in the children fields. oldCopy := schema.DeepCopy() newCopy := newSchema.DeepCopy() - oldCopy.Properties = nil - newCopy.Properties = nil + oldCopy.Properties, oldCopy.Items = nil, nil + newCopy.Properties, newCopy.Items = nil, nil if !reflect.DeepEqual(oldCopy, newCopy) { diffMap[field] = FieldDiff{ Old: oldCopy, diff --git a/pkg/kapp/crdupgradesafety/change_validator_test.go b/pkg/kapp/crdupgradesafety/change_validator_test.go index 2a73261aa..a9b3d4b37 100644 --- a/pkg/kapp/crdupgradesafety/change_validator_test.go +++ b/pkg/kapp/crdupgradesafety/change_validator_test.go @@ -187,6 +187,24 @@ func TestCalculateFlatSchemaDiff(t *testing.T) { }, expectedDiff: map[string]crdupgradesafety.FieldDiff{}, }, + { + name: "diff in child items only, no diff returned, no error", + old: crdupgradesafety.FlatSchema{ + "foo": &v1.JSONSchemaProps{ + Items: &v1.JSONSchemaPropsOrArray{Schema: &v1.JSONSchemaProps{ + ID: "bar", + }}, + }, + }, + new: crdupgradesafety.FlatSchema{ + "foo": &v1.JSONSchemaProps{ + Items: &v1.JSONSchemaPropsOrArray{Schema: &v1.JSONSchemaProps{ + ID: "baz", + }}, + }, + }, + expectedDiff: map[string]crdupgradesafety.FieldDiff{}, + }, { name: "field exists in old but not new, no diff returned, error", old: crdupgradesafety.FlatSchema{