// Package naming centralizes the container/VM naming convention shared by the // agent (which creates and reconciles containers) and the monitor (which looks // them up by name). Keeping it in one place prevents the two from disagreeing. package naming import "strings" // ContainerNameFor returns the expected container (or unikernel VM) name for a // service and component. For single-component services where the component // name equals the service name, the name is just the service name (e.g., // "mc-proxy" not "mc-proxy-mc-proxy"). func ContainerNameFor(service, component string) string { if service == component { return service } return service + "-" + component } // SplitContainerName splits a container name into service and component parts. // It checks known service names first to handle names like "mc-proxy" where a // naive split on "-" would produce the wrong result. If no known service // matches, it falls back to splitting on the first "-". func SplitContainerName(name string, knownServices map[string]bool) (service, component string) { if knownServices[name] { return name, name } for svc := range knownServices { prefix := svc + "-" if strings.HasPrefix(name, prefix) && len(name) > len(prefix) { return svc, name[len(prefix):] } } if i := strings.Index(name, "-"); i >= 0 { return name[:i], name[i+1:] } return name, name }