@@ -37,12 +37,14 @@ import (
3737 apierrors "k8s.io/apimachinery/pkg/api/errors"
3838 "k8s.io/apimachinery/pkg/labels"
3939 "k8s.io/apimachinery/pkg/types"
40+ "k8s.io/apimachinery/pkg/util/runtime"
4041 "k8s.io/client-go/rest"
4142 "k8s.io/client-go/tools/record"
4243 "sigs.k8s.io/controller-runtime/pkg/builder"
4344 ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client"
4445 "sigs.k8s.io/controller-runtime/pkg/cluster"
4546 "sigs.k8s.io/controller-runtime/pkg/controller"
47+ "sigs.k8s.io/controller-runtime/pkg/handler"
4648 "sigs.k8s.io/controller-runtime/pkg/kontext"
4749 "sigs.k8s.io/controller-runtime/pkg/manager"
4850 "sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -87,10 +89,33 @@ func Add(
8789 WithOptions (controller.Options {MaxConcurrentReconciles : numWorkers }).
8890 // Watch for changes to PublishedResources on the local service cluster
8991 For (& syncagentv1alpha1.PublishedResource {}, builder .WithPredicates (predicate .ByLabels (prFilter ))).
92+ Watches (& apiextensionsv1.CustomResourceDefinition {}, handler .TypedEnqueueRequestsFromMapFunc (reconciler .enqueueMatchingPublishedResources )).
9093 Build (reconciler )
94+
9195 return err
9296}
9397
98+ func (r * Reconciler ) enqueueMatchingPublishedResources (ctx context.Context , obj ctrlruntimeclient.Object ) []reconcile.Request {
99+ crd := obj .(* apiextensionsv1.CustomResourceDefinition )
100+
101+ pubResources := & syncagentv1alpha1.PublishedResourceList {}
102+ if err := r .localClient .List (ctx , pubResources ); err != nil {
103+ runtime .HandleError (err )
104+ return nil
105+ }
106+
107+ var requests []reconcile.Request
108+ for _ , pr := range pubResources .Items {
109+ if pr .Spec .Resource .APIGroup == crd .Spec .Group && pr .Spec .Resource .Kind == crd .Spec .Names .Kind {
110+ requests = append (requests , reconcile.Request {
111+ NamespacedName : ctrlruntimeclient .ObjectKeyFromObject (& pr ),
112+ })
113+ }
114+ }
115+
116+ return requests
117+ }
118+
94119func (r * Reconciler ) Reconcile (ctx context.Context , request reconcile.Request ) (reconcile.Result , error ) {
95120 log := r .log .With ("publishedresource" , request )
96121 log .Debug ("Processing" )
0 commit comments