@@ -53,6 +53,7 @@ import (
53
53
"sigs.k8s.io/controller-runtime/pkg/log/zap"
54
54
"sigs.k8s.io/controller-runtime/pkg/manager"
55
55
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
56
+ "sigs.k8s.io/controller-runtime/pkg/predicate"
56
57
"sigs.k8s.io/controller-runtime/pkg/reconcile"
57
58
"sigs.k8s.io/controller-runtime/pkg/source"
58
59
"sigs.k8s.io/yaml"
@@ -449,18 +450,21 @@ var _ = Describe("Reconciler", func() {
449
450
450
451
selector := metav1.LabelSelector {MatchLabels : map [string ]string {"foo" : "bar" }}
451
452
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 ())
464
468
})
465
469
})
466
470
})
@@ -1488,6 +1492,45 @@ var _ = Describe("Reconciler", func() {
1488
1492
})
1489
1493
})
1490
1494
})
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 skipped 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
+ })
1491
1534
})
1492
1535
})
1493
1536
})
0 commit comments