func()

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