From a5e082303df9b7b7a29a3ae46305848526800cee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles-Edouard=20Br=C3=A9t=C3=A9ch=C3=A9?= Date: Wed, 16 Oct 2024 15:24:37 +0200 Subject: [PATCH] refactor: introduce autogen interface (#11418) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: introduce autogen interface Signed-off-by: Charles-Edouard Brétéché * fix linter Signed-off-by: Charles-Edouard Brétéché --------- Signed-off-by: Charles-Edouard Brétéché --- .../kubectl-kyverno/commands/apply/command.go | 4 +-- cmd/cli/kubectl-kyverno/commands/test/test.go | 4 +-- cmd/cli/kubectl-kyverno/processor/generate.go | 4 +-- cmd/cli/kubectl-kyverno/processor/result.go | 10 +++--- .../kubectl-kyverno/utils/common/common.go | 4 +-- cmd/cli/kubectl-kyverno/utils/common/fetch.go | 4 +-- .../utils/common/kyverno_resources_types.go | 4 +-- pkg/autogen/autogen.go | 19 ++++++++++++ pkg/autogen/v1/v1.go | 31 +++++++++++++++++++ pkg/autogen/v2/autogen.go | 2 +- pkg/autogen/v2/v2.go | 24 ++++++++++++++ pkg/controllers/exceptions/controller.go | 4 +-- pkg/controllers/metrics/policy/controller.go | 4 +-- .../report/aggregate/controller.go | 6 ++-- pkg/controllers/report/utils/utils.go | 4 +-- pkg/controllers/webhook/controller.go | 7 ++--- pkg/controllers/webhook/utils_test.go | 4 +-- pkg/engine/background.go | 4 +-- pkg/engine/fuzz_test.go | 8 ++--- pkg/engine/generation.go | 4 +-- pkg/engine/image_verify.go | 4 +-- .../mutate/patch/strategicMergePatch_test.go | 4 +-- pkg/engine/mutation.go | 4 +-- pkg/engine/utils/utils_test.go | 6 ++-- pkg/engine/validation.go | 4 +-- pkg/policy/generate.go | 4 +-- pkg/policycache/cache_test.go | 22 ++++++------- pkg/policycache/store.go | 4 +-- pkg/validation/policy/background.go | 4 +-- pkg/validation/policy/validate.go | 6 ++-- pkg/webhooks/resource/updaterequest.go | 4 +-- 31 files changed, 147 insertions(+), 74 deletions(-) create mode 100644 pkg/autogen/autogen.go create mode 100644 pkg/autogen/v1/v1.go create mode 100644 pkg/autogen/v2/v2.go diff --git a/cmd/cli/kubectl-kyverno/commands/apply/command.go b/cmd/cli/kubectl-kyverno/commands/apply/command.go index 36377559da..9d1275e757 100644 --- a/cmd/cli/kubectl-kyverno/commands/apply/command.go +++ b/cmd/cli/kubectl-kyverno/commands/apply/command.go @@ -25,7 +25,7 @@ import ( "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/userinfo" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/utils/common" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/variables" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/clients/dclient" "github.com/kyverno/kyverno/pkg/config" engineapi "github.com/kyverno/kyverno/pkg/engine/api" @@ -213,7 +213,7 @@ func (c *ApplyCommandConfig) applyCommandHelper(out io.Writer) (*processor.Resul if !c.Stdin && !c.PolicyReport && !c.GenerateExceptions { var policyRulesCount int for _, policy := range policies { - policyRulesCount += len(autogenv1.ComputeRules(policy, "")) + policyRulesCount += len(autogen.Default.ComputeRules(policy, "")) } policyRulesCount += len(vaps) if len(exceptions) > 0 { diff --git a/cmd/cli/kubectl-kyverno/commands/test/test.go b/cmd/cli/kubectl-kyverno/commands/test/test.go index edff009aa9..ea543b59ed 100644 --- a/cmd/cli/kubectl-kyverno/commands/test/test.go +++ b/cmd/cli/kubectl-kyverno/commands/test/test.go @@ -19,7 +19,7 @@ import ( "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/utils/common" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/variables" "github.com/kyverno/kyverno/ext/output/pluralize" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/background/generate" "github.com/kyverno/kyverno/pkg/clients/dclient" "github.com/kyverno/kyverno/pkg/config" @@ -109,7 +109,7 @@ func runTest(out io.Writer, testCase test.TestCase, registryAccess bool) ([]engi // TODO document the code below ruleToCloneSourceResource := map[string]string{} for _, policy := range results.Policies { - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, res := range testCase.Test.Results { if res.IsValidatingAdmissionPolicy { continue diff --git a/cmd/cli/kubectl-kyverno/processor/generate.go b/cmd/cli/kubectl-kyverno/processor/generate.go index 5d22b2c654..7d6d5411e0 100644 --- a/cmd/cli/kubectl-kyverno/processor/generate.go +++ b/cmd/cli/kubectl-kyverno/processor/generate.go @@ -9,7 +9,7 @@ import ( "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/log" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/resource" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/store" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/background/generate" "github.com/kyverno/kyverno/pkg/clients/dclient" "github.com/kyverno/kyverno/pkg/config" @@ -47,7 +47,7 @@ func handleGeneratePolicy(out io.Writer, store *store.Store, generateResponse *e listKinds := map[schema.GroupVersionResource]string{} // Collect items in a potential cloneList to provide list kinds to the fake dynamic client. - for _, rule := range autogenv1.ComputeRules(policyContext.Policy(), "") { + for _, rule := range autogen.Default.ComputeRules(policyContext.Policy(), "") { if !rule.HasGenerate() || len(rule.Generation.CloneList.Kinds) == 0 { continue } diff --git a/cmd/cli/kubectl-kyverno/processor/result.go b/cmd/cli/kubectl-kyverno/processor/result.go index fa5f5f511f..ccd6e3cd02 100644 --- a/cmd/cli/kubectl-kyverno/processor/result.go +++ b/cmd/cli/kubectl-kyverno/processor/result.go @@ -2,7 +2,7 @@ package processor import ( "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/policy/annotations" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" engineapi "github.com/kyverno/kyverno/pkg/engine/api" ) @@ -32,7 +32,7 @@ func (rc *ResultCounts) addEngineResponse(auditWarn bool, response engineapi.Eng } policy := genericPolicy.AsKyvernoPolicy() scored := annotations.Scored(policy.GetAnnotations()) - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { if rule.HasValidate() || rule.HasVerifyImageChecks() || rule.HasVerifyImages() { for _, valResponseRule := range response.PolicyResponse.Rules { if rule.Name == valResponseRule.Name() { @@ -69,7 +69,7 @@ func (rc *ResultCounts) addGenerateResponse(response engineapi.EngineResponse) { return } policy := genericPolicy.AsKyvernoPolicy() - for _, policyRule := range autogenv1.ComputeRules(policy, "") { + for _, policyRule := range autogen.Default.ComputeRules(policy, "") { for _, ruleResponse := range response.PolicyResponse.Rules { if policyRule.Name == ruleResponse.Name() { if ruleResponse.Status() == engineapi.RuleStatusPass { @@ -90,7 +90,7 @@ func (rc *ResultCounts) addMutateResponse(response engineapi.EngineResponse) boo } policy := genericPolicy.AsKyvernoPolicy() var policyHasMutate bool - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { if rule.HasMutate() { policyHasMutate = true } @@ -99,7 +99,7 @@ func (rc *ResultCounts) addMutateResponse(response engineapi.EngineResponse) boo return false } printMutatedRes := false - for _, policyRule := range autogenv1.ComputeRules(policy, "") { + for _, policyRule := range autogen.Default.ComputeRules(policy, "") { for _, mutateResponseRule := range response.PolicyResponse.Rules { if policyRule.Name == mutateResponseRule.Name() { if mutateResponseRule.Status() == engineapi.RuleStatusPass { diff --git a/cmd/cli/kubectl-kyverno/utils/common/common.go b/cmd/cli/kubectl-kyverno/utils/common/common.go index b4f1068341..4369501929 100644 --- a/cmd/cli/kubectl-kyverno/utils/common/common.go +++ b/cmd/cli/kubectl-kyverno/utils/common/common.go @@ -13,7 +13,7 @@ import ( "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/apis/v1alpha1" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/resource" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/source" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/clients/dclient" kubeutils "github.com/kyverno/kyverno/pkg/utils/kube" admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" @@ -89,7 +89,7 @@ func GetResourceAccordingToResourcePath( func GetKindsFromPolicy(out io.Writer, policy kyvernov1.PolicyInterface, subresources []v1alpha1.Subresource, dClient dclient.Interface) sets.Set[string] { knownkinds := sets.New[string]() - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.ResourceDescription.Kinds { k, err := getKind(kind, subresources, dClient) if err != nil { diff --git a/cmd/cli/kubectl-kyverno/utils/common/fetch.go b/cmd/cli/kubectl-kyverno/utils/common/fetch.go index 034cae02de..4349c0a87d 100644 --- a/cmd/cli/kubectl-kyverno/utils/common/fetch.go +++ b/cmd/cli/kubectl-kyverno/utils/common/fetch.go @@ -12,7 +12,7 @@ import ( "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/apis/v1alpha1" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/log" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/resource" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/clients/dclient" kubeutils "github.com/kyverno/kyverno/pkg/utils/kube" "github.com/kyverno/kyverno/pkg/validatingadmissionpolicy" @@ -130,7 +130,7 @@ func GetResourcesWithTest(out io.Writer, fs billy.Filesystem, policies []kyverno resources := make([]*unstructured.Unstructured, 0) resourceTypesMap := make(map[string]bool) for _, policy := range policies { - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { resourceTypesMap[kind] = true } diff --git a/cmd/cli/kubectl-kyverno/utils/common/kyverno_resources_types.go b/cmd/cli/kubectl-kyverno/utils/common/kyverno_resources_types.go index 8f8b00dd6f..e30e653e8f 100644 --- a/cmd/cli/kubectl-kyverno/utils/common/kyverno_resources_types.go +++ b/cmd/cli/kubectl-kyverno/utils/common/kyverno_resources_types.go @@ -5,7 +5,7 @@ import ( kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/apis/v1alpha1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/clients/dclient" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" @@ -23,7 +23,7 @@ func (r *KyvernoResources) FetchResourcesFromPolicy(out io.Writer, resourcePaths var subresourceMap map[schema.GroupVersionKind]v1alpha1.Subresource for _, policy := range r.policies { - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { var resourceTypesInRule map[schema.GroupVersionKind]bool resourceTypesInRule, subresourceMap = GetKindsFromRule(rule, dClient) for resourceKind := range resourceTypesInRule { diff --git a/pkg/autogen/autogen.go b/pkg/autogen/autogen.go new file mode 100644 index 0000000000..70dbe1ff63 --- /dev/null +++ b/pkg/autogen/autogen.go @@ -0,0 +1,19 @@ +package autogen + +import ( + kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" + autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + autogenv2 "github.com/kyverno/kyverno/pkg/autogen/v2" +) + +type Autogen interface { + GetAutogenRuleNames(kyvernov1.PolicyInterface) []string + GetAutogenKinds(kyvernov1.PolicyInterface) []string + ComputeRules(kyvernov1.PolicyInterface, string) []kyvernov1.Rule +} + +var ( + V1 Autogen = autogenv1.New() + V2 Autogen = autogenv2.New() + Default Autogen = V1 +) diff --git a/pkg/autogen/v1/v1.go b/pkg/autogen/v1/v1.go new file mode 100644 index 0000000000..7a603c2bf1 --- /dev/null +++ b/pkg/autogen/v1/v1.go @@ -0,0 +1,31 @@ +package v1 + +import ( + kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" +) + +type v1 struct{} + +func New() v1 { + return v1{} +} + +func (a v1) GetAutogenRuleNames(p kyvernov1.PolicyInterface) []string { + var out []string //nolint:prealloc + for _, rule := range a.ComputeRules(p, "") { + out = append(out, rule.Name) + } + return out +} + +func (a v1) GetAutogenKinds(p kyvernov1.PolicyInterface) []string { + var out []string + for _, rule := range a.ComputeRules(p, "") { + out = append(out, rule.MatchResources.GetKinds()...) + } + return out +} + +func (a v1) ComputeRules(p kyvernov1.PolicyInterface, kind string) []kyvernov1.Rule { + return ComputeRules(p, kind) +} diff --git a/pkg/autogen/v2/autogen.go b/pkg/autogen/v2/autogen.go index 19b033943e..0af999ddeb 100644 --- a/pkg/autogen/v2/autogen.go +++ b/pkg/autogen/v2/autogen.go @@ -246,7 +246,7 @@ func GetAutogenRuleNames(p kyvernov1.PolicyInterface) []string { return out } -// GetRelevantKinds extracts the resource kinds from the match.resources field of the rules. +// GetAutogenKinds extracts the resource kinds from the match.resources field of the rules. func GetAutogenKinds(p kyvernov1.PolicyInterface) []string { spec := p.GetSpec() applyAutoGen, desiredControllers := CanAutoGen(spec) diff --git a/pkg/autogen/v2/v2.go b/pkg/autogen/v2/v2.go new file mode 100644 index 0000000000..a96d140426 --- /dev/null +++ b/pkg/autogen/v2/v2.go @@ -0,0 +1,24 @@ +package v2 + +import ( + kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" + v1 "github.com/kyverno/kyverno/pkg/autogen/v1" +) + +type v2 struct{} + +func New() v2 { + return v2{} +} + +func (a v2) GetAutogenRuleNames(p kyvernov1.PolicyInterface) []string { + return GetAutogenRuleNames(p) +} + +func (a v2) GetAutogenKinds(p kyvernov1.PolicyInterface) []string { + return GetAutogenKinds(p) +} + +func (a v2) ComputeRules(p kyvernov1.PolicyInterface, kind string) []kyvernov1.Rule { + return v1.ComputeRules(p, kind) +} diff --git a/pkg/controllers/exceptions/controller.go b/pkg/controllers/exceptions/controller.go index 8ea887c289..237e96b3a5 100644 --- a/pkg/controllers/exceptions/controller.go +++ b/pkg/controllers/exceptions/controller.go @@ -10,7 +10,7 @@ import ( "github.com/go-logr/logr" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2" - autogenv2 "github.com/kyverno/kyverno/pkg/autogen/v2" + "github.com/kyverno/kyverno/pkg/autogen" kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1" kyvernov2informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v2" kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1" @@ -155,7 +155,7 @@ func (c *controller) buildRuleIndex(key string, policy kyvernov1.PolicyInterface return 0 }) index := ruleIndex{} - for _, name := range autogenv2.GetAutogenRuleNames(policy) { + for _, name := range autogen.Default.GetAutogenRuleNames(policy) { for _, polex := range polexList { if polex.Contains(key, name) { index[name] = append(index[name], polex) diff --git a/pkg/controllers/metrics/policy/controller.go b/pkg/controllers/metrics/policy/controller.go index 2b13dba4e3..decf4505b0 100644 --- a/pkg/controllers/metrics/policy/controller.go +++ b/pkg/controllers/metrics/policy/controller.go @@ -5,7 +5,7 @@ import ( "sync" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1" kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1" "github.com/kyverno/kyverno/pkg/metrics" @@ -111,7 +111,7 @@ func (c *controller) reportPolicy(ctx context.Context, policy kyvernov1.PolicyIn attribute.String("policy_type", string(policyType)), attribute.String("policy_background_mode", string(backgroundMode)), } - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { ruleType := metrics.ParseRuleType(rule) ruleAttributes := []attribute.KeyValue{ attribute.String("rule_name", rule.Name), diff --git a/pkg/controllers/report/aggregate/controller.go b/pkg/controllers/report/aggregate/controller.go index 8895ad59e2..b104abef57 100644 --- a/pkg/controllers/report/aggregate/controller.go +++ b/pkg/controllers/report/aggregate/controller.go @@ -9,7 +9,7 @@ import ( kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" policyreportv1alpha2 "github.com/kyverno/kyverno/api/policyreport/v1alpha2" reportsv1 "github.com/kyverno/kyverno/api/reports/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/client/clientset/versioned" kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1" kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1" @@ -164,7 +164,7 @@ func (c *controller) createPolicyMap() (map[string]policyMapEntry, error) { policy: cpol, rules: sets.New[string](), } - for _, rule := range autogenv1.ComputeRules(cpol, "") { + for _, rule := range autogen.Default.ComputeRules(cpol, "") { results[key].rules.Insert(rule.Name) } } @@ -181,7 +181,7 @@ func (c *controller) createPolicyMap() (map[string]policyMapEntry, error) { policy: pol, rules: sets.New[string](), } - for _, rule := range autogenv1.ComputeRules(pol, "") { + for _, rule := range autogen.Default.ComputeRules(pol, "") { results[key].rules.Insert(rule.Name) } } diff --git a/pkg/controllers/report/utils/utils.go b/pkg/controllers/report/utils/utils.go index 4cdc793b7c..ceb964ac4b 100644 --- a/pkg/controllers/report/utils/utils.go +++ b/pkg/controllers/report/utils/utils.go @@ -5,7 +5,7 @@ import ( kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2" reportsv1 "github.com/kyverno/kyverno/api/reports/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1" kyvernov2listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2" datautils "github.com/kyverno/kyverno/pkg/utils/data" @@ -33,7 +33,7 @@ func CanBackgroundProcess(p kyvernov1.PolicyInterface) bool { func BuildKindSet(logger logr.Logger, policies ...kyvernov1.PolicyInterface) sets.Set[string] { kinds := sets.New[string]() for _, policy := range policies { - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { if rule.HasValidate() || rule.HasVerifyImages() { kinds.Insert(rule.MatchResources.GetKinds()...) } diff --git a/pkg/controllers/webhook/controller.go b/pkg/controllers/webhook/controller.go index cb02c1622f..ac88e73871 100644 --- a/pkg/controllers/webhook/controller.go +++ b/pkg/controllers/webhook/controller.go @@ -12,8 +12,7 @@ import ( kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1" "github.com/kyverno/kyverno/ext/wildcard" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" - autogenv2 "github.com/kyverno/kyverno/pkg/autogen/v2" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/client/clientset/versioned" kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1" kyvernov2alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v2alpha1" @@ -569,7 +568,7 @@ func (c *controller) updatePolicyStatuses(ctx context.Context) error { status := policy.GetStatus() status.SetReady(ready, message) status.Autogen.Rules = nil - rules := autogenv1.ComputeRules(policy, "") + rules := autogen.Default.ComputeRules(policy, "") setRuleCount(rules, status) for _, rule := range rules { if strings.HasPrefix(rule.Name, "autogen-") { @@ -1129,7 +1128,7 @@ func (gvs GroupVersionResourceScope) String() string { // mergeWebhook merges the matching kinds of the policy to webhook.rule func (c *controller) mergeWebhook(dst *webhook, policy kyvernov1.PolicyInterface, updateValidate bool) { var matchedGVK []string - matchedGVK = append(matchedGVK, autogenv2.GetAutogenKinds(policy)...) + matchedGVK = append(matchedGVK, autogen.Default.GetAutogenKinds(policy)...) for _, rule := range policy.GetSpec().Rules { // matching kinds in generate policies need to be added to both webhook if rule.HasGenerate() { diff --git a/pkg/controllers/webhook/utils_test.go b/pkg/controllers/webhook/utils_test.go index 803215760c..734443526a 100644 --- a/pkg/controllers/webhook/utils_test.go +++ b/pkg/controllers/webhook/utils_test.go @@ -7,7 +7,7 @@ import ( "testing" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "gotest.tools/assert" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" corev1 "k8s.io/api/core/v1" @@ -157,7 +157,7 @@ func Test_RuleCount(t *testing.T) { err := json.Unmarshal([]byte(policy), &cpol) assert.NilError(t, err) status := cpol.GetStatus() - rules := autogenv1.ComputeRules(&cpol, "") + rules := autogen.Default.ComputeRules(&cpol, "") setRuleCount(rules, status) assert.Equal(t, status.RuleCount.Validate, 0) assert.Equal(t, status.RuleCount.Generate, 0) diff --git a/pkg/engine/background.go b/pkg/engine/background.go index 60bec28057..6b83e7ac0d 100644 --- a/pkg/engine/background.go +++ b/pkg/engine/background.go @@ -6,7 +6,7 @@ import ( "github.com/go-logr/logr" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" engineapi "github.com/kyverno/kyverno/pkg/engine/api" "github.com/kyverno/kyverno/pkg/engine/internal" engineutils "github.com/kyverno/kyverno/pkg/engine/utils" @@ -33,7 +33,7 @@ func (e *engine) filterRules( policy := policyContext.Policy() resp := engineapi.NewPolicyResponse() applyRules := policy.GetSpec().GetApplyRules() - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { logger := internal.LoggerWithRule(logger, rule) if ruleResp := e.filterRule(rule, logger, policyContext); ruleResp != nil { resp.Rules = append(resp.Rules, *ruleResp) diff --git a/pkg/engine/fuzz_test.go b/pkg/engine/fuzz_test.go index 761791a42b..64656e5be2 100644 --- a/pkg/engine/fuzz_test.go +++ b/pkg/engine/fuzz_test.go @@ -14,7 +14,7 @@ import ( fuzz "github.com/AdaLogics/go-fuzz-headers" kyverno "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/config" "github.com/kyverno/kyverno/pkg/engine/adapters" engineapi "github.com/kyverno/kyverno/pkg/engine/api" @@ -55,7 +55,7 @@ func buildFuzzContext(ff *fuzz.ConsumeFuzzer) (*PolicyContext, error) { cpol := &kyverno.ClusterPolicy{} cpol.Spec = cpSpec - if len(autogenv1.ComputeRules(cpol, "")) == 0 { + if len(autogen.Default.ComputeRules(cpol, "")) == 0 { return nil, fmt.Errorf("No rules created") } @@ -145,7 +145,7 @@ func FuzzEngineValidateTest(f *testing.F) { policy := &kyverno.ClusterPolicy{} policy.Spec = cpSpec - if len(autogenv1.ComputeRules(policy, "")) == 0 { + if len(autogen.Default.ComputeRules(policy, "")) == 0 { return } @@ -241,7 +241,7 @@ func FuzzMutateTest(f *testing.F) { policy := &kyverno.ClusterPolicy{} policy.Spec = cpSpec - if len(autogenv1.ComputeRules(policy, "")) == 0 { + if len(autogen.Default.ComputeRules(policy, "")) == 0 { return } diff --git a/pkg/engine/generation.go b/pkg/engine/generation.go index 903aa79dd6..8278aa76d9 100644 --- a/pkg/engine/generation.go +++ b/pkg/engine/generation.go @@ -2,7 +2,7 @@ package engine import ( "github.com/go-logr/logr" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" engineapi "github.com/kyverno/kyverno/pkg/engine/api" "github.com/kyverno/kyverno/pkg/engine/internal" ) @@ -13,7 +13,7 @@ func (e *engine) generateResponse( policyContext engineapi.PolicyContext, ) engineapi.PolicyResponse { resp := engineapi.NewPolicyResponse() - for _, rule := range autogenv1.ComputeRules(policyContext.Policy(), "") { + for _, rule := range autogen.Default.ComputeRules(policyContext.Policy(), "") { logger := internal.LoggerWithRule(logger, rule) if ruleResp := e.filterRule(rule, logger, policyContext); ruleResp != nil { resp.Rules = append(resp.Rules, *ruleResp) diff --git a/pkg/engine/image_verify.go b/pkg/engine/image_verify.go index d91a21f872..e988c5afce 100644 --- a/pkg/engine/image_verify.go +++ b/pkg/engine/image_verify.go @@ -6,7 +6,7 @@ import ( "github.com/go-logr/logr" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" engineapi "github.com/kyverno/kyverno/pkg/engine/api" "github.com/kyverno/kyverno/pkg/engine/handlers" "github.com/kyverno/kyverno/pkg/engine/handlers/mutation" @@ -28,7 +28,7 @@ func (e *engine) verifyAndPatchImages( policyContext.JSONContext().Checkpoint() defer policyContext.JSONContext().Restore() - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { startTime := time.Now() logger := internal.LoggerWithRule(logger, rule) handlerFactory := func() (handlers.Handler, error) { diff --git a/pkg/engine/mutate/patch/strategicMergePatch_test.go b/pkg/engine/mutate/patch/strategicMergePatch_test.go index 536354b08d..8c77a0c090 100644 --- a/pkg/engine/mutate/patch/strategicMergePatch_test.go +++ b/pkg/engine/mutate/patch/strategicMergePatch_test.go @@ -6,7 +6,7 @@ import ( "github.com/go-logr/logr" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" assertnew "github.com/stretchr/testify/assert" "gotest.tools/assert" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -244,7 +244,7 @@ func Test_PolicyDeserilize(t *testing.T) { err := json.Unmarshal(rawPolicy, &policy) assert.NilError(t, err) - overlayPatches := autogenv1.ComputeRules(&policy, "")[0].Mutation.GetPatchStrategicMerge() + overlayPatches := autogen.Default.ComputeRules(&policy, "")[0].Mutation.GetPatchStrategicMerge() patchString, err := json.Marshal(overlayPatches) assert.NilError(t, err) diff --git a/pkg/engine/mutation.go b/pkg/engine/mutation.go index 7a891c92f6..93d9102788 100644 --- a/pkg/engine/mutation.go +++ b/pkg/engine/mutation.go @@ -7,7 +7,7 @@ import ( "github.com/go-logr/logr" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" engineapi "github.com/kyverno/kyverno/pkg/engine/api" "github.com/kyverno/kyverno/pkg/engine/handlers" "github.com/kyverno/kyverno/pkg/engine/handlers/mutation" @@ -29,7 +29,7 @@ func (e *engine) mutate( policyContext.JSONContext().Checkpoint() defer policyContext.JSONContext().Restore() - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { startTime := time.Now() logger := internal.LoggerWithRule(logger, rule) handlerFactory := func() (handlers.Handler, error) { diff --git a/pkg/engine/utils/utils_test.go b/pkg/engine/utils/utils_test.go index 0a1bc7ed25..98910d74c6 100644 --- a/pkg/engine/utils/utils_test.go +++ b/pkg/engine/utils/utils_test.go @@ -9,7 +9,7 @@ import ( v1 "github.com/kyverno/kyverno/api/kyverno/v1" v2 "github.com/kyverno/kyverno/api/kyverno/v2" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" kubeutils "github.com/kyverno/kyverno/pkg/utils/kube" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -904,7 +904,7 @@ func TestMatchesResourceDescription(t *testing.T) { } resource, _ := kubeutils.BytesToUnstructured(tc.Resource) - for _, rule := range autogenv1.ComputeRules(&policy, "") { + for _, rule := range autogen.Default.ComputeRules(&policy, "") { err := MatchesResourceDescription(*resource, rule, tc.AdmissionInfo, nil, "", resource.GroupVersionKind(), "", "CREATE") if err != nil { if !tc.areErrorsExpected { @@ -1809,7 +1809,7 @@ func TestMatchesResourceDescription_GenerateName(t *testing.T) { } resource, _ := kubeutils.BytesToUnstructured(tc.Resource) - for _, rule := range autogenv1.ComputeRules(&policy, "") { + for _, rule := range autogen.Default.ComputeRules(&policy, "") { err := MatchesResourceDescription(*resource, rule, tc.AdmissionInfo, nil, "", resource.GroupVersionKind(), "", "CREATE") if err != nil { if !tc.areErrorsExpected { diff --git a/pkg/engine/validation.go b/pkg/engine/validation.go index abc2b540e0..165343a713 100644 --- a/pkg/engine/validation.go +++ b/pkg/engine/validation.go @@ -6,7 +6,7 @@ import ( "github.com/go-logr/logr" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" engineapi "github.com/kyverno/kyverno/pkg/engine/api" "github.com/kyverno/kyverno/pkg/engine/handlers" "github.com/kyverno/kyverno/pkg/engine/handlers/validation" @@ -27,7 +27,7 @@ func (e *engine) validate( defer policyContext.JSONContext().Restore() gvk, _ := policyContext.ResourceKind() - for _, rule := range autogenv1.ComputeRules(policy, gvk.Kind) { + for _, rule := range autogen.Default.ComputeRules(policy, gvk.Kind) { startTime := time.Now() logger := internal.LoggerWithRule(logger, rule) handlerFactory := func() (handlers.Handler, error) { diff --git a/pkg/policy/generate.go b/pkg/policy/generate.go index 0589c1c36f..5a00d2d598 100644 --- a/pkg/policy/generate.go +++ b/pkg/policy/generate.go @@ -7,7 +7,7 @@ import ( "github.com/kyverno/kyverno/api/kyverno" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/background/common" backgroundcommon "github.com/kyverno/kyverno/pkg/background/common" generateutils "github.com/kyverno/kyverno/pkg/background/generate" @@ -146,7 +146,7 @@ func (pc *policyController) handleGenerateForExisting(policy kyvernov1.PolicyInt func (pc *policyController) createURForDownstreamDeletion(policy kyvernov1.PolicyInterface) error { var errs []error var err error - rules := autogenv1.ComputeRules(policy, "") + rules := autogen.Default.ComputeRules(policy, "") ur := newGenerateUR(policy) for _, r := range rules { if !r.HasGenerate() { diff --git a/pkg/policycache/cache_test.go b/pkg/policycache/cache_test.go index abd8a19402..2d26a31fc3 100644 --- a/pkg/policycache/cache_test.go +++ b/pkg/policycache/cache_test.go @@ -5,7 +5,7 @@ import ( "testing" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" kubeutils "github.com/kyverno/kyverno/pkg/utils/kube" "gotest.tools/assert" kubecache "k8s.io/client-go/tools/cache" @@ -28,7 +28,7 @@ func Test_All(t *testing.T) { finder := TestResourceFinder{} //add setPolicy(t, pCache, policy, finder) - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) gvrs, err := finder.FindResources(group, version, kind, subresource) @@ -64,7 +64,7 @@ func Test_Add_Duplicate_Policy(t *testing.T) { setPolicy(t, pCache, policy, finder) setPolicy(t, pCache, policy, finder) setPolicy(t, pCache, policy, finder) - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) gvrs, err := finder.FindResources(group, version, kind, subresource) @@ -97,7 +97,7 @@ func Test_Add_Validate_Audit(t *testing.T) { policy.Spec.ValidationFailureAction = "audit" setPolicy(t, pCache, policy, finder) setPolicy(t, pCache, policy, finder) - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) gvrs, err := finder.FindResources(group, version, kind, subresource) @@ -894,7 +894,7 @@ func Test_Ns_All(t *testing.T) { //add setPolicy(t, pCache, policy, finder) nspace := policy.GetNamespace() - rules := autogenv1.ComputeRules(policy, "") + rules := autogen.Default.ComputeRules(policy, "") for _, rule := range rules { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) @@ -931,7 +931,7 @@ func Test_Ns_Add_Duplicate_Policy(t *testing.T) { setPolicy(t, pCache, policy, finder) setPolicy(t, pCache, policy, finder) nspace := policy.GetNamespace() - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) gvrs, err := finder.FindResources(group, version, kind, subresource) @@ -964,7 +964,7 @@ func Test_Ns_Add_Validate_Audit(t *testing.T) { policy.GetSpec().ValidationFailureAction = "audit" setPolicy(t, pCache, policy, finder) setPolicy(t, pCache, policy, finder) - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) gvrs, err := finder.FindResources(group, version, kind, subresource) @@ -1007,7 +1007,7 @@ func Test_GVk_Cache(t *testing.T) { finder := TestResourceFinder{} //add setPolicy(t, pCache, policy, finder) - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) gvrs, err := finder.FindResources(group, version, kind, subresource) @@ -1045,7 +1045,7 @@ func Test_Add_Validate_Enforce(t *testing.T) { finder := TestResourceFinder{} //add setPolicy(t, pCache, policy, finder) - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) gvrs, err := finder.FindResources(group, version, kind, subresource) @@ -1086,7 +1086,7 @@ func Test_Mutate_Policy(t *testing.T) { setPolicy(t, pCache, policy, finder) setPolicy(t, pCache, policy, finder) setPolicy(t, pCache, policy, finder) - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) gvrs, err := finder.FindResources(group, version, kind, subresource) @@ -1108,7 +1108,7 @@ func Test_Generate_Policy(t *testing.T) { finder := TestResourceFinder{} //add setPolicy(t, pCache, policy, finder) - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { for _, kind := range rule.MatchResources.Kinds { group, version, kind, subresource := kubeutils.ParseKindSelector(kind) gvrs, err := finder.FindResources(group, version, kind, subresource) diff --git a/pkg/policycache/store.go b/pkg/policycache/store.go index 55d0d37461..ac29168a03 100644 --- a/pkg/policycache/store.go +++ b/pkg/policycache/store.go @@ -4,7 +4,7 @@ import ( "sync" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" kubeutils "github.com/kyverno/kyverno/pkg/utils/kube" "go.uber.org/multierr" "k8s.io/apimachinery/pkg/runtime/schema" @@ -111,7 +111,7 @@ func (m *policyMap) set(key string, policy kyvernov1.PolicyInterface, client Res hasMutate, hasValidate, hasGenerate, hasVerifyImages, hasImagesValidationChecks bool } kindStates := map[policyKey]state{} - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { if rule.HasValidate() { action := rule.Validation.FailureAction if action != nil && action.Enforce() { diff --git a/pkg/validation/policy/background.go b/pkg/validation/policy/background.go index 64ba74da4d..b5843eda20 100644 --- a/pkg/validation/policy/background.go +++ b/pkg/validation/policy/background.go @@ -5,7 +5,7 @@ import ( "regexp" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" ) var ForbiddenUserVariables = []*regexp.Regexp{ @@ -18,7 +18,7 @@ var ForbiddenUserVariables = []*regexp.Regexp{ // containsUserVariables returns error if variable that does not start from request.object func containsUserVariables(policy kyvernov1.PolicyInterface, vars [][]string) error { - rules := autogenv1.ComputeRules(policy, "") + rules := autogen.Default.ComputeRules(policy, "") for idx := range rules { if err := hasUserMatchExclude(idx, &rules[idx]); err != nil { return err diff --git a/pkg/validation/policy/validate.go b/pkg/validation/policy/validate.go index d6c07b1f35..fb27fbd108 100644 --- a/pkg/validation/policy/validate.go +++ b/pkg/validation/policy/validate.go @@ -19,7 +19,7 @@ import ( kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1" "github.com/kyverno/kyverno/ext/wildcard" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" "github.com/kyverno/kyverno/pkg/client/clientset/versioned" "github.com/kyverno/kyverno/pkg/clients/dclient" enginecontext "github.com/kyverno/kyverno/pkg/engine/context" @@ -232,7 +232,7 @@ func Validate(policy, oldPolicy kyvernov1.PolicyInterface, client dclient.Interf return warnings, err } - rules := autogenv1.ComputeRules(policy, "") + rules := autogen.Default.ComputeRules(policy, "") rulesPath := specPath.Child("rules") for i, rule := range rules { @@ -549,7 +549,7 @@ func ValidateVariables(p kyvernov1.PolicyInterface, backgroundMode bool) error { // hasInvalidVariables - checks for unexpected variables in the policy func hasInvalidVariables(policy kyvernov1.PolicyInterface, background bool) error { - for _, r := range autogenv1.ComputeRules(policy, "") { + for _, r := range autogen.Default.ComputeRules(policy, "") { ruleCopy := r.DeepCopy() if err := ruleForbiddenSectionsHaveVariables(ruleCopy); err != nil { diff --git a/pkg/webhooks/resource/updaterequest.go b/pkg/webhooks/resource/updaterequest.go index 5bced01dc6..456fda529c 100644 --- a/pkg/webhooks/resource/updaterequest.go +++ b/pkg/webhooks/resource/updaterequest.go @@ -9,7 +9,7 @@ import ( "github.com/go-logr/logr" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2" - autogenv1 "github.com/kyverno/kyverno/pkg/autogen/v1" + "github.com/kyverno/kyverno/pkg/autogen" engineapi "github.com/kyverno/kyverno/pkg/engine/api" "github.com/kyverno/kyverno/pkg/event" datautils "github.com/kyverno/kyverno/pkg/utils/data" @@ -54,7 +54,7 @@ func (h *resourceHandlers) handleMutateExisting(ctx context.Context, logger logr // skip rules that don't specify the DELETE operation in case the admission request is of type DELETE var skipped []string - for _, rule := range autogenv1.ComputeRules(policy, "") { + for _, rule := range autogen.Default.ComputeRules(policy, "") { if request.AdmissionRequest.Operation == admissionv1.Delete && !webhookutils.MatchDeleteOperation(rule) { skipped = append(skipped, rule.Name) }