func RegisterGatewayController()

in pkg/controllers/gateway_controller.go [64:114]


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

	r := &gatewayReconciler{
		log:              log,
		client:           mgrClient,
		scheme:           scheme,
		finalizerManager: finalizerManager,
		eventRecorder:    evtRec,
		cloud:            cloud,
	}

	if config.DefaultServiceNetwork != "" {
		// Attempt creation of default service network, move gracefully even if it fails.
		snManager := deploy.NewDefaultServiceNetworkManager(log, cloud)
		_, err := snManager.CreateOrUpdate(context.Background(), &model.ServiceNetwork{
			Spec: model.ServiceNetworkSpec{
				Name: config.DefaultServiceNetwork,
			},
		})
		if err != nil {
			log.Infof(context.TODO(), "Could not setup default service network %s, proceeding without it - %s",
				config.DefaultServiceNetwork, err.Error())
		}
	}

	gwClassEventHandler := eventhandlers.NewEnqueueRequestsForGatewayClassEvent(log, mgrClient)
	vpcAssociationPolicyEventHandler := eventhandlers.NewVpcAssociationPolicyEventHandler(log, mgrClient)
	builder := ctrl.NewControllerManagedBy(mgr).
		For(&gwv1.Gateway{}, pkg_builder.WithPredicates(predicate.GenerationChangedPredicate{}))
	builder.Watches(&gwv1.GatewayClass{}, gwClassEventHandler)

	//Watch VpcAssociationPolicy CRD if it is installed
	ok, err := k8s.IsGVKSupported(mgr, anv1alpha1.GroupVersion.String(), anv1alpha1.VpcAssociationPolicyKind)
	if err != nil {
		return err
	}
	if ok {
		builder.Watches(&anv1alpha1.VpcAssociationPolicy{}, vpcAssociationPolicyEventHandler.MapToGateway())
	} else {
		log.Infof(context.TODO(), "VpcAssociationPolicy CRD is not installed, skipping watch")
	}
	return builder.Complete(r)
}