diff --git a/pkg/engine/variables/operator/anyin.go b/pkg/engine/variables/operator/anyin.go index 5bb5d791bf..451b7893af 100644 --- a/pkg/engine/variables/operator/anyin.go +++ b/pkg/engine/variables/operator/anyin.go @@ -134,6 +134,14 @@ func anySetExistsInArray(key []string, value interface{}, log logr.Logger, anyNo } return false, isAnyIn(key, valueSlice) + case int, int32, int64, float32, float64, bool: + var valueSlice []string + valueSlice = append(valueSlice, fmt.Sprint(value)) + if anyNotIn { + return false, isAnyNotIn(key, valueSlice) + } + return false, isAnyIn(key, valueSlice) + case string: if len(key) == 1 && key[0] == valuesAvailable { if anyNotIn { diff --git a/pkg/engine/variables/operator/anynotin_test.go b/pkg/engine/variables/operator/anynotin_test.go index 2d014c891a..b0bbfda28a 100644 --- a/pkg/engine/variables/operator/anynotin_test.go +++ b/pkg/engine/variables/operator/anynotin_test.go @@ -46,7 +46,6 @@ func TestAnyNotInHandler_Evaluate(t *testing.T) { }, want: true, }, - { name: "key is int and in value", args: args{ @@ -55,6 +54,14 @@ func TestAnyNotInHandler_Evaluate(t *testing.T) { }, want: false, }, + { + name: "key is int and in value", + args: args{ + key: 1, + value: []interface{}{1, 2, 3}, + }, + want: false, + }, { name: "key is int and not in value", args: args{ @@ -63,6 +70,38 @@ func TestAnyNotInHandler_Evaluate(t *testing.T) { }, want: true, }, + { + name: "key is float and in value", + args: args{ + key: 3.14, + value: "3.14", + }, + want: false, + }, + { + name: "key is float and in value", + args: args{ + key: 2.2, + value: []interface{}{1.1, 2.2, 3.3}, + }, + want: false, + }, + { + name: "key is float and not in value", + args: args{ + key: 3.14, + value: "default", + }, + want: true, + }, + { + name: "key is boolean and in value", + args: args{ + key: true, + value: true, + }, + want: false, + }, { name: "key is array and in value", args: args{ @@ -87,6 +126,54 @@ func TestAnyNotInHandler_Evaluate(t *testing.T) { }, want: true, }, + { + name: "key is array of int and partially in value", + args: args{ + key: []interface{}{1, 2, 3}, + value: 2, + }, + want: true, + }, + { + name: "key is array of int and not in value", + args: args{ + key: []interface{}{1, 2, 3}, + value: 4, + }, + want: true, + }, + { + name: "key is array of float and partially in value", + args: args{ + key: []interface{}{1.1, 2.2, 3.3}, + value: 1.1, + }, + want: true, + }, + { + name: "key is array of float and not in value", + args: args{ + key: []interface{}{1.1, 2.2, 3.3}, + value: 4.4, + }, + want: true, + }, + { + name: "key is array of bool and partially in value", + args: args{ + key: []interface{}{true, false}, + value: true, + }, + want: true, + }, + { + name: "key is an array of bool and not in value", + args: args{ + key: []interface{}{true}, + value: false, + }, + want: true, + }, { name: "key and value are array and not in value", args: args{