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

handle rule dependency issue in overall mutation failure

This commit is contained in:
Shuting Zhao 2019-08-23 16:08:19 -07:00
parent c48b72ff2f
commit 31f5d788ab

View file

@ -107,13 +107,7 @@ func mutation(policy kyverno.Policy, resource unstructured.Unstructured, policyS
return append(ruleInfos, ruleInfo), nil
}
// return getFailedOverallRuleInfo(resource, ruleInfos)
ruleInfos, err := getFailedOverallRuleInfo(resource, ruleInfos)
if err != nil {
glog.Infoln("======err========", err)
}
glog.Infoln("======ruleInfo========", ruleInfos[len(ruleInfos)-1:])
return ruleInfos, nil
return getFailedOverallRuleInfo(resource, ruleInfos)
}
// getFailedOverallRuleInfo gets detailed info for over-all mutation failure
@ -126,18 +120,15 @@ func getFailedOverallRuleInfo(resource unstructured.Unstructured, ruleInfos []in
return ruleInfos, err
}
var msg string
var patches [][]byte
var failedRules []string
// resource does not match so there was a mutation rule violated
for i, ri := range ruleInfos {
for _, ri := range ruleInfos {
if len(ri.Patches) == 0 {
continue
}
patches = append(patches, ri.Patches...)
mergePatches := utils.JoinPatches(patches)
patch, err := jsonpatch.DecodePatch(mergePatches)
patch, err := jsonpatch.DecodePatch(utils.JoinPatches(ri.Patches))
if err != nil {
return ruleInfos, err
}
@ -148,23 +139,13 @@ func getFailedOverallRuleInfo(resource unstructured.Unstructured, ruleInfos []in
return ruleInfos, err
}
if jsonpatch.Equal(patchedResource, rawResource) {
if i != len(ruleInfos)-1 {
ruleInfo.Fail()
ruleInfo.Addf("failed to apply the rules %s", getRuleName(ruleInfos, i+1))
return append(ruleInfos, ruleInfo), nil
}
// end states matches
ruleInfo.Add("resource satisfys the mutation rule")
return append(ruleInfos, ruleInfo), nil
} else {
msg = fmt.Sprintf("rule %s might have failed", ri.Name)
if !jsonpatch.Equal(patchedResource, rawResource) {
failedRules = append(failedRules, ri.Name)
}
}
ruleInfo.Fail()
ruleInfo.Add(msg)
ruleInfo.Add(fmt.Sprintf("rule %s might have failed", strings.Join(failedRules, ",")))
return append(ruleInfos, ruleInfo), nil
}