1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/cmd/cli/kubectl-kyverno/processor/utils.go
Charles-Edouard Brétéché 10bb27b4da
fix: cli engine invocation order (#8327)
* fix: cli engine invocation order

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* mutate

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* verify images

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* validate

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* fix

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* generate

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* fix

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* fix and tests

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* fix tests

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2023-09-11 13:41:36 +00:00

79 lines
2.8 KiB
Go

package processor
import (
"strings"
engineapi "github.com/kyverno/kyverno/pkg/engine/api"
)
func combineRuleResponses(imageResponse engineapi.EngineResponse) engineapi.EngineResponse {
if imageResponse.PolicyResponse.RulesAppliedCount() == 0 {
return imageResponse
}
completeRuleResponses := imageResponse.PolicyResponse.Rules
var combineRuleResponses []engineapi.RuleResponse
ruleNameType := make(map[string][]engineapi.RuleResponse)
for _, rsp := range completeRuleResponses {
key := rsp.Name() + ";" + string(rsp.RuleType())
ruleNameType[key] = append(ruleNameType[key], rsp)
}
for key, ruleResponses := range ruleNameType {
tokens := strings.Split(key, ";")
ruleName := tokens[0]
ruleType := tokens[1]
var failRuleResponses []engineapi.RuleResponse
var errorRuleResponses []engineapi.RuleResponse
var passRuleResponses []engineapi.RuleResponse
var skipRuleResponses []engineapi.RuleResponse
ruleMesssage := ""
for _, rsp := range ruleResponses {
if rsp.Status() == engineapi.RuleStatusFail {
failRuleResponses = append(failRuleResponses, rsp)
} else if rsp.Status() == engineapi.RuleStatusError {
errorRuleResponses = append(errorRuleResponses, rsp)
} else if rsp.Status() == engineapi.RuleStatusPass {
passRuleResponses = append(passRuleResponses, rsp)
} else if rsp.Status() == engineapi.RuleStatusSkip {
skipRuleResponses = append(skipRuleResponses, rsp)
}
}
if len(errorRuleResponses) > 0 {
for _, errRsp := range errorRuleResponses {
ruleMesssage += errRsp.Message() + ";"
}
errorResponse := engineapi.NewRuleResponse(ruleName, engineapi.RuleType(ruleType), ruleMesssage, engineapi.RuleStatusError)
combineRuleResponses = append(combineRuleResponses, *errorResponse)
continue
}
if len(failRuleResponses) > 0 {
for _, failRsp := range failRuleResponses {
ruleMesssage += failRsp.Message() + ";"
}
failResponse := engineapi.NewRuleResponse(ruleName, engineapi.RuleType(ruleType), ruleMesssage, engineapi.RuleStatusFail)
combineRuleResponses = append(combineRuleResponses, *failResponse)
continue
}
if len(passRuleResponses) > 0 {
for _, passRsp := range passRuleResponses {
ruleMesssage += passRsp.Message() + ";"
}
passResponse := engineapi.NewRuleResponse(ruleName, engineapi.RuleType(ruleType), ruleMesssage, engineapi.RuleStatusPass)
combineRuleResponses = append(combineRuleResponses, *passResponse)
continue
}
for _, skipRsp := range skipRuleResponses {
ruleMesssage += skipRsp.Message() + ";"
}
skipResponse := engineapi.NewRuleResponse(ruleName, engineapi.RuleType(ruleType), ruleMesssage, engineapi.RuleStatusSkip)
combineRuleResponses = append(combineRuleResponses, *skipResponse)
}
imageResponse.PolicyResponse.Rules = combineRuleResponses
return imageResponse
}