in pkg/gateway/model_build_targets.go [61:116]
func (b *LatticeTargetsModelBuilder) build(ctx context.Context,
serviceExport *anv1alpha1.ServiceExport,
service *corev1.Service, backendRef core.BackendRef,
stack core.Stack, stackTgId string,
) (core.Stack, error) {
isServiceExport := serviceExport != nil
isBackendRef := service != nil && backendRef != nil
if !(isServiceExport || isBackendRef) {
return nil, errors.New("either service export or route/service/backendRef must be specified")
}
if isServiceExport && isBackendRef {
return nil, errors.New("either service export or route/service/backendRef must be specified, but not both")
}
if isServiceExport {
b.log.Debugf(ctx, "Processing targets for service export %s-%s", serviceExport.Name, serviceExport.Namespace)
serviceName := types.NamespacedName{
Namespace: serviceExport.Namespace,
Name: serviceExport.Name,
}
tmpSvc := &corev1.Service{}
if err := b.client.Get(ctx, serviceName, tmpSvc); err != nil {
return nil, err
}
service = tmpSvc
} else {
b.log.Debugf(ctx, "Processing targets for service %s-%s", service.Name, service.Namespace)
}
if stack == nil {
stack = core.NewDefaultStack(core.StackID(k8s.NamespacedName(service)))
}
if !service.DeletionTimestamp.IsZero() {
b.log.Debugf(ctx, "service %s/%s is deleted, skipping target build", service.Name, service.Namespace)
return stack, nil
}
task := &latticeTargetsModelBuildTask{
log: b.log,
client: b.client,
serviceExport: serviceExport,
service: service,
backendRef: backendRef,
stack: stack,
stackTgId: stackTgId,
}
if err := task.run(ctx); err != nil {
return nil, err
}
return task.stack, nil
}