MCPcopy
hub / github.com/docker/compose / getLinks

Method getLinks

pkg/compose/convergence.go:416–468  ·  view source on GitHub ↗

getLinks mimics V1 compose/service.py::Service::_get_links()

(ctx context.Context, projectName string, service types.ServiceConfig, number int)

Source from the content-addressed store, hash-verified

414
415// getLinks mimics V1 compose/service.py::Service::_get_links()
416func (s *composeService) getLinks(ctx context.Context, projectName string, service types.ServiceConfig, number int) ([]string, error) {
417 var links []string
418 format := func(k, v string) string {
419 return fmt.Sprintf("%s:%s", k, v)
420 }
421 getServiceContainers := func(serviceName string) (Containers, error) {
422 return s.getContainers(ctx, projectName, oneOffExclude, true, serviceName)
423 }
424
425 for _, rawLink := range service.Links {
426 // linkName if informed like in: "serviceName[:linkName]"
427 linkServiceName, linkName, ok := strings.Cut(rawLink, ":")
428 if !ok {
429 linkName = linkServiceName
430 }
431 cnts, err := getServiceContainers(linkServiceName)
432 if err != nil {
433 return nil, err
434 }
435 for _, c := range cnts {
436 containerName := getCanonicalContainerName(c)
437 links = append(links,
438 format(containerName, linkName),
439 format(containerName, linkServiceName+api.Separator+strconv.Itoa(number)),
440 format(containerName, strings.Join([]string{projectName, linkServiceName, strconv.Itoa(number)}, api.Separator)),
441 )
442 }
443 }
444
445 if service.Labels[api.OneoffLabel] == "True" {
446 cnts, err := getServiceContainers(service.Name)
447 if err != nil {
448 return nil, err
449 }
450 for _, c := range cnts {
451 containerName := getCanonicalContainerName(c)
452 links = append(links,
453 format(containerName, service.Name),
454 format(containerName, strings.TrimPrefix(containerName, projectName+api.Separator)),
455 format(containerName, containerName),
456 )
457 }
458 }
459
460 for _, rawExtLink := range service.ExternalLinks {
461 externalLink, linkName, ok := strings.Cut(rawExtLink, ":")
462 if !ok {
463 linkName = externalLink
464 }
465 links = append(links, format(externalLink, linkName))
466 }
467 return links, nil
468}
469
470func (s *composeService) isServiceHealthy(ctx context.Context, containers Containers, fallbackRunning bool) (bool, error) {
471 for _, c := range containers {

Callers 2

getCreateConfigsMethod · 0.95
TestServiceLinksFunction · 0.80

Calls 2

getContainersMethod · 0.95

Tested by 1

TestServiceLinksFunction · 0.64