github.com/kobeld/docker@v1.12.0-rc1/api/client/stack/tasks.go (about) 1 // +build experimental 2 3 package stack 4 5 import ( 6 "golang.org/x/net/context" 7 8 "github.com/docker/docker/api/client" 9 "github.com/docker/docker/api/client/idresolver" 10 "github.com/docker/docker/api/client/task" 11 "github.com/docker/docker/cli" 12 "github.com/docker/docker/opts" 13 "github.com/docker/engine-api/types" 14 "github.com/docker/engine-api/types/swarm" 15 "github.com/spf13/cobra" 16 ) 17 18 type tasksOptions struct { 19 all bool 20 filter opts.FilterOpt 21 namespace string 22 noResolve bool 23 } 24 25 func newTasksCommand(dockerCli *client.DockerCli) *cobra.Command { 26 opts := tasksOptions{filter: opts.NewFilterOpt()} 27 28 cmd := &cobra.Command{ 29 Use: "tasks [OPTIONS] STACK", 30 Short: "List the tasks in the stack", 31 Args: cli.ExactArgs(1), 32 RunE: func(cmd *cobra.Command, args []string) error { 33 opts.namespace = args[0] 34 return runTasks(dockerCli, opts) 35 }, 36 } 37 flags := cmd.Flags() 38 flags.BoolVarP(&opts.all, "all", "a", false, "Display all tasks") 39 flags.BoolVarP(&opts.noResolve, "no-resolve", "n", false, "Do not map IDs to Names") 40 flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided") 41 42 return cmd 43 } 44 45 func runTasks(dockerCli *client.DockerCli, opts tasksOptions) error { 46 client := dockerCli.Client() 47 ctx := context.Background() 48 49 filter := opts.filter.Value() 50 filter.Add("label", labelNamespace+"="+opts.namespace) 51 if !opts.all && !filter.Include("desired_state") { 52 filter.Add("desired_state", string(swarm.TaskStateRunning)) 53 filter.Add("desired_state", string(swarm.TaskStateAccepted)) 54 } 55 56 tasks, err := client.TaskList(ctx, types.TaskListOptions{Filter: filter}) 57 if err != nil { 58 return err 59 } 60 61 return task.Print(dockerCli, ctx, tasks, idresolver.New(client, opts.noResolve)) 62 }