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:
commit
23913f0bf4
2
go.mod
2
go.mod
|
@ -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
4
go.sum
|
@ -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=
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue