func (c *containerConfig) labels() map[string]string { var ( system = map[string]string{ "task": "", // mark as cluster task "task.id": c.task.ID, "task.name": naming.Task(c.task), "node.id": c.task.NodeID, "service.id": c.task.ServiceID, "service.name": c.task.ServiceAnnotations.Name, } labels = make(map[string]string) ) // base labels are those defined in the spec. for k, v := range c.spec().Labels { labels[k] = v } // we then apply the overrides from the task, which may be set via the // orchestrator. for k, v := range c.task.Annotations.Labels { labels[k] = v } // finally, we apply the system labels, which override all labels. for k, v := range system { labels[strings.Join([]string{systemLabelPrefix, k}, ".")] = v } return labels }
func (ti taskIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { t, ok := obj.(taskEntry) if !ok { panic("unexpected type passed to FromObject") } name := naming.Task(t.Task) // Add the null character as a terminator return true, []byte(strings.ToLower(name) + "\x00"), nil }
// NewContextFromTask returns a new template context from the data available in // task. The provided context can then be used to populate runtime values in a // ContainerSpec. func NewContextFromTask(t *api.Task) (ctx Context) { ctx.Service.ID = t.ServiceID ctx.Service.Name = t.ServiceAnnotations.Name ctx.Service.Labels = t.ServiceAnnotations.Labels ctx.Node.ID = t.NodeID ctx.Task.ID = t.ID ctx.Task.Name = naming.Task(t) if t.Slot != 0 { ctx.Task.Slot = fmt.Sprint(t.Slot) } else { // fall back to node id for slot when there is no slot ctx.Task.Slot = t.NodeID } return }
// ListTasks returns a list of all tasks. func (s *Server) ListTasks(ctx context.Context, request *api.ListTasksRequest) (*api.ListTasksResponse, error) { var ( tasks []*api.Task err error ) s.store.View(func(tx store.ReadTx) { switch { case request.Filters != nil && len(request.Filters.Names) > 0: tasks, err = store.FindTasks(tx, buildFilters(store.ByName, request.Filters.Names)) case request.Filters != nil && len(request.Filters.NamePrefixes) > 0: tasks, err = store.FindTasks(tx, buildFilters(store.ByNamePrefix, request.Filters.NamePrefixes)) case request.Filters != nil && len(request.Filters.IDPrefixes) > 0: tasks, err = store.FindTasks(tx, buildFilters(store.ByIDPrefix, request.Filters.IDPrefixes)) case request.Filters != nil && len(request.Filters.ServiceIDs) > 0: tasks, err = store.FindTasks(tx, buildFilters(store.ByServiceID, request.Filters.ServiceIDs)) case request.Filters != nil && len(request.Filters.NodeIDs) > 0: tasks, err = store.FindTasks(tx, buildFilters(store.ByNodeID, request.Filters.NodeIDs)) case request.Filters != nil && len(request.Filters.DesiredStates) > 0: filters := make([]store.By, 0, len(request.Filters.DesiredStates)) for _, v := range request.Filters.DesiredStates { filters = append(filters, store.ByDesiredState(v)) } tasks, err = store.FindTasks(tx, store.Or(filters...)) default: tasks, err = store.FindTasks(tx, store.All) } }) if err != nil { return nil, err } if request.Filters != nil { tasks = filterTasks(tasks, func(e *api.Task) bool { return filterContains(naming.Task(e), request.Filters.Names) }, func(e *api.Task) bool { return filterContainsPrefix(naming.Task(e), request.Filters.NamePrefixes) }, func(e *api.Task) bool { return filterContainsPrefix(e.ID, request.Filters.IDPrefixes) }, func(e *api.Task) bool { return filterMatchLabels(e.ServiceAnnotations.Labels, request.Filters.Labels) }, func(e *api.Task) bool { return filterContains(e.ServiceID, request.Filters.ServiceIDs) }, func(e *api.Task) bool { return filterContains(e.NodeID, request.Filters.NodeIDs) }, func(e *api.Task) bool { if len(request.Filters.DesiredStates) == 0 { return true } for _, c := range request.Filters.DesiredStates { if c == e.DesiredState { return true } } return false }, ) } return &api.ListTasksResponse{ Tasks: tasks, }, nil }
func (c *containerConfig) name() string { return naming.Task(c.task) }