From ebf9f3f8784d1e86e0b2ef5ded8f9f5d2e0075a8 Mon Sep 17 00:00:00 2001 From: Soumya Singh Date: Fri, 2 Dec 2022 20:44:26 +0530 Subject: [PATCH] Kyverno CLI: added method to detect duplicate resource in kyverno test (#3612) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added method to detect duplicate resource in kyverno test Signed-off-by: tend2infinity * fix linter Signed-off-by: Charles-Edouard Brétéché * fix Signed-off-by: Charles-Edouard Brétéché Signed-off-by: tend2infinity Signed-off-by: Charles-Edouard Brétéché Co-authored-by: tend2infinity Co-authored-by: Vyankatesh Kudtarkar Co-authored-by: Chip Zoller Co-authored-by: Charles-Edouard Brétéché Co-authored-by: Charles-Edouard Brétéché --- cmd/cli/kubectl-kyverno/test/test_command.go | 24 ++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/cmd/cli/kubectl-kyverno/test/test_command.go b/cmd/cli/kubectl-kyverno/test/test_command.go index ddd78a10fc..c383f961e7 100644 --- a/cmd/cli/kubectl-kyverno/test/test_command.go +++ b/cmd/cli/kubectl-kyverno/test/test_command.go @@ -960,17 +960,33 @@ func applyPoliciesFromPath(fs billy.Filesystem, policyBytes []byte, isGit bool, } resources = filteredResources + noDuplicateResources := []*unstructured.Unstructured{} + + for _, resource := range resources { + duplicate := false + for _, unique := range noDuplicateResources { + if resource.GetKind() == unique.GetKind() && resource.GetName() == unique.GetName() && resource.GetNamespace() == unique.GetNamespace() { + duplicate = true + fmt.Println("skipping duplicate resource, resource :", resource) + break + } + } + if !duplicate { + noDuplicateResources = append(noDuplicateResources, resource) + } + } + msgPolicies := "1 policy" if len(policies) > 1 { msgPolicies = fmt.Sprintf("%d policies", len(policies)) } msgResources := "1 resource" - if len(resources) > 1 { - msgResources = fmt.Sprintf("%d resources", len(resources)) + if len(noDuplicateResources) > 1 { + msgResources = fmt.Sprintf("%d resources", len(noDuplicateResources)) } - if len(policies) > 0 && len(resources) > 0 { + if len(policies) > 0 && len(noDuplicateResources) > 0 { fmt.Printf("\napplying %s to %s... \n", msgPolicies, msgResources) } @@ -995,7 +1011,7 @@ func applyPoliciesFromPath(fs billy.Filesystem, policyBytes []byte, isGit bool, kindOnwhichPolicyIsApplied := common.GetKindsFromPolicy(policy) - for _, resource := range resources { + for _, resource := range noDuplicateResources { thisPolicyResourceValues, err := common.CheckVariableForPolicy(valuesMap, globalValMap, policy.GetName(), resource.GetName(), resource.GetKind(), variables, kindOnwhichPolicyIsApplied, variable) if err != nil { return sanitizederror.NewWithError(fmt.Sprintf("policy `%s` have variables. pass the values for the variables for resource `%s` using set/values_file flag", policy.GetName(), resource.GetName()), err)