1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-29 02:45:06 +00:00

Added validation for Condition Operators (#2864)

* Added validation for Condition Operators

Signed-off-by: Abhinav Sinha <zeborg3@gmail.com>

* Updated description of `Condition.Operator` with all current valid condition operators`

Signed-off-by: Abhinav Sinha <zeborg3@gmail.com>

* Added `ConditionOperators` map and updated existing `ConditionOperator` type references

Signed-off-by: Abhinav Sinha <zeborg3@gmail.com>
This commit is contained in:
Abhinav Sinha 2021-12-28 20:42:31 +05:30 committed by GitHub
parent f6e40b5dd1
commit 2cd988a153
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 390 additions and 374 deletions

View file

@ -206,8 +206,10 @@ type Condition struct {
// +kubebuilder:validation:XPreserveUnknownFields
Key apiextensions.JSON `json:"key,omitempty" yaml:"key,omitempty"`
// Operator is the operation to perform. Valid operators
// are Equals, NotEquals, In, AnyIn, AllIn and NotIn, AnyNotIn, AllNotIn.
// Operator is the conditional operation to perform. Valid operators are:
// Equals, NotEquals, In, AnyIn, AllIn, NotIn, AnyNotIn, AllNotIn, GreaterThanOrEquals,
// GreaterThan, LessThanOrEquals, LessThan, DurationGreaterThanOrEquals, DurationGreaterThan,
// DurationLessThanOrEquals, DurationLessThan
Operator ConditionOperator `json:"operator,omitempty" yaml:"operator,omitempty"`
// Value is the conditional value, or set of values. The values can be fixed set
@ -221,46 +223,46 @@ type Condition struct {
// +kubebuilder:validation:Enum=Equals;NotEquals;In;AnyIn;AllIn;NotIn;AnyNotIn;AllNotIn;GreaterThanOrEquals;GreaterThan;LessThanOrEquals;LessThan;DurationGreaterThanOrEquals;DurationGreaterThan;DurationLessThanOrEquals;DurationLessThan
type ConditionOperator string
const (
// Equal evaluates if the key is equal to the value.
// Deprecated. Use Equals instead.
Equal ConditionOperator = "Equal"
// Equals evaluates if the key is equal to the value.
Equals ConditionOperator = "Equals"
// NotEqual evaluates if the key is not equal to the value.
// Deprecated. Use NotEquals instead.
NotEqual ConditionOperator = "NotEqual"
// NotEquals evaluates if the key is not equal to the value.
NotEquals ConditionOperator = "NotEquals"
// In evaluates if the key is contained in the set of values.
In ConditionOperator = "In"
// AnyIn evaluates if any of the keys are contained in the set of values.
AnyIn ConditionOperator = "AnyIn"
// AllIn evaluates if all the keys are contained in the set of values.
AllIn ConditionOperator = "AllIn"
// NotIn evaluates if the key is not contained in the set of values.
NotIn ConditionOperator = "NotIn"
// AnyNotIn evaluates if any of the keys are not contained in the set of values.
AnyNotIn ConditionOperator = "AnyNotIn"
// AllNotIn evaluates if all the keys are not contained in the set of values.
AllNotIn ConditionOperator = "AllNotIn"
// GreaterThanOrEquals evaluates if the key (numeric) is greater than or equal to the value (numeric).
GreaterThanOrEquals ConditionOperator = "GreaterThanOrEquals"
// GreaterThan evaluates if the key (numeric) is greater than the value (numeric).
GreaterThan ConditionOperator = "GreaterThan"
// LessThanOrEquals evaluates if the key (numeric) is less than or equal to the value (numeric).
LessThanOrEquals ConditionOperator = "LessThanOrEquals"
// LessThan evaluates if the key (numeric) is less than the value (numeric).
LessThan ConditionOperator = "LessThan"
// DurationGreaterThanOrEquals evaluates if the key (duration) is greater than or equal to the value (duration)
DurationGreaterThanOrEquals ConditionOperator = "DurationGreaterThanOrEquals"
// DurationGreaterThan evaluates if the key (duration) is greater than the value (duration)
DurationGreaterThan ConditionOperator = "DurationGreaterThan"
// DurationLessThanOrEquals evaluates if the key (duration) is less than or equal to the value (duration)
DurationLessThanOrEquals ConditionOperator = "DurationLessThanOrEquals"
// DurationLessThan evaluates if the key (duration) is greater than the value (duration)
DurationLessThan ConditionOperator = "DurationLessThan"
)
// ConditionOperators stores all the valid ConditionOperator types as key-value pairs.
//
// "Equal" evaluates if the key is equal to the value. (Deprecated; Use Equals instead)
// "Equals" evaluates if the key is equal to the value.
// "NotEqual" evaluates if the key is not equal to the value. (Deprecated; Use NotEquals instead)
// "NotEquals" evaluates if the key is not equal to the value.
// "In" evaluates if the key is contained in the set of values.
// "AnyIn" evaluates if any of the keys are contained in the set of values.
// "AllIn" evaluates if all the keys are contained in the set of values.
// "NotIn" evaluates if the key is not contained in the set of values.
// "AnyNotIn" evaluates if any of the keys are not contained in the set of values.
// "AllNotIn" evaluates if all the keys are not contained in the set of values.
// "GreaterThanOrEquals" evaluates if the key (numeric) is greater than or equal to the value (numeric).
// "GreaterThan" evaluates if the key (numeric) is greater than the value (numeric).
// "LessThanOrEquals" evaluates if the key (numeric) is less than or equal to the value (numeric).
// "LessThan" evaluates if the key (numeric) is less than the value (numeric).
// "DurationGreaterThanOrEquals" evaluates if the key (duration) is greater than or equal to the value (duration)
// "DurationGreaterThan" evaluates if the key (duration) is greater than the value (duration)
// "DurationLessThanOrEquals" evaluates if the key (duration) is less than or equal to the value (duration)
// "DurationLessThan" evaluates if the key (duration) is greater than the value (duration)
var ConditionOperators = map[string]ConditionOperator{
"Equal": ConditionOperator("Equal"),
"Equals": ConditionOperator("Equals"),
"NotEqual": ConditionOperator("NotEqual"),
"NotEquals": ConditionOperator("NotEquals"),
"In": ConditionOperator("In"),
"AnyIn": ConditionOperator("AnyIn"),
"AllIn": ConditionOperator("AllIn"),
"NotIn": ConditionOperator("NotIn"),
"AnyNotIn": ConditionOperator("AnyNotIn"),
"AllNotIn": ConditionOperator("AllNotIn"),
"GreaterThanOrEquals": ConditionOperator("GreaterThanOrEquals"),
"GreaterThan": ConditionOperator("GreaterThan"),
"LessThanOrEquals": ConditionOperator("LessThanOrEquals"),
"LessThan": ConditionOperator("LessThan"),
"DurationGreaterThanOrEquals": ConditionOperator("DurationGreaterThanOrEquals"),
"DurationGreaterThan": ConditionOperator("DurationGreaterThan"),
"DurationLessThanOrEquals": ConditionOperator("DurationLessThanOrEquals"),
"DurationLessThan": ConditionOperator("DurationLessThan"),
}
// MatchResources is used to specify resource and admission review request data for
// which a policy rule is applicable.

View file

@ -16,328 +16,328 @@ func TestEvaluate(t *testing.T) {
Result bool
}{
// Equals
{kyverno.Condition{Key: "string", Operator: kyverno.Equals, Value: "string"}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.Equals, Value: 1}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.Equals, Value: int64(1)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.Equals, Value: 1}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.Equals, Value: 1.0}, true},
{kyverno.Condition{Key: true, Operator: kyverno.Equals, Value: true}, true},
{kyverno.Condition{Key: false, Operator: kyverno.Equals, Value: false}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.Equals, Value: "1Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.Equals, Value: "1024Mi"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: "1h"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: "60m"}, true},
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.Equals, Value: map[string]interface{}{"foo": "bar"}}, true},
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.Equals, Value: []interface{}{"foo", "bar"}}, true},
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.Equals, Value: []interface{}{map[string]string{"foo": "bar"}}}, true},
{kyverno.Condition{Key: "string", Operator: kyverno.Equals, Value: "not string"}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.Equals, Value: 2}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.Equals, Value: int64(2)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.Equals, Value: 2}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.Equals, Value: 2.0}, false},
{kyverno.Condition{Key: true, Operator: kyverno.Equals, Value: false}, false},
{kyverno.Condition{Key: false, Operator: kyverno.Equals, Value: true}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.Equals, Value: "10Gi"}, false},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.Equals, Value: "1024Mi"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: "5h"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: "30m"}, false},
{kyverno.Condition{Key: "string", Operator: kyverno.Equals, Value: 1}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.Equals, Value: "2"}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.Equals, Value: "2.0"}, false},
{kyverno.Condition{Key: true, Operator: kyverno.Equals, Value: "false"}, false},
{kyverno.Condition{Key: false, Operator: kyverno.Equals, Value: "true"}, false},
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.Equals, Value: map[string]interface{}{"bar": "foo"}}, false},
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.Equals, Value: []interface{}{"bar", "foo"}}, false},
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.Equals, Value: []interface{}{map[string]string{"bar": "foo"}}}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.Equals, Value: 3600}, true},
{kyverno.Condition{Key: "2h", Operator: kyverno.Equals, Value: 3600}, false},
{kyverno.Condition{Key: "1.5.2", Operator: kyverno.Equals, Value: "1.5.2"}, true},
{kyverno.Condition{Key: "1.5.2", Operator: kyverno.Equals, Value: "1.5.*"}, true},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.Equals, Value: "1.5.5"}, false},
{kyverno.Condition{Key: "string", Operator: kyverno.ConditionOperators["Equals"], Value: "string"}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["Equals"], Value: 1}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["Equals"], Value: int64(1)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["Equals"], Value: 1}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["Equals"], Value: 1.0}, true},
{kyverno.Condition{Key: true, Operator: kyverno.ConditionOperators["Equals"], Value: true}, true},
{kyverno.Condition{Key: false, Operator: kyverno.ConditionOperators["Equals"], Value: false}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["Equals"], Value: "1Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["Equals"], Value: "1024Mi"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["Equals"], Value: "1h"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["Equals"], Value: "60m"}, true},
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.ConditionOperators["Equals"], Value: map[string]interface{}{"foo": "bar"}}, true},
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.ConditionOperators["Equals"], Value: []interface{}{"foo", "bar"}}, true},
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.ConditionOperators["Equals"], Value: []interface{}{map[string]string{"foo": "bar"}}}, true},
{kyverno.Condition{Key: "string", Operator: kyverno.ConditionOperators["Equals"], Value: "not string"}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["Equals"], Value: 2}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["Equals"], Value: int64(2)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["Equals"], Value: 2}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["Equals"], Value: 2.0}, false},
{kyverno.Condition{Key: true, Operator: kyverno.ConditionOperators["Equals"], Value: false}, false},
{kyverno.Condition{Key: false, Operator: kyverno.ConditionOperators["Equals"], Value: true}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["Equals"], Value: "10Gi"}, false},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.ConditionOperators["Equals"], Value: "1024Mi"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["Equals"], Value: "5h"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["Equals"], Value: "30m"}, false},
{kyverno.Condition{Key: "string", Operator: kyverno.ConditionOperators["Equals"], Value: 1}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["Equals"], Value: "2"}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["Equals"], Value: "2.0"}, false},
{kyverno.Condition{Key: true, Operator: kyverno.ConditionOperators["Equals"], Value: "false"}, false},
{kyverno.Condition{Key: false, Operator: kyverno.ConditionOperators["Equals"], Value: "true"}, false},
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.ConditionOperators["Equals"], Value: map[string]interface{}{"bar": "foo"}}, false},
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.ConditionOperators["Equals"], Value: []interface{}{"bar", "foo"}}, false},
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.ConditionOperators["Equals"], Value: []interface{}{map[string]string{"bar": "foo"}}}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["Equals"], Value: 3600}, true},
{kyverno.Condition{Key: "2h", Operator: kyverno.ConditionOperators["Equals"], Value: 3600}, false},
{kyverno.Condition{Key: "1.5.2", Operator: kyverno.ConditionOperators["Equals"], Value: "1.5.2"}, true},
{kyverno.Condition{Key: "1.5.2", Operator: kyverno.ConditionOperators["Equals"], Value: "1.5.*"}, true},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.ConditionOperators["Equals"], Value: "1.5.5"}, false},
// Not Equals
{kyverno.Condition{Key: "string", Operator: kyverno.NotEquals, Value: "string"}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.NotEquals, Value: 1}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.NotEquals, Value: int64(1)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.NotEquals, Value: 1}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.NotEquals, Value: 1.0}, false},
{kyverno.Condition{Key: true, Operator: kyverno.NotEquals, Value: false}, true},
{kyverno.Condition{Key: false, Operator: kyverno.NotEquals, Value: false}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.NotEquals, Value: "1Gi"}, false},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.NotEquals, Value: "1024Mi"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: "1h"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: "60m"}, false},
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.NotEquals, Value: map[string]interface{}{"foo": "bar"}}, false},
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.NotEquals, Value: []interface{}{"foo", "bar"}}, false},
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.NotEquals, Value: []interface{}{map[string]string{"foo": "bar"}}}, false},
{kyverno.Condition{Key: "string", Operator: kyverno.NotEquals, Value: "not string"}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.NotEquals, Value: 2}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.NotEquals, Value: int64(2)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.NotEquals, Value: 2}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.NotEquals, Value: 2.0}, true},
{kyverno.Condition{Key: true, Operator: kyverno.NotEquals, Value: true}, false},
{kyverno.Condition{Key: false, Operator: kyverno.NotEquals, Value: true}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.NotEquals, Value: "10Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.NotEquals, Value: "1024Mi"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: "5h"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: "30m"}, true},
{kyverno.Condition{Key: "string", Operator: kyverno.NotEquals, Value: 1}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.NotEquals, Value: "2"}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.NotEquals, Value: "2.0"}, true},
{kyverno.Condition{Key: true, Operator: kyverno.NotEquals, Value: "false"}, true},
{kyverno.Condition{Key: false, Operator: kyverno.NotEquals, Value: "true"}, true},
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.NotEquals, Value: map[string]interface{}{"bar": "foo"}}, true},
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.NotEquals, Value: []interface{}{"bar", "foo"}}, true},
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.NotEquals, Value: []interface{}{map[string]string{"bar": "foo"}}}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.NotEquals, Value: 3600}, false},
{kyverno.Condition{Key: "2h", Operator: kyverno.NotEquals, Value: 3600}, true},
{kyverno.Condition{Key: "1.5.2", Operator: kyverno.NotEquals, Value: "1.5.5"}, true},
{kyverno.Condition{Key: "1.5.2", Operator: kyverno.NotEquals, Value: "1.5.*"}, false},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.NotEquals, Value: "1.5.0"}, false},
{kyverno.Condition{Key: "string", Operator: kyverno.ConditionOperators["NotEquals"], Value: "string"}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["NotEquals"], Value: 1}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["NotEquals"], Value: int64(1)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["NotEquals"], Value: 1}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["NotEquals"], Value: 1.0}, false},
{kyverno.Condition{Key: true, Operator: kyverno.ConditionOperators["NotEquals"], Value: false}, true},
{kyverno.Condition{Key: false, Operator: kyverno.ConditionOperators["NotEquals"], Value: false}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["NotEquals"], Value: "1Gi"}, false},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.ConditionOperators["NotEquals"], Value: "1024Mi"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["NotEquals"], Value: "1h"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["NotEquals"], Value: "60m"}, false},
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.ConditionOperators["NotEquals"], Value: map[string]interface{}{"foo": "bar"}}, false},
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.ConditionOperators["NotEquals"], Value: []interface{}{"foo", "bar"}}, false},
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.ConditionOperators["NotEquals"], Value: []interface{}{map[string]string{"foo": "bar"}}}, false},
{kyverno.Condition{Key: "string", Operator: kyverno.ConditionOperators["NotEquals"], Value: "not string"}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["NotEquals"], Value: 2}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["NotEquals"], Value: int64(2)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["NotEquals"], Value: 2}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["NotEquals"], Value: 2.0}, true},
{kyverno.Condition{Key: true, Operator: kyverno.ConditionOperators["NotEquals"], Value: true}, false},
{kyverno.Condition{Key: false, Operator: kyverno.ConditionOperators["NotEquals"], Value: true}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["NotEquals"], Value: "10Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["NotEquals"], Value: "1024Mi"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["NotEquals"], Value: "5h"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["NotEquals"], Value: "30m"}, true},
{kyverno.Condition{Key: "string", Operator: kyverno.ConditionOperators["NotEquals"], Value: 1}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["NotEquals"], Value: "2"}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["NotEquals"], Value: "2.0"}, true},
{kyverno.Condition{Key: true, Operator: kyverno.ConditionOperators["NotEquals"], Value: "false"}, true},
{kyverno.Condition{Key: false, Operator: kyverno.ConditionOperators["NotEquals"], Value: "true"}, true},
{kyverno.Condition{Key: map[string]interface{}{"foo": "bar"}, Operator: kyverno.ConditionOperators["NotEquals"], Value: map[string]interface{}{"bar": "foo"}}, true},
{kyverno.Condition{Key: []interface{}{"foo", "bar"}, Operator: kyverno.ConditionOperators["NotEquals"], Value: []interface{}{"bar", "foo"}}, true},
{kyverno.Condition{Key: []interface{}{map[string]string{"foo": "bar"}}, Operator: kyverno.ConditionOperators["NotEquals"], Value: []interface{}{map[string]string{"bar": "foo"}}}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["NotEquals"], Value: 3600}, false},
{kyverno.Condition{Key: "2h", Operator: kyverno.ConditionOperators["NotEquals"], Value: 3600}, true},
{kyverno.Condition{Key: "1.5.2", Operator: kyverno.ConditionOperators["NotEquals"], Value: "1.5.5"}, true},
{kyverno.Condition{Key: "1.5.2", Operator: kyverno.ConditionOperators["NotEquals"], Value: "1.5.*"}, false},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.ConditionOperators["NotEquals"], Value: "1.5.0"}, false},
// Greater Than
{kyverno.Condition{Key: 10, Operator: kyverno.GreaterThan, Value: 1}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.GreaterThan, Value: 1.0}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.GreaterThan, Value: 1}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: 10}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThan, Value: 1.5}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: 1.5}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: 1}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThan, Value: 1.0}, false},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.GreaterThan, Value: "1Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThan, Value: "1Mi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThan, Value: "10Gi"}, false},
{kyverno.Condition{Key: "10Mi", Operator: kyverno.GreaterThan, Value: "10Mi"}, false},
{kyverno.Condition{Key: "10h", Operator: kyverno.GreaterThan, Value: "1h"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThan, Value: "30m"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThan, Value: "1h"}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThan, Value: "1Gi"}, false},
{kyverno.Condition{Key: "10", Operator: kyverno.GreaterThan, Value: 1}, true},
{kyverno.Condition{Key: 100, Operator: kyverno.GreaterThan, Value: "10"}, true},
{kyverno.Condition{Key: "100", Operator: kyverno.GreaterThan, Value: "10"}, true},
{kyverno.Condition{Key: "10", Operator: kyverno.GreaterThan, Value: "10"}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.GreaterThan, Value: "10"}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.GreaterThan, Value: 10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: "10"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThan, Value: 3600}, false},
{kyverno.Condition{Key: "2h", Operator: kyverno.GreaterThan, Value: 3600}, true},
{kyverno.Condition{Key: 3600, Operator: kyverno.GreaterThan, Value: "1h"}, false},
{kyverno.Condition{Key: 3600, Operator: kyverno.GreaterThan, Value: "30m"}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThan, Value: int64(1)}, false},
{kyverno.Condition{Key: int64(10), Operator: kyverno.GreaterThan, Value: int64(1)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThan, Value: int64(10)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThan, Value: 1}, false},
{kyverno.Condition{Key: int64(10), Operator: kyverno.GreaterThan, Value: 1}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThan, Value: 10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: int64(1)}, false},
{kyverno.Condition{Key: 10, Operator: kyverno.GreaterThan, Value: int64(1)}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: int64(10)}, false},
{kyverno.Condition{Key: -5, Operator: kyverno.GreaterThan, Value: 1}, false},
{kyverno.Condition{Key: -5, Operator: kyverno.GreaterThan, Value: -10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThan, Value: -10}, true},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.GreaterThan, Value: "1.5.0"}, true},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.GreaterThan, Value: "1.5.5"}, false},
{kyverno.Condition{Key: 10, Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1.0}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThan"], Value: 10}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1.5}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1.5}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1.0}, false},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "1Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "1Mi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "10Gi"}, false},
{kyverno.Condition{Key: "10Mi", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "10Mi"}, false},
{kyverno.Condition{Key: "10h", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "1h"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "30m"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "1h"}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "1Gi"}, false},
{kyverno.Condition{Key: "10", Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1}, true},
{kyverno.Condition{Key: 100, Operator: kyverno.ConditionOperators["GreaterThan"], Value: "10"}, true},
{kyverno.Condition{Key: "100", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "10"}, true},
{kyverno.Condition{Key: "10", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "10"}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "10"}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["GreaterThan"], Value: 10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThan"], Value: "10"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["GreaterThan"], Value: 3600}, false},
{kyverno.Condition{Key: "2h", Operator: kyverno.ConditionOperators["GreaterThan"], Value: 3600}, true},
{kyverno.Condition{Key: 3600, Operator: kyverno.ConditionOperators["GreaterThan"], Value: "1h"}, false},
{kyverno.Condition{Key: 3600, Operator: kyverno.ConditionOperators["GreaterThan"], Value: "30m"}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["GreaterThan"], Value: int64(1)}, false},
{kyverno.Condition{Key: int64(10), Operator: kyverno.ConditionOperators["GreaterThan"], Value: int64(1)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["GreaterThan"], Value: int64(10)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1}, false},
{kyverno.Condition{Key: int64(10), Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["GreaterThan"], Value: 10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThan"], Value: int64(1)}, false},
{kyverno.Condition{Key: 10, Operator: kyverno.ConditionOperators["GreaterThan"], Value: int64(1)}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThan"], Value: int64(10)}, false},
{kyverno.Condition{Key: -5, Operator: kyverno.ConditionOperators["GreaterThan"], Value: 1}, false},
{kyverno.Condition{Key: -5, Operator: kyverno.ConditionOperators["GreaterThan"], Value: -10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThan"], Value: -10}, true},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "1.5.0"}, true},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.ConditionOperators["GreaterThan"], Value: "1.5.5"}, false},
// Less Than
{kyverno.Condition{Key: 10, Operator: kyverno.LessThan, Value: 1}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.LessThan, Value: 1.0}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.LessThan, Value: 1}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: 10}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.LessThan, Value: 1.5}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: 1.5}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: 1}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.LessThan, Value: 1.0}, false},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.LessThan, Value: "1Gi"}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThan, Value: "10Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThan, Value: "1Mi"}, false},
{kyverno.Condition{Key: "1Mi", Operator: kyverno.LessThan, Value: "1Gi"}, true},
{kyverno.Condition{Key: "10h", Operator: kyverno.LessThan, Value: "1h"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThan, Value: "30m"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThan, Value: "1h"}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThan, Value: "1Gi"}, false},
{kyverno.Condition{Key: "10", Operator: kyverno.LessThan, Value: 1}, false},
{kyverno.Condition{Key: 100, Operator: kyverno.LessThan, Value: "10"}, false},
{kyverno.Condition{Key: "100", Operator: kyverno.LessThan, Value: "10"}, false},
{kyverno.Condition{Key: "10", Operator: kyverno.LessThan, Value: "10"}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.LessThan, Value: "10"}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.LessThan, Value: 10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: "10"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThan, Value: 3600}, false},
{kyverno.Condition{Key: "30m", Operator: kyverno.LessThan, Value: 3600}, true},
{kyverno.Condition{Key: 3600, Operator: kyverno.LessThan, Value: "1h"}, false},
{kyverno.Condition{Key: 3600, Operator: kyverno.LessThan, Value: "30m"}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThan, Value: int64(1)}, false},
{kyverno.Condition{Key: int64(10), Operator: kyverno.LessThan, Value: int64(1)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThan, Value: int64(10)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThan, Value: 1}, false},
{kyverno.Condition{Key: int64(10), Operator: kyverno.LessThan, Value: 1}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThan, Value: 10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: int64(1)}, false},
{kyverno.Condition{Key: 10, Operator: kyverno.LessThan, Value: int64(1)}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: int64(10)}, true},
{kyverno.Condition{Key: -5, Operator: kyverno.LessThan, Value: 1}, true},
{kyverno.Condition{Key: -5, Operator: kyverno.LessThan, Value: -10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThan, Value: -10}, false},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.LessThan, Value: "1.5.0"}, false},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.LessThan, Value: "1.5.5"}, true},
{kyverno.Condition{Key: 10, Operator: kyverno.ConditionOperators["LessThan"], Value: 1}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["LessThan"], Value: 1.0}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["LessThan"], Value: 1}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThan"], Value: 10}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["LessThan"], Value: 1.5}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThan"], Value: 1.5}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThan"], Value: 1}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["LessThan"], Value: 1.0}, false},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.ConditionOperators["LessThan"], Value: "1Gi"}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["LessThan"], Value: "10Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["LessThan"], Value: "1Mi"}, false},
{kyverno.Condition{Key: "1Mi", Operator: kyverno.ConditionOperators["LessThan"], Value: "1Gi"}, true},
{kyverno.Condition{Key: "10h", Operator: kyverno.ConditionOperators["LessThan"], Value: "1h"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["LessThan"], Value: "30m"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["LessThan"], Value: "1h"}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["LessThan"], Value: "1Gi"}, false},
{kyverno.Condition{Key: "10", Operator: kyverno.ConditionOperators["LessThan"], Value: 1}, false},
{kyverno.Condition{Key: 100, Operator: kyverno.ConditionOperators["LessThan"], Value: "10"}, false},
{kyverno.Condition{Key: "100", Operator: kyverno.ConditionOperators["LessThan"], Value: "10"}, false},
{kyverno.Condition{Key: "10", Operator: kyverno.ConditionOperators["LessThan"], Value: "10"}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["LessThan"], Value: "10"}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["LessThan"], Value: 10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThan"], Value: "10"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["LessThan"], Value: 3600}, false},
{kyverno.Condition{Key: "30m", Operator: kyverno.ConditionOperators["LessThan"], Value: 3600}, true},
{kyverno.Condition{Key: 3600, Operator: kyverno.ConditionOperators["LessThan"], Value: "1h"}, false},
{kyverno.Condition{Key: 3600, Operator: kyverno.ConditionOperators["LessThan"], Value: "30m"}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["LessThan"], Value: int64(1)}, false},
{kyverno.Condition{Key: int64(10), Operator: kyverno.ConditionOperators["LessThan"], Value: int64(1)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["LessThan"], Value: int64(10)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["LessThan"], Value: 1}, false},
{kyverno.Condition{Key: int64(10), Operator: kyverno.ConditionOperators["LessThan"], Value: 1}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["LessThan"], Value: 10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThan"], Value: int64(1)}, false},
{kyverno.Condition{Key: 10, Operator: kyverno.ConditionOperators["LessThan"], Value: int64(1)}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThan"], Value: int64(10)}, true},
{kyverno.Condition{Key: -5, Operator: kyverno.ConditionOperators["LessThan"], Value: 1}, true},
{kyverno.Condition{Key: -5, Operator: kyverno.ConditionOperators["LessThan"], Value: -10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThan"], Value: -10}, false},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.ConditionOperators["LessThan"], Value: "1.5.0"}, false},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.ConditionOperators["LessThan"], Value: "1.5.5"}, true},
// Greater Than or Equal
{kyverno.Condition{Key: 10, Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.GreaterThanOrEquals, Value: 1.0}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: 10}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThanOrEquals, Value: 1.5}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: 1.5}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThanOrEquals, Value: 1.0}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.GreaterThanOrEquals, Value: "1Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThanOrEquals, Value: "1Mi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThanOrEquals, Value: "10Gi"}, false},
{kyverno.Condition{Key: "10h", Operator: kyverno.GreaterThanOrEquals, Value: "1h"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThanOrEquals, Value: "30m"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThanOrEquals, Value: "1h"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.GreaterThanOrEquals, Value: "1Gi"}, true},
{kyverno.Condition{Key: "10", Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
{kyverno.Condition{Key: 100, Operator: kyverno.GreaterThanOrEquals, Value: "10"}, true},
{kyverno.Condition{Key: "100", Operator: kyverno.GreaterThanOrEquals, Value: "10"}, true},
{kyverno.Condition{Key: "10", Operator: kyverno.GreaterThanOrEquals, Value: "10"}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.GreaterThanOrEquals, Value: "10"}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.GreaterThanOrEquals, Value: 10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: "10"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.GreaterThanOrEquals, Value: 3600}, true},
{kyverno.Condition{Key: "2h", Operator: kyverno.GreaterThanOrEquals, Value: 3600}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThanOrEquals, Value: int64(1)}, true},
{kyverno.Condition{Key: int64(10), Operator: kyverno.GreaterThanOrEquals, Value: int64(1)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThanOrEquals, Value: int64(10)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
{kyverno.Condition{Key: int64(10), Operator: kyverno.GreaterThanOrEquals, Value: 1}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.GreaterThanOrEquals, Value: 10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: int64(1)}, true},
{kyverno.Condition{Key: 10, Operator: kyverno.GreaterThanOrEquals, Value: int64(1)}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.GreaterThanOrEquals, Value: int64(10)}, false},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.GreaterThanOrEquals, Value: "1.5.5"}, true},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.GreaterThanOrEquals, Value: "1.5.0"}, true},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.GreaterThanOrEquals, Value: "1.5.5"}, false},
{kyverno.Condition{Key: 10, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1.0}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 10}, false},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1.5}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1.5}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1.0}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1}, true},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "1Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "1Mi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "10Gi"}, false},
{kyverno.Condition{Key: "10h", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "1h"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "30m"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "1h"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "1Gi"}, true},
{kyverno.Condition{Key: "10", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1}, true},
{kyverno.Condition{Key: 100, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "10"}, true},
{kyverno.Condition{Key: "100", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "10"}, true},
{kyverno.Condition{Key: "10", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "10"}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "10"}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "10"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 3600}, true},
{kyverno.Condition{Key: "2h", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 3600}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: int64(1)}, true},
{kyverno.Condition{Key: int64(10), Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: int64(1)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: int64(10)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1}, true},
{kyverno.Condition{Key: int64(10), Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 1}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: 10}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: int64(1)}, true},
{kyverno.Condition{Key: 10, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: int64(1)}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: int64(10)}, false},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "1.5.5"}, true},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "1.5.0"}, true},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.ConditionOperators["GreaterThanOrEquals"], Value: "1.5.5"}, false},
// Less Than or Equal
{kyverno.Condition{Key: 10, Operator: kyverno.LessThanOrEquals, Value: 1}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.LessThanOrEquals, Value: 1.0}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.LessThanOrEquals, Value: 1}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: 10}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.LessThanOrEquals, Value: 1.5}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: 1.5}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: 1}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.LessThanOrEquals, Value: 1.0}, true},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.LessThanOrEquals, Value: "1Gi"}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThanOrEquals, Value: "10Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThanOrEquals, Value: "1Mi"}, false},
{kyverno.Condition{Key: "1Mi", Operator: kyverno.LessThanOrEquals, Value: "1Gi"}, true},
{kyverno.Condition{Key: "10h", Operator: kyverno.LessThanOrEquals, Value: "1h"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThanOrEquals, Value: "30m"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThanOrEquals, Value: "1h"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.LessThanOrEquals, Value: "1Gi"}, true},
{kyverno.Condition{Key: "10", Operator: kyverno.LessThanOrEquals, Value: 1}, false},
{kyverno.Condition{Key: 100, Operator: kyverno.LessThanOrEquals, Value: "10"}, false},
{kyverno.Condition{Key: "100", Operator: kyverno.LessThanOrEquals, Value: "10"}, false},
{kyverno.Condition{Key: "10", Operator: kyverno.LessThanOrEquals, Value: "10"}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.LessThanOrEquals, Value: "10"}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.LessThanOrEquals, Value: 10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: "10"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.LessThanOrEquals, Value: 3600}, true},
{kyverno.Condition{Key: "2h", Operator: kyverno.LessThanOrEquals, Value: 3600}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThanOrEquals, Value: int64(1)}, true},
{kyverno.Condition{Key: int64(10), Operator: kyverno.LessThanOrEquals, Value: int64(1)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThanOrEquals, Value: int64(10)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThanOrEquals, Value: 1}, true},
{kyverno.Condition{Key: int64(10), Operator: kyverno.LessThanOrEquals, Value: 1}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.LessThanOrEquals, Value: 10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: int64(1)}, true},
{kyverno.Condition{Key: 10, Operator: kyverno.LessThanOrEquals, Value: int64(1)}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.LessThanOrEquals, Value: int64(10)}, true},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.LessThanOrEquals, Value: "1.5.5"}, true},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.LessThanOrEquals, Value: "1.5.5"}, true},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.LessThanOrEquals, Value: "1.5.0"}, false},
{kyverno.Condition{Key: 10, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1.0}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 10}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1.5}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1.5}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1}, true},
{kyverno.Condition{Key: 1.0, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1.0}, true},
{kyverno.Condition{Key: "10Gi", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "1Gi"}, false},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "10Gi"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "1Mi"}, false},
{kyverno.Condition{Key: "1Mi", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "1Gi"}, true},
{kyverno.Condition{Key: "10h", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "1h"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "30m"}, false},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "1h"}, true},
{kyverno.Condition{Key: "1Gi", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "1Gi"}, true},
{kyverno.Condition{Key: "10", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1}, false},
{kyverno.Condition{Key: 100, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "10"}, false},
{kyverno.Condition{Key: "100", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "10"}, false},
{kyverno.Condition{Key: "10", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "10"}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "10"}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "10"}, true},
{kyverno.Condition{Key: "1h", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 3600}, true},
{kyverno.Condition{Key: "2h", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 3600}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: int64(1)}, true},
{kyverno.Condition{Key: int64(10), Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: int64(1)}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: int64(10)}, true},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1}, true},
{kyverno.Condition{Key: int64(10), Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 1}, false},
{kyverno.Condition{Key: int64(1), Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: 10}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: int64(1)}, true},
{kyverno.Condition{Key: 10, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: int64(1)}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: int64(10)}, true},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "1.5.5"}, true},
{kyverno.Condition{Key: "1.5.0", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "1.5.5"}, true},
{kyverno.Condition{Key: "1.5.5", Operator: kyverno.ConditionOperators["LessThanOrEquals"], Value: "1.5.0"}, false},
// In
{kyverno.Condition{Key: 1, Operator: kyverno.In, Value: []interface{}{1, 2, 3}}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.In, Value: []interface{}{1, 1.5, 2, 3}}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.In, Value: []interface{}{"1", "2", "3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.In, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: 5, Operator: kyverno.In, Value: []interface{}{1, 2, 3}}, false},
{kyverno.Condition{Key: 5.5, Operator: kyverno.In, Value: []interface{}{1, 1.5, 2, 3}}, false},
{kyverno.Condition{Key: "5", Operator: kyverno.In, Value: []interface{}{"1", "2", "3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.In, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["In"], Value: []interface{}{1, 2, 3}}, true},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["In"], Value: []interface{}{1, 1.5, 2, 3}}, true},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["In"], Value: []interface{}{"1", "2", "3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.ConditionOperators["In"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: 5, Operator: kyverno.ConditionOperators["In"], Value: []interface{}{1, 2, 3}}, false},
{kyverno.Condition{Key: 5.5, Operator: kyverno.ConditionOperators["In"], Value: []interface{}{1, 1.5, 2, 3}}, false},
{kyverno.Condition{Key: "5", Operator: kyverno.ConditionOperators["In"], Value: []interface{}{"1", "2", "3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.ConditionOperators["In"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
// Not In
{kyverno.Condition{Key: 1, Operator: kyverno.NotIn, Value: []interface{}{1, 2, 3}}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.NotIn, Value: []interface{}{1, 1.5, 2, 3}}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.NotIn, Value: []interface{}{"1", "2", "3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.NotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: 5, Operator: kyverno.NotIn, Value: []interface{}{1, 2, 3}}, true},
{kyverno.Condition{Key: 5.5, Operator: kyverno.NotIn, Value: []interface{}{1, 1.5, 2, 3}}, true},
{kyverno.Condition{Key: "5", Operator: kyverno.NotIn, Value: []interface{}{"1", "2", "3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.NotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["NotIn"], Value: []interface{}{1, 2, 3}}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["NotIn"], Value: []interface{}{1, 1.5, 2, 3}}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["NotIn"], Value: []interface{}{"1", "2", "3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.ConditionOperators["NotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: 5, Operator: kyverno.ConditionOperators["NotIn"], Value: []interface{}{1, 2, 3}}, true},
{kyverno.Condition{Key: 5.5, Operator: kyverno.ConditionOperators["NotIn"], Value: []interface{}{1, 1.5, 2, 3}}, true},
{kyverno.Condition{Key: "5", Operator: kyverno.ConditionOperators["NotIn"], Value: []interface{}{"1", "2", "3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.ConditionOperators["NotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
// Any In
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: "1.1.1.1"}, true},
{kyverno.Condition{Key: []interface{}{"4.4.4.4", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1"}}, true},
{kyverno.Condition{Key: []interface{}{1, 2}, Operator: kyverno.AnyIn, Value: []interface{}{1, 2, 3, 4}}, true},
{kyverno.Condition{Key: []interface{}{1, 5}, Operator: kyverno.AnyIn, Value: []interface{}{1, 2, 3, 4}}, true},
{kyverno.Condition{Key: []interface{}{5}, Operator: kyverno.AnyIn, Value: []interface{}{1, 2, 3, 4}}, false},
{kyverno.Condition{Key: []interface{}{"1*"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"5*"}, Operator: kyverno.AnyIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"2*"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.AnyIn, Value: []interface{}{"4*"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AnyIn"], Value: "1.1.1.1"}, true},
{kyverno.Condition{Key: []interface{}{"4.4.4.4", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{"1.1.1.1"}}, true},
{kyverno.Condition{Key: []interface{}{1, 2}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{1, 2, 3, 4}}, true},
{kyverno.Condition{Key: []interface{}{1, 5}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{1, 2, 3, 4}}, true},
{kyverno.Condition{Key: []interface{}{5}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{1, 2, 3, 4}}, false},
{kyverno.Condition{Key: []interface{}{"1*"}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"5*"}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{"2*"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AnyIn"], Value: []interface{}{"4*"}}, false},
// All In
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"4.4.4.4", "5.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1"}}, false},
{kyverno.Condition{Key: []interface{}{1, 2}, Operator: kyverno.AllIn, Value: []interface{}{1, 2, 3, 4}}, true},
{kyverno.Condition{Key: []interface{}{1, 5}, Operator: kyverno.AllIn, Value: []interface{}{1, 2, 3, 4}}, false},
{kyverno.Condition{Key: []interface{}{5}, Operator: kyverno.AllIn, Value: []interface{}{1, 2, 3, 4}}, false},
{kyverno.Condition{Key: []interface{}{"1*"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"5*"}, Operator: kyverno.AllIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"2.1.1.1", "2.2.2.2", "2.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"2*"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.AllIn, Value: []interface{}{"4*"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.AllIn, Value: "5.5.5.5"}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"4.4.4.4", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{"1.1.1.1"}}, false},
{kyverno.Condition{Key: []interface{}{1, 2}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{1, 2, 3, 4}}, true},
{kyverno.Condition{Key: []interface{}{1, 5}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{1, 2, 3, 4}}, false},
{kyverno.Condition{Key: []interface{}{5}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{1, 2, 3, 4}}, false},
{kyverno.Condition{Key: []interface{}{"1*"}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"5*"}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"2.1.1.1", "2.2.2.2", "2.5.5.5"}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{"2*"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AllIn"], Value: []interface{}{"4*"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AllIn"], Value: "5.5.5.5"}, false},
// All Not In
{kyverno.Condition{Key: 1, Operator: kyverno.AllNotIn, Value: []interface{}{1, 2, 3}}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.AllNotIn, Value: []interface{}{1, 1.5, 2, 3}}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.AllNotIn, Value: []interface{}{"1", "2", "3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: 5, Operator: kyverno.AllNotIn, Value: []interface{}{1, 2, 3}}, true},
{kyverno.Condition{Key: 5.5, Operator: kyverno.AllNotIn, Value: []interface{}{1, 1.5, 2, 3}}, true},
{kyverno.Condition{Key: "5", Operator: kyverno.AllNotIn, Value: []interface{}{"1", "2", "3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3", "1.1.1.1"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4", "1.1.1.1"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3", "1.1.1.1", "4.4.4.4"}}, false},
{kyverno.Condition{Key: []interface{}{"5.5.5.5", "4.4.4.4"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"7*", "6*", "5*"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1*", "2*"}, Operator: kyverno.AllNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "3.3.3.3", "5.5.5.5"}, Operator: kyverno.AllNotIn, Value: []interface{}{"2*"}}, true},
{kyverno.Condition{Key: []interface{}{"4.1.1.1", "4.2.2.2", "4.5.5.5"}, Operator: kyverno.AllNotIn, Value: []interface{}{"4*"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.AllNotIn, Value: "2.2.2.2"}, true},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{1, 2, 3}}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{1, 1.5, 2, 3}}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"1", "2", "3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: 5, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{1, 2, 3}}, true},
{kyverno.Condition{Key: 5.5, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{1, 1.5, 2, 3}}, true},
{kyverno.Condition{Key: "5", Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"1", "2", "3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3", "1.1.1.1"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4", "1.1.1.1"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3", "1.1.1.1", "4.4.4.4"}}, false},
{kyverno.Condition{Key: []interface{}{"5.5.5.5", "4.4.4.4"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"7*", "6*", "5*"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1*", "2*"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "3.3.3.3", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"2*"}}, true},
{kyverno.Condition{Key: []interface{}{"4.1.1.1", "4.2.2.2", "4.5.5.5"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: []interface{}{"4*"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.ConditionOperators["AllNotIn"], Value: "2.2.2.2"}, true},
// Any Not In
{kyverno.Condition{Key: 1, Operator: kyverno.AnyNotIn, Value: []interface{}{1, 2, 3}}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.AnyNotIn, Value: []interface{}{1, 1.5, 2, 3}}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.AnyNotIn, Value: []interface{}{"1", "2", "3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: 5, Operator: kyverno.AnyNotIn, Value: []interface{}{1, 2, 3}}, true},
{kyverno.Condition{Key: 5.5, Operator: kyverno.AnyNotIn, Value: []interface{}{1, 1.5, 2, 3}}, true},
{kyverno.Condition{Key: "5", Operator: kyverno.AnyNotIn, Value: []interface{}{"1", "2", "3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"5.5.5.5", "4.4.4.4"}, Operator: kyverno.AnyNotIn, Value: "4.4.4.4"}, true},
{kyverno.Condition{Key: []interface{}{"5.5.5.5", "4.4.4.4"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1*", "3*", "5*"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"2*"}}, true},
{kyverno.Condition{Key: []interface{}{"2.2*"}, Operator: kyverno.AnyNotIn, Value: []interface{}{"2.2.2.2"}}, false},
{kyverno.Condition{Key: 1, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{1, 2, 3}}, false},
{kyverno.Condition{Key: 1.5, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{1, 1.5, 2, 3}}, false},
{kyverno.Condition{Key: "1", Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{"1", "2", "3"}}, false},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2"}, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, false},
{kyverno.Condition{Key: 5, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{1, 2, 3}}, true},
{kyverno.Condition{Key: 5.5, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{1, 1.5, 2, 3}}, true},
{kyverno.Condition{Key: "5", Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{"1", "2", "3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "4.4.4.4"}, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"5.5.5.5", "4.4.4.4"}, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: "4.4.4.4"}, true},
{kyverno.Condition{Key: []interface{}{"5.5.5.5", "4.4.4.4"}, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1*", "3*", "5*"}, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{"1.1.1.1", "2.2.2.2", "3.3.3.3"}}, true},
{kyverno.Condition{Key: []interface{}{"1.1.1.1", "2.2.2.2", "5.5.5.5"}, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{"2*"}}, true},
{kyverno.Condition{Key: []interface{}{"2.2*"}, Operator: kyverno.ConditionOperators["AnyNotIn"], Value: []interface{}{"2.2.2.2"}}, false},
}
ctx := context.NewContext()
@ -372,7 +372,7 @@ func Test_Eval_Equal_Var_Pass(t *testing.T) {
}
condition := kyverno.Condition{
Key: "{{request.object.metadata.name}}",
Operator: kyverno.Equal,
Operator: kyverno.ConditionOperators["Equal"],
Value: "temp",
}
@ -414,7 +414,7 @@ func Test_Eval_Equal_Var_Fail(t *testing.T) {
}
condition := kyverno.Condition{
Key: "{{request.object.metadata.name}}",
Operator: kyverno.Equal,
Operator: kyverno.ConditionOperators["Equal"],
Value: "temp1",
}

View file

@ -28,13 +28,13 @@ type DurationOperatorHandler struct {
// durationCompareByCondition compares a time.Duration key with a time.Duration value on the basis of the provided operator
func durationCompareByCondition(key time.Duration, value time.Duration, op kyverno.ConditionOperator, log *logr.Logger) bool {
switch op {
case kyverno.DurationGreaterThanOrEquals:
case kyverno.ConditionOperators["DurationGreaterThanOrEquals"]:
return key >= value
case kyverno.DurationGreaterThan:
case kyverno.ConditionOperators["DurationGreaterThan"]:
return key > value
case kyverno.DurationLessThanOrEquals:
case kyverno.ConditionOperators["DurationLessThanOrEquals"]:
return key <= value
case kyverno.DurationLessThan:
case kyverno.ConditionOperators["DurationLessThan"]:
return key < value
default:
(*log).Info(fmt.Sprintf("Expected operator, one of [DurationGreaterThanOrEquals, DurationGreaterThan, DurationLessThanOrEquals, DurationLessThan], found %s", op))

View file

@ -30,13 +30,13 @@ type NumericOperatorHandler struct {
// compareByCondition compares a float64 key with a float64 value on the basis of the provided operator
func compareByCondition(key float64, value float64, op kyverno.ConditionOperator, log *logr.Logger) bool {
switch op {
case kyverno.GreaterThanOrEquals:
case kyverno.ConditionOperators["GreaterThanOrEquals"]:
return key >= value
case kyverno.GreaterThan:
case kyverno.ConditionOperators["GreaterThan"]:
return key > value
case kyverno.LessThanOrEquals:
case kyverno.ConditionOperators["LessThanOrEquals"]:
return key <= value
case kyverno.LessThan:
case kyverno.ConditionOperators["LessThan"]:
return key < value
default:
(*log).Info(fmt.Sprintf("Expected operator, one of [GreaterThanOrEquals, GreaterThan, LessThanOrEquals, LessThan, Equals, NotEquals], found %s", op))
@ -46,13 +46,13 @@ func compareByCondition(key float64, value float64, op kyverno.ConditionOperator
func compareVersionByCondition(key semver.Version, value semver.Version, op kyverno.ConditionOperator, log *logr.Logger) bool {
switch op {
case kyverno.GreaterThanOrEquals:
case kyverno.ConditionOperators["GreaterThanOrEquals"]:
return key.GTE(value)
case kyverno.GreaterThan:
case kyverno.ConditionOperators["GreaterThan"]:
return key.GT(value)
case kyverno.LessThanOrEquals:
case kyverno.ConditionOperators["LessThanOrEquals"]:
return key.LTE(value)
case kyverno.LessThan:
case kyverno.ConditionOperators["LessThan"]:
return key.LT(value)
default:
(*log).Info(fmt.Sprintf("Expected operator, one of [GreaterThanOrEquals, GreaterThan, LessThanOrEquals, LessThan, Equals, NotEquals], found %s", op))

View file

@ -29,44 +29,44 @@ func CreateOperatorHandler(log logr.Logger, ctx context.EvalInterface, op kyvern
str := strings.ToLower(string(op))
switch str {
case strings.ToLower(string(kyverno.Equal)),
strings.ToLower(string(kyverno.Equals)):
case strings.ToLower(string(kyverno.ConditionOperators["Equal"])),
strings.ToLower(string(kyverno.ConditionOperators["Equals"])):
return NewEqualHandler(log, ctx)
case strings.ToLower(string(kyverno.NotEqual)),
strings.ToLower(string(kyverno.NotEquals)):
case strings.ToLower(string(kyverno.ConditionOperators["NotEqual"])),
strings.ToLower(string(kyverno.ConditionOperators["NotEquals"])):
return NewNotEqualHandler(log, ctx)
// deprecated
case strings.ToLower(string(kyverno.In)):
case strings.ToLower(string(kyverno.ConditionOperators["In"])):
return NewInHandler(log, ctx)
case strings.ToLower(string(kyverno.AnyIn)):
case strings.ToLower(string(kyverno.ConditionOperators["AnyIn"])):
return NewAnyInHandler(log, ctx)
case strings.ToLower(string(kyverno.AllIn)):
case strings.ToLower(string(kyverno.ConditionOperators["AllIn"])):
return NewAllInHandler(log, ctx)
// deprecated
case strings.ToLower(string(kyverno.NotIn)):
case strings.ToLower(string(kyverno.ConditionOperators["NotIn"])):
return NewNotInHandler(log, ctx)
case strings.ToLower(string(kyverno.AnyNotIn)):
case strings.ToLower(string(kyverno.ConditionOperators["AnyNotIn"])):
return NewAnyNotInHandler(log, ctx)
case strings.ToLower(string(kyverno.AllNotIn)):
case strings.ToLower(string(kyverno.ConditionOperators["AllNotIn"])):
return NewAllNotInHandler(log, ctx)
case strings.ToLower(string(kyverno.GreaterThanOrEquals)),
strings.ToLower(string(kyverno.GreaterThan)),
strings.ToLower(string(kyverno.LessThanOrEquals)),
strings.ToLower(string(kyverno.LessThan)):
case strings.ToLower(string(kyverno.ConditionOperators["GreaterThanOrEquals"])),
strings.ToLower(string(kyverno.ConditionOperators["GreaterThan"])),
strings.ToLower(string(kyverno.ConditionOperators["LessThanOrEquals"])),
strings.ToLower(string(kyverno.ConditionOperators["LessThan"])):
return NewNumericOperatorHandler(log, ctx, op)
case strings.ToLower(string(kyverno.DurationGreaterThanOrEquals)),
strings.ToLower(string(kyverno.DurationGreaterThan)),
strings.ToLower(string(kyverno.DurationLessThanOrEquals)),
strings.ToLower(string(kyverno.DurationLessThan)):
case strings.ToLower(string(kyverno.ConditionOperators["DurationGreaterThanOrEquals"])),
strings.ToLower(string(kyverno.ConditionOperators["DurationGreaterThan"])),
strings.ToLower(string(kyverno.ConditionOperators["DurationLessThanOrEquals"])),
strings.ToLower(string(kyverno.ConditionOperators["DurationLessThan"])):
log.Info("DEPRECATED: The Duration* operators have been replaced with the other existing operators that now also support duration values", "operator", str)
return NewDurationOperatorHandler(log, ctx, op)

View file

@ -246,6 +246,20 @@ func ApiextensionsJsonToKyvernoConditions(original apiextensions.JSON) (interfac
var kyvernoOldConditions []kyverno.Condition
if err = json.Unmarshal(jsonByte, &kyvernoOldConditions); err == nil {
var validConditionOperator bool
for _, jsonOp := range kyvernoOldConditions {
for _, validOp := range kyverno.ConditionOperators {
if jsonOp.Operator == validOp {
validConditionOperator = true
}
}
if !validConditionOperator {
return nil, fmt.Errorf("invalid condition operator: %s", jsonOp.Operator)
}
validConditionOperator = false
}
return kyvernoOldConditions, nil
}