func RegisterServiceExportController()

in pkg/controllers/serviceexport_controller.go [56:98]


func RegisterServiceExportController(
	log gwlog.Logger,
	cloud aws.Cloud,
	finalizerManager k8s.FinalizerManager,
	mgr ctrl.Manager,
) error {
	mgrClient := mgr.GetClient()
	scheme := mgr.GetScheme()
	eventRecorder := mgr.GetEventRecorderFor("serviceExport")

	modelBuilder := gateway.NewSvcExportTargetGroupBuilder(log, mgrClient)
	stackDeploy := deploy.NewTargetGroupStackDeploy(log, cloud, mgrClient)
	stackMarshaller := deploy.NewDefaultStackMarshaller()

	r := &serviceExportReconciler{
		log:              log,
		client:           mgrClient,
		Scheme:           scheme,
		finalizerManager: finalizerManager,
		modelBuilder:     modelBuilder,
		stackDeployer:    stackDeploy,
		eventRecorder:    eventRecorder,
		stackMarshaller:  stackMarshaller,
	}

	svcEventHandler := eventhandlers.NewServiceEventHandler(log, r.client)

	builder := ctrl.NewControllerManagedBy(mgr).
		For(&anv1alpha1.ServiceExport{}).
		Watches(&corev1.Service{}, svcEventHandler.MapToServiceExport()).
		Watches(&discoveryv1.EndpointSlice{}, svcEventHandler.MapToServiceExport())

	if ok, err := k8s.IsGVKSupported(mgr, anv1alpha1.GroupVersion.String(), anv1alpha1.TargetGroupPolicyKind); ok {
		builder.Watches(&anv1alpha1.TargetGroupPolicy{}, svcEventHandler.MapToServiceExport())
	} else {
		if err != nil {
			return err
		}
		log.Infof(context.TODO(), "TargetGroupPolicy CRD is not installed, skipping watch")
	}

	return builder.Complete(r)
}