12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // Package naming centralizes the naming of SwarmKit objects.
- package naming
- import (
- "errors"
- "fmt"
- "strings"
- "github.com/docker/swarmkit/api"
- )
- var (
- errUnknownRuntime = errors.New("unrecognized runtime")
- )
- // Task returns the task name from Annotations.Name,
- // and, in case Annotations.Name is missing, fallback
- // to construct the name from other information.
- func Task(t *api.Task) string {
- if t.Annotations.Name != "" {
- // if set, use the container Annotations.Name field, set in the orchestrator.
- return t.Annotations.Name
- }
- slot := fmt.Sprint(t.Slot)
- if slot == "" || t.Slot == 0 {
- // when no slot id is assigned, we assume that this is node-bound task.
- slot = t.NodeID
- }
- // fallback to service.instance.id.
- return fmt.Sprintf("%s.%s.%s", t.ServiceAnnotations.Name, slot, t.ID)
- }
- // TODO(stevvooe): Consolidate "Hostname" style validation here.
- // Runtime returns the runtime name from a given spec.
- func Runtime(t api.TaskSpec) (string, error) {
- switch r := t.GetRuntime().(type) {
- case *api.TaskSpec_Attachment:
- return "attachment", nil
- case *api.TaskSpec_Container:
- return "container", nil
- case *api.TaskSpec_Generic:
- return strings.ToLower(r.Generic.Kind), nil
- default:
- return "", errUnknownRuntime
- }
- }
|