Merge pull request #131559 from jpbetz/fix-unstructured-to-val-equality

Fix UnstructuredToVal map equality to respect nil fields

Kubernetes-commit: 3f808638076e9e2be5f53a4aec9d2d5d00b997e1
This commit is contained in:
Kubernetes Publisher 2025-05-05 19:53:20 -07:00
commit 23913f0bf4
4 changed files with 21 additions and 7 deletions

2
go.mod
View File

@ -49,7 +49,7 @@ require (
gopkg.in/go-jose/go-jose.v2 v2.6.3
gopkg.in/natefinch/lumberjack.v2 v2.2.1
k8s.io/api v0.0.0-20250503031400-f7e72be095ee
k8s.io/apimachinery v0.0.0-20250503031111-512f488de379
k8s.io/apimachinery v0.0.0-20250506031221-863c50fec75c
k8s.io/client-go v0.0.0-20250503031754-7aa362d5dd59
k8s.io/component-base v0.0.0-20250503032835-394b28e84ba2
k8s.io/klog/v2 v2.130.1

4
go.sum
View File

@ -369,8 +369,8 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
k8s.io/api v0.0.0-20250503031400-f7e72be095ee h1:+YExLdNpiASfnQXQfpyLIGIps0RcJPNt7NdiCVH8Bys=
k8s.io/api v0.0.0-20250503031400-f7e72be095ee/go.mod h1:AsuSCzGYZszSLf5GB+qx8FBGGirk0I/TZUkQJFsPRAQ=
k8s.io/apimachinery v0.0.0-20250503031111-512f488de379 h1:SRKtgNyQVTGF7yOs8CXK9AhZMd/1g5h4YlHAkYVXq5Y=
k8s.io/apimachinery v0.0.0-20250503031111-512f488de379/go.mod h1:b+h1nads2hmyfwvvorkgHUriRTTaJ2p2mk0l03sESn8=
k8s.io/apimachinery v0.0.0-20250506031221-863c50fec75c h1:hSSNaL3pe6mN9q2QvuUT9PPDpgdfOoUTEWvBodVOM4Y=
k8s.io/apimachinery v0.0.0-20250506031221-863c50fec75c/go.mod h1:b+h1nads2hmyfwvvorkgHUriRTTaJ2p2mk0l03sESn8=
k8s.io/client-go v0.0.0-20250503031754-7aa362d5dd59 h1:n8NUttTLfP515BaQfYTG+ktgOhXknisqBRg2ttvGMzM=
k8s.io/client-go v0.0.0-20250503031754-7aa362d5dd59/go.mod h1:M+V5ZD54hCEexMLVuebHThquNdpXZdNqpuDCoD1LjSM=
k8s.io/component-base v0.0.0-20250503032835-394b28e84ba2 h1:Sn22KR7kHIivpSgJYqNzt5d2mBYBipLAXLK02SlVqHM=

View File

@ -318,6 +318,16 @@ func TestToValue(t *testing.T) {
"s2": struct2,
},
},
{
name: "compare: identical complex structs",
expression: "c1 == c2",
activation: map[string]typedValue{"c1": complex1, "c2": complex1Again},
},
{
name: "compare: different complex structs",
expression: "c1 != c2",
activation: map[string]typedValue{"c1": complex1, "c2": complex2},
},
{
name: "compare: struct and pointer to identical struct",
expression: "s1 == s1_ptr",

View File

@ -598,13 +598,17 @@ func (t *unstructuredMap) Equal(other ref.Val) ref.Val {
if t.Size() != oMap.Size() {
return types.False
}
for key, value := range t.value {
if propSchema, ok := t.propSchema(key); ok {
ov, found := oMap.Find(types.String(key))
if !found {
if _, ok := t.propSchema(key); ok {
v, found := t.Find(types.String(key))
ov, oFound := oMap.Find(types.String(key))
if found != oFound {
return types.False
}
v := UnstructuredToVal(value, propSchema)
if !found {
continue
}
vEq := v.Equal(ov)
if vEq != types.True {
return vEq // either false or error