@@ -32,11 +32,13 @@ import (
32
32
"k8s.io/klog/v2"
33
33
ctrl "sigs.k8s.io/controller-runtime"
34
34
"sigs.k8s.io/controller-runtime/pkg/builder"
35
+ "sigs.k8s.io/controller-runtime/pkg/cache"
35
36
"sigs.k8s.io/controller-runtime/pkg/client"
36
37
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
37
38
"sigs.k8s.io/controller-runtime/pkg/controller"
38
39
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
39
40
"sigs.k8s.io/controller-runtime/pkg/handler"
41
+ "sigs.k8s.io/controller-runtime/pkg/source"
40
42
41
43
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
42
44
"sigs.k8s.io/cluster-api/controllers/remote"
@@ -65,7 +67,7 @@ type ClusterResourceSetReconciler struct {
65
67
WatchFilterValue string
66
68
}
67
69
68
- func (r * ClusterResourceSetReconciler ) SetupWithManager (ctx context.Context , mgr ctrl.Manager , options controller.Options ) error {
70
+ func (r * ClusterResourceSetReconciler ) SetupWithManager (ctx context.Context , mgr ctrl.Manager , options controller.Options , partialSecretCache cache. Cache ) error {
69
71
err := ctrl .NewControllerManagedBy (mgr ).
70
72
For (& addonsv1.ClusterResourceSet {}).
71
73
Watches (
@@ -74,18 +76,26 @@ func (r *ClusterResourceSetReconciler) SetupWithManager(ctx context.Context, mgr
74
76
).
75
77
WatchesMetadata (
76
78
& corev1.ConfigMap {},
77
- handler .EnqueueRequestsFromMapFunc (r .resourceToClusterResourceSet ),
78
- builder .WithPredicates (
79
- resourcepredicates .ResourceCreateOrUpdate (ctrl .LoggerFrom (ctx )),
79
+ handler .EnqueueRequestsFromMapFunc (
80
+ resourceToClusterResourceSetFunc [client.Object ](r .Client ),
80
81
),
81
- ).
82
- WatchesMetadata (
83
- & corev1.Secret {},
84
- handler .EnqueueRequestsFromMapFunc (r .resourceToClusterResourceSet ),
85
82
builder .WithPredicates (
86
- resourcepredicates .ResourceCreateOrUpdate (ctrl .LoggerFrom (ctx )),
83
+ resourcepredicates.TypedResourceCreateOrUpdate [client. Object ] (ctrl .LoggerFrom (ctx )),
87
84
),
88
85
).
86
+ WatchesRawSource (source .Kind (
87
+ partialSecretCache ,
88
+ & metav1.PartialObjectMetadata {
89
+ TypeMeta : metav1.TypeMeta {
90
+ Kind : "Secret" ,
91
+ APIVersion : "v1" ,
92
+ },
93
+ },
94
+ handler .TypedEnqueueRequestsFromMapFunc (
95
+ resourceToClusterResourceSetFunc [* metav1.PartialObjectMetadata ](r .Client ),
96
+ ),
97
+ resourcepredicates.TypedResourceCreateOrUpdate [* metav1.PartialObjectMetadata ](ctrl .LoggerFrom (ctx )),
98
+ )).
89
99
WithOptions (options ).
90
100
WithEventFilter (predicates .ResourceNotPausedAndHasFilterLabel (ctrl .LoggerFrom (ctx ), r .WatchFilterValue )).
91
101
Complete (r )
@@ -476,46 +486,48 @@ func (r *ClusterResourceSetReconciler) clusterToClusterResourceSet(ctx context.C
476
486
return result
477
487
}
478
488
479
- // resourceToClusterResourceSet is mapper function that maps resources to ClusterResourceSet.
480
- func (r * ClusterResourceSetReconciler ) resourceToClusterResourceSet (ctx context.Context , o client.Object ) []ctrl.Request {
481
- result := []ctrl.Request {}
489
+ // resourceToClusterResourceSetFunc returns a typed mapper function that maps resources to ClusterResourceSet.
490
+ func resourceToClusterResourceSetFunc [T client.Object ](ctrlClient client.Client ) handler.TypedMapFunc [T ] {
491
+ return func (ctx context.Context , o T ) []ctrl.Request {
492
+ result := []ctrl.Request {}
482
493
483
- // Add all ClusterResourceSet owners.
484
- for _ , owner := range o .GetOwnerReferences () {
485
- if owner .Kind == "ClusterResourceSet" {
486
- name := client.ObjectKey {Namespace : o .GetNamespace (), Name : owner .Name }
487
- result = append (result , ctrl.Request {NamespacedName : name })
494
+ // Add all ClusterResourceSet owners.
495
+ for _ , owner := range o .GetOwnerReferences () {
496
+ if owner .Kind == "ClusterResourceSet" {
497
+ name := client.ObjectKey {Namespace : o .GetNamespace (), Name : owner .Name }
498
+ result = append (result , ctrl.Request {NamespacedName : name })
499
+ }
488
500
}
489
- }
490
501
491
- // If there is any ClusterResourceSet owner, that means the resource is reconciled before,
492
- // and existing owners are the only matching ClusterResourceSets to this resource, so no need to return all ClusterResourceSets.
493
- if len (result ) > 0 {
494
- return result
495
- }
502
+ // If there is any ClusterResourceSet owner, that means the resource is reconciled before,
503
+ // and existing owners are the only matching ClusterResourceSets to this resource, so no need to return all ClusterResourceSets.
504
+ if len (result ) > 0 {
505
+ return result
506
+ }
496
507
497
- // Only core group is accepted as resources group
498
- if o .GetObjectKind ().GroupVersionKind ().Group != "" {
499
- return result
500
- }
508
+ // Only core group is accepted as resources group
509
+ if o .GetObjectKind ().GroupVersionKind ().Group != "" {
510
+ return result
511
+ }
501
512
502
- crsList := & addonsv1.ClusterResourceSetList {}
503
- if err := r .Client .List (ctx , crsList , client .InNamespace (o .GetNamespace ())); err != nil {
504
- return nil
505
- }
506
- objKind , err := apiutil .GVKForObject (o , r .Client .Scheme ())
507
- if err != nil {
508
- return nil
509
- }
510
- for _ , crs := range crsList .Items {
511
- for _ , resource := range crs .Spec .Resources {
512
- if resource .Kind == objKind .Kind && resource .Name == o .GetName () {
513
- name := client.ObjectKey {Namespace : o .GetNamespace (), Name : crs .Name }
514
- result = append (result , ctrl.Request {NamespacedName : name })
515
- break
513
+ crsList := & addonsv1.ClusterResourceSetList {}
514
+ if err := ctrlClient .List (ctx , crsList , client .InNamespace (o .GetNamespace ())); err != nil {
515
+ return nil
516
+ }
517
+ objKind , err := apiutil .GVKForObject (o , ctrlClient .Scheme ())
518
+ if err != nil {
519
+ return nil
520
+ }
521
+ for _ , crs := range crsList .Items {
522
+ for _ , resource := range crs .Spec .Resources {
523
+ if resource .Kind == objKind .Kind && resource .Name == o .GetName () {
524
+ name := client.ObjectKey {Namespace : o .GetNamespace (), Name : crs .Name }
525
+ result = append (result , ctrl.Request {NamespacedName : name })
526
+ break
527
+ }
516
528
}
517
529
}
518
- }
519
530
520
- return result
531
+ return result
532
+ }
521
533
}
0 commit comments