Skip to content

Commit 23b8553

Browse files
committed
fix: make apiresourceschema controller watch for CRD changes
On-behalf-of: @SAP [email protected]
1 parent 87d26ce commit 23b8553

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

internal/controller/apiresourceschema/controller.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
94119
func (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

Comments
 (0)