@@ -18,7 +18,9 @@ import (
1818 corev1 "k8s.io/api/core/v1"
1919 apierrors "k8s.io/apimachinery/pkg/api/errors"
2020 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21+ "k8s.io/apimachinery/pkg/fields"
2122 "k8s.io/apimachinery/pkg/runtime"
23+ "k8s.io/apimachinery/pkg/types"
2224 kuberecorder "k8s.io/client-go/tools/record"
2325 ctrl "sigs.k8s.io/controller-runtime"
2426 "sigs.k8s.io/controller-runtime/pkg/builder"
@@ -27,6 +29,7 @@ import (
2729 "sigs.k8s.io/controller-runtime/pkg/handler"
2830 "sigs.k8s.io/controller-runtime/pkg/log"
2931 "sigs.k8s.io/controller-runtime/pkg/predicate"
32+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
3033 "sigs.k8s.io/controller-runtime/pkg/source"
3134
3235 "github.com/open-component-model/ocm/pkg/contexts/ocm"
@@ -83,10 +86,34 @@ func (r *ComponentVersionReconciler) SetupWithManager(mgr ctrl.Manager) error {
8386 For (& v1alpha1.ComponentVersion {}, builder .WithPredicates (predicate.GenerationChangedPredicate {})).
8487 Watches (
8588 & source.Kind {Type : & corev1.Secret {}},
86- handler .EnqueueRequestsFromMapFunc (findRegistrySecrets ( r . Client , sourceKey , & v1alpha1. ComponentVersionList {} ))).
89+ handler .EnqueueRequestsFromMapFunc (r . findObjects ( sourceKey ))).
8790 Complete (r )
8891}
8992
93+ // findObjects finds component versions that have a key for the secret that triggered this watch event.
94+ func (r * ComponentVersionReconciler ) findObjects (key string ) handler.MapFunc {
95+ return func (obj client.Object ) []reconcile.Request {
96+ list := & v1alpha1.ComponentVersionList {}
97+ if err := r .List (context .Background (), list , & client.ListOptions {
98+ FieldSelector : fields .OneTermEqualSelector (key , client .ObjectKeyFromObject (obj ).String ()),
99+ }); err != nil {
100+ return []reconcile.Request {}
101+ }
102+
103+ requests := make ([]reconcile.Request , len (list .Items ))
104+ for i , item := range list .Items {
105+ requests [i ] = reconcile.Request {
106+ NamespacedName : types.NamespacedName {
107+ Name : item .GetName (),
108+ Namespace : item .GetNamespace (),
109+ },
110+ }
111+ }
112+
113+ return requests
114+ }
115+ }
116+
90117// Reconcile is part of the main kubernetes reconciliation loop which aims to
91118// move the current state of the cluster closer to the desired state.
92119func (r * ComponentVersionReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (_ ctrl.Result , retErr error ) {
0 commit comments