func()

in pkg/gateway/model_build_listener.go [84:134]


func (t *latticeServiceModelBuildTask) buildListeners(ctx context.Context, stackSvcId string) error {
	if !t.route.DeletionTimestamp().IsZero() {
		t.log.Debugf(ctx, "Route %s-%s is deleted, skipping listener build", t.route.Name(), t.route.Namespace())
		return nil
	}
	if len(t.route.Spec().ParentRefs()) == 0 {
		t.log.Debugf(ctx, "No ParentRefs on route %s-%s, nothing to do", t.route.Name(), t.route.Namespace())
		return nil
	}

	// when a service is associate to multiple service network(s), all listener config MUST be same
	// so here we are only using the 1st gateway
	gw, err := t.findGateway(ctx)
	if err != nil {
		return err
	}

	for _, parentRef := range t.route.Spec().ParentRefs() {
		if string(parentRef.Name) != gw.Name {
			continue
		}

		port, protocol, err := t.extractListenerInfo(ctx, parentRef, gw)
		if err != nil {
			return err
		}

		defaultAction, err := t.getListenerDefaultAction(ctx, protocol)
		if err != nil {
			return err
		}
		spec := model.ListenerSpec{
			StackServiceId:    stackSvcId,
			K8SRouteName:      t.route.Name(),
			K8SRouteNamespace: t.route.Namespace(),
			Port:              port,
			Protocol:          protocol,
			DefaultAction:     defaultAction,
		}

		modelListener, err := model.NewListener(t.stack, spec)
		if err != nil {
			return err
		}

		t.log.Debugf(ctx, "Added listener %s-%s to the stack (ID %s)",
			modelListener.Spec.K8SRouteName, modelListener.Spec.K8SRouteNamespace, modelListener.ID())
	}

	return nil
}