mirror of
https://github.com/kyverno/kyverno.git
synced 2025-04-09 10:42:22 +00:00
Fixed issue when number comes from resource as string and does not being validated
This commit is contained in:
parent
cde2f2b0a0
commit
f57422ef79
3 changed files with 18 additions and 11 deletions
|
@ -165,11 +165,6 @@ func validateString(value interface{}, pattern string, operator Operator) bool {
|
|||
}
|
||||
|
||||
func validateNumberWithStr(value interface{}, patternNumber, patternStr string, operator Operator) bool {
|
||||
patternParsedNumber, err := parseNumber(patternNumber)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if "" != patternStr {
|
||||
typedValue, ok := value.(string)
|
||||
if !ok {
|
||||
|
@ -188,16 +183,22 @@ func validateNumberWithStr(value interface{}, patternNumber, patternStr string,
|
|||
return false
|
||||
}
|
||||
|
||||
return validateNumber(valueParsedNumber, patternParsedNumber, operator)
|
||||
return validateNumber(valueParsedNumber, patternNumber, operator)
|
||||
}
|
||||
|
||||
return validateNumber(value, patternParsedNumber, operator)
|
||||
return validateNumber(value, patternNumber, operator)
|
||||
}
|
||||
|
||||
func validateNumber(value, pattern interface{}, operator Operator) bool {
|
||||
var floatPattern, floatValue float64
|
||||
|
||||
switch typed := value.(type) {
|
||||
case string:
|
||||
var err error
|
||||
floatValue, err = strconv.ParseFloat(typed, 64)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
case float64:
|
||||
floatValue = typed
|
||||
case int64:
|
||||
|
@ -209,6 +210,12 @@ func validateNumber(value, pattern interface{}, operator Operator) bool {
|
|||
}
|
||||
|
||||
switch typed := pattern.(type) {
|
||||
case string:
|
||||
var err error
|
||||
floatPattern, err = strconv.ParseFloat(typed, 64)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
case float64:
|
||||
floatPattern = typed
|
||||
case int64:
|
||||
|
|
|
@ -100,7 +100,7 @@ func validateArray(resourcePart, patternPart interface{}) error {
|
|||
default:
|
||||
for _, value := range resourceArray {
|
||||
if !ValidateValueWithPattern(value, patternArray[0]) {
|
||||
return fmt.Errorf("Failed validate %v wit %v", value, patternArray[0])
|
||||
return fmt.Errorf("Failed validate %v with %v", value, patternArray[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ func validateMapElement(resourcePart, patternPart interface{}) error {
|
|||
return validateArray(array, pattern)
|
||||
case string, float64, int, int64, bool:
|
||||
if !ValidateValueWithPattern(resourcePart, patternPart) {
|
||||
return fmt.Errorf("Failed validate %v wit %v", resourcePart, patternPart)
|
||||
return fmt.Errorf("Failed validate %v with %v", resourcePart, patternPart)
|
||||
}
|
||||
default:
|
||||
return fmt.Errorf("validating error: unknown type in map: %T", patternPart)
|
||||
|
|
|
@ -159,8 +159,8 @@ func TestGetAnchorsFromMap_ThereAreNoAnchors(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestValidateMap(t *testing.T) {
|
||||
rawPattern := []byte(`{ "spec": { "template": { "spec": { "containers": [ { "name": "?*", "resources": { "requests": { "cpu": "5" } } } ] } } } }`)
|
||||
rawMap := []byte(`{ "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": "nginx-deployment", "labels": { "app": "nginx" } }, "spec": { "replicas": 3, "selector": { "matchLabels": { "app": "nginx" } }, "template": { "metadata": { "labels": { "app": "nginx" } }, "spec": { "securityContext": { "runAsNonRoot": true }, "containers": [ { "name": "nginx", "image": "https://nirmata/nginx:latest", "imagePullPolicy": "Always", "readinessProbe": { "exec": { "command": [ "cat", "/tmp/healthy" ] }, "initialDelaySeconds": 5, "periodSeconds": 10 }, "livenessProbe": { "tcpSocket": { "port": 8080 }, "initialDelaySeconds": 15, "periodSeconds": 11 }, "resources": { "limits": { "memory": "2Gi", "cpu": 8 }, "requests": { "memory": "512Mi", "cpu": 6 } }, "ports": [ { "containerPort": 80 } ] } ] } } } }`)
|
||||
rawPattern := []byte(`{ "spec": { "template": { "spec": { "containers": [ { "name": "?*", "resources": { "requests": { "cpu": "<4|8" } } } ] } } } }`)
|
||||
rawMap := []byte(`{ "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": "nginx-deployment", "labels": { "app": "nginx" } }, "spec": { "replicas": 3, "selector": { "matchLabels": { "app": "nginx" } }, "template": { "metadata": { "labels": { "app": "nginx" } }, "spec": { "securityContext": { "runAsNonRoot": true }, "containers": [ { "name": "nginx", "image": "https://nirmata/nginx:latest", "imagePullPolicy": "Always", "readinessProbe": { "exec": { "command": [ "cat", "/tmp/healthy" ] }, "initialDelaySeconds": 5, "periodSeconds": 10 }, "livenessProbe": { "tcpSocket": { "port": 8080 }, "initialDelaySeconds": 15, "periodSeconds": 11 }, "resources": { "limits": { "memory": "2Gi", "cpu": 8 }, "requests": { "memory": "512Mi", "cpu": "8" } }, "ports": [ { "containerPort": 80 } ] } ] } } } }`)
|
||||
|
||||
var pattern, resource interface{}
|
||||
json.Unmarshal(rawPattern, &pattern)
|
||||
|
|
Loading…
Add table
Reference in a new issue