func()

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)
}