in pkg/controllers/route_controller.go [81:152]
func RegisterAllRouteControllers(
log gwlog.Logger,
cloud aws.Cloud,
finalizerManager k8s.FinalizerManager,
mgr ctrl.Manager,
) error {
mgrClient := mgr.GetClient()
gwEventHandler := eventhandlers.NewEnqueueRequestGatewayEvent(log, mgrClient)
svcEventHandler := eventhandlers.NewServiceEventHandler(log, mgrClient)
routeInfos := []struct {
routeType core.RouteType
gatewayApiType client.Object
}{
{core.HttpRouteType, &gwv1.HTTPRoute{}},
{core.GrpcRouteType, &gwv1.GRPCRoute{}},
{core.TlsRouteType, &gwv1alpha2.TLSRoute{}},
}
for _, routeInfo := range routeInfos {
brTgBuilder := gateway.NewBackendRefTargetGroupBuilder(log, mgrClient)
reconciler := routeReconciler{
routeType: routeInfo.routeType,
log: log,
client: mgrClient,
scheme: mgr.GetScheme(),
finalizerManager: finalizerManager,
eventRecorder: mgr.GetEventRecorderFor(string(routeInfo.routeType) + "route"),
modelBuilder: gateway.NewLatticeServiceBuilder(log, mgrClient, brTgBuilder),
stackDeployer: deploy.NewLatticeServiceStackDeploy(log, cloud, mgrClient),
stackMarshaller: deploy.NewDefaultStackMarshaller(),
cloud: cloud,
}
svcImportEventHandler := eventhandlers.NewServiceImportEventHandler(log, mgrClient)
builder := ctrl.NewControllerManagedBy(mgr).
For(routeInfo.gatewayApiType, builder.WithPredicates(predicate.GenerationChangedPredicate{})).
Watches(&gwv1.Gateway{}, gwEventHandler).
Watches(&corev1.Service{}, svcEventHandler.MapToRoute(routeInfo.routeType)).
Watches(&anv1alpha1.ServiceImport{}, svcImportEventHandler.MapToRoute(routeInfo.routeType)).
Watches(&discoveryv1.EndpointSlice{}, svcEventHandler.MapToRoute(routeInfo.routeType)).
WithOptions(controller.Options{
MaxConcurrentReconciles: config.RouteMaxConcurrentReconciles,
})
if ok, err := k8s.IsGVKSupported(mgr, anv1alpha1.GroupVersion.String(), anv1alpha1.TargetGroupPolicyKind); ok {
builder.Watches(&anv1alpha1.TargetGroupPolicy{}, svcEventHandler.MapToRoute(routeInfo.routeType))
} else {
if err != nil {
return err
}
log.Infof(context.TODO(), "TargetGroupPolicy CRD is not installed, skipping watch")
}
if ok, err := k8s.IsGVKSupported(mgr, "externaldns.k8s.io/v1alpha1", "DNSEndpoint"); ok {
builder.Owns(&endpoint.DNSEndpoint{})
} else {
if err != nil {
return err
}
log.Infof(context.TODO(), "DNSEndpoint CRD is not installed, skipping watch")
}
err := builder.Complete(&reconciler)
if err != nil {
return err
}
}
return nil
}