From 1460730833ca8895ad604b5282eb35d561df472d Mon Sep 17 00:00:00 2001 From: Aurel Canciu Date: Thu, 11 Nov 2021 14:57:22 +0100 Subject: [PATCH] Watched cross-ns image repos trigger reconcile Cross-namespace ImageRepository resources should trigger reconciles for ImagePolicies that refer to them. Previously, this was only done for resources in the same namespace. Fixes #195 Signed-off-by: Aurel Canciu --- api/v1alpha1/zz_generated.deepcopy.go | 1 + api/v1alpha2/zz_generated.deepcopy.go | 1 + api/v1beta1/zz_generated.deepcopy.go | 1 + controllers/imagepolicy_controller.go | 3 +-- controllers/policy_test.go | 16 +++++++++++++++- 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 6d84c888..89bd8021 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/api/v1alpha2/zz_generated.deepcopy.go b/api/v1alpha2/zz_generated.deepcopy.go index 6d941dc5..7058920f 100644 --- a/api/v1alpha2/zz_generated.deepcopy.go +++ b/api/v1alpha2/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/api/v1beta1/zz_generated.deepcopy.go b/api/v1beta1/zz_generated.deepcopy.go index aa2ce5ec..340cf5b8 100644 --- a/api/v1beta1/zz_generated.deepcopy.go +++ b/api/v1beta1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/controllers/imagepolicy_controller.go b/controllers/imagepolicy_controller.go index 8995cfb8..77249bd7 100644 --- a/controllers/imagepolicy_controller.go +++ b/controllers/imagepolicy_controller.go @@ -259,8 +259,7 @@ func (r *ImagePolicyReconciler) SetupWithManager(mgr ctrl.Manager, opts ImagePol func (r *ImagePolicyReconciler) imagePoliciesForRepository(obj client.Object) []reconcile.Request { ctx := context.Background() var policies imagev1.ImagePolicyList - if err := r.List(ctx, &policies, client.InNamespace(obj.GetNamespace()), - client.MatchingFields{imageRepoKey: obj.GetName()}); err != nil { + if err := r.List(ctx, &policies, client.MatchingFields{imageRepoKey: obj.GetName()}); err != nil { return nil } reqs := make([]reconcile.Request, len(policies.Items)) diff --git a/controllers/policy_test.go b/controllers/policy_test.go index 7369ce06..6f0f720d 100644 --- a/controllers/policy_test.go +++ b/controllers/policy_test.go @@ -615,7 +615,8 @@ var _ = Describe("ImagePolicy controller", func() { defer k8sClient.Delete(context.Background(), policyNamespace) versions := []string{"1.0.0", "1.0.1"} - imgRepo := loadImages(registryServer, "acl-image-"+randStringRunes(5), versions) + imageName := "acl-image-" + randStringRunes(5) + imgRepo := loadImages(registryServer, imageName, versions) repo := imagev1.ImageRepository{ Spec: imagev1.ImageRepositorySpec{ @@ -687,6 +688,19 @@ var _ = Describe("ImagePolicy controller", func() { }, timeout, interval).Should(BeTrue()) Expect(pol.Status.LatestImage).To(Equal(imgRepo + ":1.0.1")) + // Updating the image should reconcile the cross-namespace policy + imgRepo = loadImages(registryServer, imageName, []string{"1.0.2"}) + Eventually(func() bool { + err := r.Get(ctx, repoObjectName, &repo) + return err == nil && repo.Status.LastScanResult.TagCount == len(versions)+1 + }, timeout, interval).Should(BeTrue()) + + Eventually(func() bool { + err := r.Get(ctx, polObjectName, &pol) + return err == nil && pol.Status.LatestImage != "" + }, timeout, interval).Should(BeTrue()) + Expect(pol.Status.LatestImage).To(Equal(imgRepo + ":1.0.2")) + Expect(r.Delete(ctx, &pol)).To(Succeed()) }) })