@@ -32,11 +32,13 @@ import (
3232 "k8s.io/klog/v2"
3333 ctrl "sigs.k8s.io/controller-runtime"
3434 "sigs.k8s.io/controller-runtime/pkg/builder"
35+ "sigs.k8s.io/controller-runtime/pkg/cache"
3536 "sigs.k8s.io/controller-runtime/pkg/client"
3637 "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
3738 "sigs.k8s.io/controller-runtime/pkg/controller"
3839 "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3940 "sigs.k8s.io/controller-runtime/pkg/handler"
41+ "sigs.k8s.io/controller-runtime/pkg/source"
4042
4143 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
4244 "sigs.k8s.io/cluster-api/controllers/remote"
@@ -65,7 +67,7 @@ type ClusterResourceSetReconciler struct {
6567 WatchFilterValue string
6668}
6769
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 {
6971 err := ctrl .NewControllerManagedBy (mgr ).
7072 For (& addonsv1.ClusterResourceSet {}).
7173 Watches (
@@ -74,18 +76,26 @@ func (r *ClusterResourceSetReconciler) SetupWithManager(ctx context.Context, mgr
7476 ).
7577 WatchesMetadata (
7678 & 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 ),
8081 ),
81- ).
82- WatchesMetadata (
83- & corev1.Secret {},
84- handler .EnqueueRequestsFromMapFunc (r .resourceToClusterResourceSet ),
8582 builder .WithPredicates (
86- resourcepredicates .ResourceCreateOrUpdate (ctrl .LoggerFrom (ctx )),
83+ resourcepredicates.TypedResourceCreateOrUpdate [client. Object ] (ctrl .LoggerFrom (ctx )),
8784 ),
8885 ).
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+ )).
8999 WithOptions (options ).
90100 WithEventFilter (predicates .ResourceNotPausedAndHasFilterLabel (ctrl .LoggerFrom (ctx ), r .WatchFilterValue )).
91101 Complete (r )
@@ -476,46 +486,48 @@ func (r *ClusterResourceSetReconciler) clusterToClusterResourceSet(ctx context.C
476486 return result
477487}
478488
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 {}
482493
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+ }
488500 }
489- }
490501
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+ }
496507
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+ }
501512
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+ }
516528 }
517529 }
518- }
519530
520- return result
531+ return result
532+ }
521533}
0 commit comments