pkg/controllers/eventhandlers/service.go (70 lines of code) (raw):

package eventhandlers import ( "context" "github.com/aws/aws-application-networking-k8s/pkg/apis/applicationnetworking/v1alpha1" "github.com/aws/aws-application-networking-k8s/pkg/k8s" "github.com/aws/aws-application-networking-k8s/pkg/model/core" "github.com/aws/aws-application-networking-k8s/pkg/utils/gwlog" corev1 "k8s.io/api/core/v1" discoveryv1 "k8s.io/api/discovery/v1" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) type serviceEventHandler struct { log gwlog.Logger client client.Client mapper *resourceMapper } func NewServiceEventHandler(log gwlog.Logger, client client.Client) *serviceEventHandler { return &serviceEventHandler{log: log, client: client, mapper: &resourceMapper{log: log, client: client}} } func (h *serviceEventHandler) MapToRoute(routeType core.RouteType) handler.EventHandler { return handler.EnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []reconcile.Request { return h.mapToRoute(ctx, obj, routeType) }) } func (h *serviceEventHandler) MapToServiceExport() handler.EventHandler { return handler.EnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []reconcile.Request { return h.mapToServiceExport(ctx, obj) }) } func (h *serviceEventHandler) mapToServiceExport(ctx context.Context, obj client.Object) []reconcile.Request { var requests []reconcile.Request svc := h.mapToService(ctx, obj) svcExport := h.mapper.ServiceToServiceExport(ctx, svc) if svcExport != nil { requests = append(requests, reconcile.Request{ NamespacedName: k8s.NamespacedName(svcExport), }) h.log.Infow(ctx, "Service impacting resource change triggered ServiceExport update", "serviceName", svc.Namespace+"/"+svc.Name) } return requests } func (h *serviceEventHandler) mapToService(ctx context.Context, obj client.Object) *corev1.Service { switch typed := obj.(type) { case *corev1.Service: return typed case *v1alpha1.TargetGroupPolicy: return h.mapper.TargetGroupPolicyToService(ctx, typed) case *corev1.Endpoints: return h.mapper.EndpointsToService(ctx, typed) case *discoveryv1.EndpointSlice: return h.mapper.EndpointSliceToService(ctx, typed) } return nil } func (h *serviceEventHandler) mapToRoute(ctx context.Context, obj client.Object, routeType core.RouteType) []reconcile.Request { svc := h.mapToService(ctx, obj) routes := h.mapper.ServiceToRoutes(ctx, svc, routeType) var requests []reconcile.Request for _, route := range routes { routeName := k8s.NamespacedName(route.K8sObject()) requests = append(requests, reconcile.Request{NamespacedName: routeName}) h.log.Infow(ctx, "Service impacting resource change triggered Route update", "serviceName", svc.Namespace+"/"+svc.Name, "routeName", routeName, "routeType", routeType) } return requests }