in pkg/controllers/hub/trafficmanagerbackend/controller.go [709:765]
func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, disableInternalServiceExportIndexer bool) error {
// set up an index for efficient trafficManagerBackend lookup
profileIndexerFunc := func(o client.Object) []string {
tmb, ok := o.(*fleetnetv1beta1.TrafficManagerBackend)
if !ok {
return []string{}
}
return []string{tmb.Spec.Profile.Name}
}
if err := mgr.GetFieldIndexer().IndexField(ctx, &fleetnetv1beta1.TrafficManagerBackend{}, trafficManagerBackendProfileFieldKey, profileIndexerFunc); err != nil {
klog.ErrorS(err, "Failed to setup profile field indexer for TrafficManagerBackend")
return err
}
backendIndexerFunc := func(o client.Object) []string {
tmb, ok := o.(*fleetnetv1beta1.TrafficManagerBackend)
if !ok {
return []string{}
}
return []string{tmb.Spec.Backend.Name}
}
if err := mgr.GetFieldIndexer().IndexField(ctx, &fleetnetv1beta1.TrafficManagerBackend{}, trafficManagerBackendBackendFieldKey, backendIndexerFunc); err != nil {
klog.ErrorS(err, "Failed to setup backend field indexer for TrafficManagerBackend")
return err
}
// add index to quickly query internalServiceExport list by service
if !disableInternalServiceExportIndexer {
internalServiceExportIndexerFunc := func(o client.Object) []string {
name, ok := o.(*fleetnetv1alpha1.InternalServiceExport)
if !ok {
return []string{}
}
return []string{name.Spec.ServiceReference.NamespacedName}
}
if err := mgr.GetFieldIndexer().IndexField(ctx, &fleetnetv1alpha1.InternalServiceExport{}, exportedServiceFieldNamespacedName, internalServiceExportIndexerFunc); err != nil {
klog.ErrorS(err, "Failed to create index", "field", exportedServiceFieldNamespacedName)
return err
}
}
return ctrl.NewControllerManagedBy(mgr).
For(&fleetnetv1beta1.TrafficManagerBackend{}).
Watches(
&fleetnetv1beta1.TrafficManagerProfile{},
handler.EnqueueRequestsFromMapFunc(r.trafficManagerProfileEventHandler()),
).
Watches(
&fleetnetv1alpha1.ServiceImport{},
handler.EnqueueRequestsFromMapFunc(r.serviceImportEventHandler()),
).
Watches(
&fleetnetv1alpha1.InternalServiceExport{},
handler.EnqueueRequestsFromMapFunc(r.internalServiceExportEventHandler()),
).
Complete(r)
}