diff --git a/cmd/kyverno/main.go b/cmd/kyverno/main.go index 707f0e54a1..697d72cb10 100755 --- a/cmd/kyverno/main.go +++ b/cmd/kyverno/main.go @@ -15,6 +15,7 @@ import ( dclient "github.com/kyverno/kyverno/pkg/dclient" event "github.com/kyverno/kyverno/pkg/event" "github.com/kyverno/kyverno/pkg/generate" + backwardcompatibility "github.com/kyverno/kyverno/pkg/generate/backwardCompatibility" generatecleanup "github.com/kyverno/kyverno/pkg/generate/cleanup" "github.com/kyverno/kyverno/pkg/openapi" "github.com/kyverno/kyverno/pkg/policy" @@ -356,6 +357,9 @@ func main() { // verifies if the admission control is enabled and active server.RunAsync(stopCh) + + go backwardcompatibility.AddLabels(pclient, pInformer.Kyverno().V1().GenerateRequests()) + <-stopCh // by default http.Server waits indefinitely for connections to return to idle and then shuts down diff --git a/pkg/generate/backward_compatibility/add_labels.go b/pkg/generate/backward_compatibility/add_labels.go new file mode 100644 index 0000000000..6f0ba16397 --- /dev/null +++ b/pkg/generate/backward_compatibility/add_labels.go @@ -0,0 +1,39 @@ +package backwardcompatibility + +import ( + "context" + "fmt" + + kyvernoclient "github.com/kyverno/kyverno/pkg/client/clientset/versioned" + kyvernoinformer "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1" + "github.com/kyverno/kyverno/pkg/config" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" +) + +// AddLabels - adds labels to all the existing generate requests +func AddLabels(client *kyvernoclient.Clientset, grInformer kyvernoinformer.GenerateRequestInformer) { + // Get all the GR's that are existing + // Extract and Update all of them with the with the labels + grList, err := grInformer.Lister().List(labels.NewSelector()) + if err != nil { + // throw some error! + fmt.Println("error occurred while getting gr list") + fmt.Println(err) + } + + for _, gr := range grList { + gr.SetLabels(map[string]string{ + "generate.kyverno.io/policy-name": gr.Spec.Policy, + "generate.kyverno.io/resource-name": gr.Spec.Resource.Name, + "generate.kyverno.io/resource-kind": gr.Spec.Resource.Kind, + "generate.kyverno.io/resource-namespace": gr.Spec.Resource.Namespace, + }) + + _, err = client.KyvernoV1().GenerateRequests(config.KyvernoNamespace).Update(context.TODO(), gr, metav1.UpdateOptions{}) + if err != nil { + fmt.Println("error occured while updating gr", gr.Name) + fmt.Println(err) + } + } +} diff --git a/pkg/webhooks/generation.go b/pkg/webhooks/generation.go index 21bf48ab1c..d0576e5c31 100644 --- a/pkg/webhooks/generation.go +++ b/pkg/webhooks/generation.go @@ -94,8 +94,8 @@ func (ws *WebhookServer) handleDeleteAndUpdate(request *v1beta1.AdmissionRequest } resLabels := resource.GetLabels() - if resLabels["app.kubernetes.io/managed-by"] == "kyverno" && resLabels["generate.kyverno.io/synchronize"] == "enable" && request.Operation == v1beta1.Delete { - grName := resLabels["generate.kyverno.io/gr-name"] + if resLabels["app.kubernetes.io/managed-by"] == "kyverno" && resLabels["policy.kyverno.io/synchronize"] == "enable" && request.Operation == v1beta1.Delete { + grName := resLabels["policy.kyverno.io/gr-name"] gr, err := ws.grLister.Get(grName) if err != nil { logger.Error(err, "failed to get generate request", "name", grName)