in pkg/controllers/hub/endpointsliceexport/controller.go [249:304]
func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error {
// Set up an index for efficient EndpointSliceImport lookup.
if err := mgr.GetFieldIndexer().IndexField(ctx,
&fleetnetv1alpha1.EndpointSliceImport{},
endpointSliceImportNameFieldKey,
endpointSliceImportIndexerFunc,
); err != nil {
klog.ErrorS(err, "Failed to set up index for EndpointSliceImport")
return err
}
// Set up an index for efficient EndpointSliceExport lookup.
if err := mgr.GetFieldIndexer().IndexField(ctx,
&fleetnetv1alpha1.EndpointSliceExport{},
endpointSliceExportOwnerSvcNamespacedNameFieldKey,
endpointSliceExportIndexerFunc,
); err != nil {
klog.ErrorS(err, "Failed to set up index for EndpointSliceExport")
return err
}
// Enqueue EndpointSliceExports 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{}
}
endpointSliceExportList := &fleetnetv1alpha1.EndpointSliceExportList{}
fieldMatcher := client.MatchingFields{
endpointSliceExportOwnerSvcNamespacedNameFieldKey: fmt.Sprintf("%s/%s", svcImport.Namespace, svcImport.Name),
}
if err := r.HubClient.List(ctx, endpointSliceExportList, fieldMatcher); err != nil {
klog.ErrorS(err,
"Failed to list EndpointSliceExports for an imported Service",
"serviceImport", klog.KObj(svcImport))
return []reconcile.Request{}
}
reqs := make([]reconcile.Request, 0, len(endpointSliceExportList.Items))
for _, endpointSliceExport := range endpointSliceExportList.Items {
reqs = append(reqs, reconcile.Request{
NamespacedName: types.NamespacedName{
Namespace: endpointSliceExport.Namespace,
Name: endpointSliceExport.Name,
},
})
}
return reqs
})
return ctrl.NewControllerManagedBy(mgr).
For(&fleetnetv1alpha1.EndpointSliceExport{}).
Watches(&fleetnetv1alpha1.ServiceImport{}, eventHandlers).
Complete(r)
}