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