in pkg/deploy/lattice/listener_manager.go [46:95]
func (d *defaultListenerManager) Upsert(
ctx context.Context,
modelListener *model.Listener,
modelSvc *model.Service,
) (model.ListenerStatus, error) {
if modelSvc.Status == nil || modelSvc.Status.Id == "" {
return model.ListenerStatus{}, errors.New("model service is missing id")
}
d.log.Infof(ctx, "Upsert listener %s-%s", modelListener.Spec.K8SRouteName, modelListener.Spec.K8SRouteNamespace)
latticeSvcId := modelSvc.Status.Id
latticeListenerSummary, err := d.findListenerByPort(ctx, latticeSvcId, modelListener.Spec.Port)
if err != nil {
return model.ListenerStatus{}, err
}
defaultAction, err := d.getLatticeListenerDefaultAction(ctx, modelListener)
if err != nil {
return model.ListenerStatus{}, err
}
if latticeListenerSummary == nil {
// listener not found, create new one
return d.create(ctx, latticeSvcId, modelListener, defaultAction)
}
existingListenerStatus := model.ListenerStatus{
Name: aws.StringValue(latticeListenerSummary.Name),
ListenerArn: aws.StringValue(latticeListenerSummary.Arn),
Id: aws.StringValue(latticeListenerSummary.Id),
ServiceId: latticeSvcId,
}
if modelListener.Spec.Protocol != vpclattice.ListenerProtocolTlsPassthrough {
// The only mutable field for lattice listener is defaultAction, for non-TLS_PASSTHROUGH listener, the defaultAction is always the FixedResponse 404. Don't need to update.
return existingListenerStatus, nil
}
// For TLS_PASSTHROUGH listener, check whether it needs to update defaultAction
needToUpdateDefaultAction, err := d.needToUpdateDefaultAction(ctx, latticeSvcId, *latticeListenerSummary.Id, defaultAction)
if err != nil {
return model.ListenerStatus{}, err
}
if needToUpdateDefaultAction {
if err = d.update(ctx, latticeSvcId, latticeListenerSummary, defaultAction); err != nil {
return model.ListenerStatus{}, err
}
}
return existingListenerStatus, nil
}