@@ -53,6 +53,7 @@ import (
5353 "sigs.k8s.io/controller-runtime/pkg/log/zap"
5454 "sigs.k8s.io/controller-runtime/pkg/manager"
5555 metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
56+ "sigs.k8s.io/controller-runtime/pkg/predicate"
5657 "sigs.k8s.io/controller-runtime/pkg/reconcile"
5758 "sigs.k8s.io/controller-runtime/pkg/source"
5859 "sigs.k8s.io/yaml"
@@ -449,18 +450,21 @@ var _ = Describe("Reconciler", func() {
449450
450451 selector := metav1.LabelSelector {MatchLabels : map [string ]string {"foo" : "bar" }}
451452 Expect (WithSelector (selector )(r )).To (Succeed ())
452- Expect (r .selectorPredicate ).NotTo (BeNil ())
453-
454- Expect (r .selectorPredicate .Create (event.CreateEvent {Object : objLabeled })).To (BeTrue ())
455- Expect (r .selectorPredicate .Update (event.UpdateEvent {ObjectOld : objUnlabeled , ObjectNew : objLabeled })).To (BeTrue ())
456- Expect (r .selectorPredicate .Delete (event.DeleteEvent {Object : objLabeled })).To (BeTrue ())
457- Expect (r .selectorPredicate .Generic (event.GenericEvent {Object : objLabeled })).To (BeTrue ())
458-
459- Expect (r .selectorPredicate .Create (event.CreateEvent {Object : objUnlabeled })).To (BeFalse ())
460- Expect (r .selectorPredicate .Update (event.UpdateEvent {ObjectOld : objLabeled , ObjectNew : objUnlabeled })).To (BeFalse ())
461- Expect (r .selectorPredicate .Update (event.UpdateEvent {ObjectOld : objUnlabeled , ObjectNew : objUnlabeled })).To (BeFalse ())
462- Expect (r .selectorPredicate .Delete (event.DeleteEvent {Object : objUnlabeled })).To (BeFalse ())
463- Expect (r .selectorPredicate .Generic (event.GenericEvent {Object : objUnlabeled })).To (BeFalse ())
453+ Expect (r .labelSelector ).NotTo (BeNil ())
454+
455+ selectorPredicate , err := predicate .LabelSelectorPredicate (r .labelSelector )
456+ Expect (err ).ToNot (HaveOccurred ())
457+
458+ Expect (selectorPredicate .Create (event.CreateEvent {Object : objLabeled })).To (BeTrue ())
459+ Expect (selectorPredicate .Update (event.UpdateEvent {ObjectOld : objUnlabeled , ObjectNew : objLabeled })).To (BeTrue ())
460+ Expect (selectorPredicate .Delete (event.DeleteEvent {Object : objLabeled })).To (BeTrue ())
461+ Expect (selectorPredicate .Generic (event.GenericEvent {Object : objLabeled })).To (BeTrue ())
462+
463+ Expect (selectorPredicate .Create (event.CreateEvent {Object : objUnlabeled })).To (BeFalse ())
464+ Expect (selectorPredicate .Update (event.UpdateEvent {ObjectOld : objLabeled , ObjectNew : objUnlabeled })).To (BeFalse ())
465+ Expect (selectorPredicate .Update (event.UpdateEvent {ObjectOld : objUnlabeled , ObjectNew : objUnlabeled })).To (BeFalse ())
466+ Expect (selectorPredicate .Delete (event.DeleteEvent {Object : objUnlabeled })).To (BeFalse ())
467+ Expect (selectorPredicate .Generic (event.GenericEvent {Object : objUnlabeled })).To (BeFalse ())
464468 })
465469 })
466470 })
@@ -1488,6 +1492,45 @@ var _ = Describe("Reconciler", func() {
14881492 })
14891493 })
14901494 })
1495+ When ("label selector set" , func () {
1496+ It ("reconcile only matching CR" , func () {
1497+ By ("adding selector to the reconciler" , func () {
1498+ selectorFoo := metav1.LabelSelector {MatchLabels : map [string ]string {"app" : "foo" }}
1499+ Expect (WithSelector (selectorFoo )(r )).To (Succeed ())
1500+ })
1501+
1502+ By ("adding not matching label to the CR" , func () {
1503+ Expect (mgr .GetClient ().Get (ctx , objKey , obj )).To (Succeed ())
1504+ obj .SetLabels (map [string ]string {"app" : "bar" })
1505+ Expect (mgr .GetClient ().Update (ctx , obj )).To (Succeed ())
1506+ })
1507+
1508+ By ("reconciling skiped and no actions for the release" , func () {
1509+ res , err := r .Reconcile (ctx , req )
1510+ Expect (res ).To (Equal (reconcile.Result {}))
1511+ Expect (err ).ToNot (HaveOccurred ())
1512+ })
1513+
1514+ By ("verifying the release has not changed" , func () {
1515+ rel , err := ac .Get (obj .GetName ())
1516+ Expect (err ).ToNot (HaveOccurred ())
1517+ Expect (rel ).NotTo (BeNil ())
1518+ Expect (* rel ).To (Equal (* currentRelease ))
1519+ })
1520+
1521+ By ("adding matching label to the CR" , func () {
1522+ Expect (mgr .GetClient ().Get (ctx , objKey , obj )).To (Succeed ())
1523+ obj .SetLabels (map [string ]string {"app" : "foo" })
1524+ Expect (mgr .GetClient ().Update (ctx , obj )).To (Succeed ())
1525+ })
1526+
1527+ By ("successfully reconciling with correct labels" , func () {
1528+ res , err := r .Reconcile (ctx , req )
1529+ Expect (res ).To (Equal (reconcile.Result {}))
1530+ Expect (err ).ToNot (HaveOccurred ())
1531+ })
1532+ })
1533+ })
14911534 })
14921535 })
14931536 })
0 commit comments