in pkg/controllers/hub/internalserviceimport/controller.go [173:223]
func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error {
// Set up an index for efficient InternalServiceImport lookup.
internalSvcImportIndexerFunc := func(o client.Object) []string {
internalSvcImport, ok := o.(*fleetnetv1alpha1.InternalServiceImport)
if !ok {
return []string{}
}
return []string{internalSvcImport.Spec.ServiceImportReference.NamespacedName}
}
if err := mgr.GetFieldIndexer().IndexField(ctx,
&fleetnetv1alpha1.InternalServiceImport{},
internalSvcImportSvcRefNamespacedNameFieldKey,
internalSvcImportIndexerFunc,
); err != nil {
klog.ErrorS(err, "Failed to set up InternalServiceImport index")
return err
}
// Enqueue InternalServiceImports for processing when a ServiceImport changes.
eventHandlers := handler.EnqueueRequestsFromMapFunc(func(_ context.Context, o client.Object) []reconcile.Request {
svcImport, ok := o.(*fleetnetv1alpha1.ServiceImport)
if !ok {
return []reconcile.Request{}
}
internalSvcImportList := &fleetnetv1alpha1.InternalServiceImportList{}
fieldMatcher := client.MatchingFields{
internalSvcImportSvcRefNamespacedNameFieldKey: fmt.Sprintf("%s/%s", svcImport.Namespace, svcImport.Name),
}
if err := r.HubClient.List(ctx, internalSvcImportList, fieldMatcher); err != nil {
klog.ErrorS(err, "Failed to list InternalServiceImports for an ServiceImport", "serviceImport", klog.KObj(svcImport))
return []reconcile.Request{}
}
reqs := make([]reconcile.Request, 0, len(internalSvcImportList.Items))
for _, internalSvcImport := range internalSvcImportList.Items {
reqs = append(reqs, reconcile.Request{
NamespacedName: types.NamespacedName{
Namespace: internalSvcImport.Namespace,
Name: internalSvcImport.Name,
},
})
}
return reqs
})
return ctrl.NewControllerManagedBy(mgr).
For(&fleetnetv1alpha1.InternalServiceImport{}).
Watches(&fleetnetv1alpha1.ServiceImport{}, eventHandlers).
Complete(r)
}