From 1293ef46915ffcb1694c7b27a83fee6c91beba34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles-Edouard=20Br=C3=A9t=C3=A9ch=C3=A9?= Date: Wed, 2 Mar 2022 18:20:27 +0100 Subject: [PATCH] refactor: reduce usage of reflect.DeepEqual (#3328) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles-Edouard Brétéché --- pkg/autogen/autogen.go | 13 ++++++------ pkg/autogen/rule.go | 48 +++++++++++++++++++++--------------------- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/pkg/autogen/autogen.go b/pkg/autogen/autogen.go index dc5bbeb45f..8d1a962ba8 100644 --- a/pkg/autogen/autogen.go +++ b/pkg/autogen/autogen.go @@ -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) } diff --git a/pkg/autogen/rule.go b/pkg/autogen/rule.go index b3eee0548f..866730c368 100644 --- a/pkg/autogen/rule.go +++ b/pkg/autogen/rule.go @@ -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) {