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

refactor: reduce usage of reflect.DeepEqual (#3328)

Signed-off-by: Charles-Edouard Brétéché <charled.breteche@gmail.com>
This commit is contained in:
Charles-Edouard Brétéché 2022-03-02 18:20:27 +01:00 committed by GitHub
parent 93ad2d6011
commit 1293ef4691
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 31 deletions

View file

@ -3,7 +3,6 @@ package autogen
import (
"encoding/json"
"fmt"
"reflect"
"strconv"
jsonpatch "github.com/evanphx/json-patch"
@ -160,9 +159,9 @@ func GenerateRulePatches(spec *kyverno.Spec, controllers string, log logr.Logger
// handle all other controllers other than CronJob
genRule := generateRuleForControllers(rule, stripCronJob(controllers), log)
if !reflect.DeepEqual(genRule, kyvernoRule{}) {
pbytes := convertToPatches(genRule, patchPostion)
pbytes = updateGenRuleByte(pbytes, "Pod", genRule)
if genRule != nil {
pbytes := convertToPatches(*genRule, patchPostion)
pbytes = updateGenRuleByte(pbytes, "Pod", *genRule)
if pbytes != nil {
rulePatches = append(rulePatches, pbytes)
}
@ -172,9 +171,9 @@ func GenerateRulePatches(spec *kyverno.Spec, controllers string, log logr.Logger
// handle CronJob, it appends an additional rule
genRule = generateCronJobRule(rule, controllers, log)
if !reflect.DeepEqual(genRule, kyvernoRule{}) {
pbytes := convertToPatches(genRule, patchPostion)
pbytes = updateGenRuleByte(pbytes, "Cronjob", genRule)
if genRule != nil {
pbytes := convertToPatches(*genRule, patchPostion)
pbytes = updateGenRuleByte(pbytes, "Cronjob", *genRule)
if pbytes != nil {
rulePatches = append(rulePatches, pbytes)
}

View file

@ -62,12 +62,12 @@ func createRuleMap(rules []kyverno.Rule) map[string]kyvernoRule {
return ruleMap
}
func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.Logger) kyvernoRule {
func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.Logger) *kyvernoRule {
logger := log.WithName("generateRuleForControllers")
if strings.HasPrefix(rule.Name, "autogen-") || controllers == "" {
logger.V(5).Info("skip generateRuleForControllers")
return kyvernoRule{}
return nil
}
logger.V(3).Info("processing rule", "rulename", rule.Name)
@ -80,7 +80,7 @@ func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.
if !utils.ContainsPod(matchResourceDescriptionsKinds, "Pod") ||
(len(excludeResourceDescriptionsKinds) != 0 && !utils.ContainsPod(excludeResourceDescriptionsKinds, "Pod")) {
return kyvernoRule{}
return nil
}
// Support backwards compatibility
@ -171,7 +171,7 @@ func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.
}
controllerRule.Mutation = newMutation.DeepCopy()
return *controllerRule
return controllerRule
}
if len(rule.Mutation.ForEachMutation) > 0 && rule.Mutation.ForEachMutation != nil {
@ -191,7 +191,7 @@ func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.
controllerRule.Mutation = &kyverno.Mutation{
ForEachMutation: newForeachMutation,
}
return *controllerRule
return controllerRule
}
if rule.Validation.Pattern != nil {
@ -204,7 +204,7 @@ func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.
},
}
controllerRule.Validation = newValidate.DeepCopy()
return *controllerRule
return controllerRule
}
if rule.Validation.Deny != nil {
@ -213,7 +213,7 @@ func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.
Deny: rule.Validation.Deny,
}
controllerRule.Validation = deny.DeepCopy()
return *controllerRule
return controllerRule
}
if rule.Validation.AnyPattern != nil {
@ -228,7 +228,7 @@ func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.
Message: variables.FindAndShiftReferences(log, rule.Validation.Message, "spec/template", "anyPattern"),
AnyPattern: patterns,
}
return *controllerRule
return controllerRule
}
if len(rule.Validation.ForEachValidation) > 0 && rule.Validation.ForEachValidation != nil {
@ -240,7 +240,7 @@ func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.
Message: variables.FindAndShiftReferences(log, rule.Validation.Message, "spec/template", "pattern"),
ForEachValidation: newForeachValidate,
}
return *controllerRule
return controllerRule
}
if rule.VerifyImages != nil {
@ -250,28 +250,28 @@ func generateRuleForControllers(rule kyverno.Rule, controllers string, log logr.
}
controllerRule.VerifyImages = newVerifyImages
return *controllerRule
return controllerRule
}
return kyvernoRule{}
return nil
}
func generateCronJobRule(rule kyverno.Rule, controllers string, log logr.Logger) kyvernoRule {
func generateCronJobRule(rule kyverno.Rule, controllers string, log logr.Logger) *kyvernoRule {
logger := log.WithName("handleCronJob")
hasCronJob := strings.Contains(controllers, engine.PodControllerCronJob) || strings.Contains(controllers, "all")
if !hasCronJob {
return kyvernoRule{}
return nil
}
logger.V(3).Info("generating rule for cronJob")
jobRule := generateRuleForControllers(rule, "Job", logger)
if reflect.DeepEqual(jobRule, kyvernoRule{}) {
return kyvernoRule{}
if jobRule == nil {
return nil
}
cronJobRule := &jobRule
cronJobRule := jobRule
name := fmt.Sprintf("autogen-cronjob-%s", rule.Name)
if len(name) > 63 {
@ -310,7 +310,7 @@ func generateCronJobRule(rule kyverno.Rule, controllers string, log logr.Logger)
},
}
cronJobRule.Mutation = newMutation.DeepCopy()
return *cronJobRule
return cronJobRule
}
if (jobRule.Validation != nil) && (jobRule.Validation.Pattern != nil) {
@ -323,7 +323,7 @@ func generateCronJobRule(rule kyverno.Rule, controllers string, log logr.Logger)
},
}
cronJobRule.Validation = newValidate.DeepCopy()
return *cronJobRule
return cronJobRule
}
if (jobRule.Validation != nil) && (jobRule.Validation.Deny != nil) {
@ -332,7 +332,7 @@ func generateCronJobRule(rule kyverno.Rule, controllers string, log logr.Logger)
Deny: jobRule.Validation.Deny,
}
cronJobRule.Validation = newValidate.DeepCopy()
return *cronJobRule
return cronJobRule
}
if (jobRule.Validation != nil) && (jobRule.Validation.AnyPattern != nil) {
@ -356,7 +356,7 @@ func generateCronJobRule(rule kyverno.Rule, controllers string, log logr.Logger)
Message: variables.FindAndShiftReferences(log, rule.Validation.Message, "spec/jobTemplate/spec/template", "anyPattern"),
AnyPattern: patterns,
}
return *cronJobRule
return cronJobRule
}
if (jobRule.Validation != nil) && len(jobRule.Validation.ForEachValidation) > 0 && jobRule.Validation.ForEachValidation != nil {
@ -368,7 +368,7 @@ func generateCronJobRule(rule kyverno.Rule, controllers string, log logr.Logger)
Message: variables.FindAndShiftReferences(log, rule.Validation.Message, "spec/template", "pattern"),
ForEachValidation: newForeachValidate,
}
return *cronJobRule
return cronJobRule
}
if (jobRule.Mutation != nil) && len(jobRule.Mutation.ForEachMutation) > 0 && jobRule.Mutation.ForEachMutation != nil {
@ -390,7 +390,7 @@ func generateCronJobRule(rule kyverno.Rule, controllers string, log logr.Logger)
cronJobRule.Mutation = &kyverno.Mutation{
ForEachMutation: newForeachMutation,
}
return *cronJobRule
return cronJobRule
}
if jobRule.VerifyImages != nil {
@ -399,10 +399,10 @@ func generateCronJobRule(rule kyverno.Rule, controllers string, log logr.Logger)
newVerifyImages[i] = vi.DeepCopy()
}
cronJobRule.VerifyImages = newVerifyImages
return *cronJobRule
return cronJobRule
}
return kyvernoRule{}
return nil
}
func updateGenRuleByte(pbyte []byte, kind string, genRule kyvernoRule) (obj []byte) {