github.com/kobeld/docker@v1.12.0-rc1/api/client/node/tasks.go (about) 1 package node 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 nodeID 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] self|NODE", 28 Short: "List tasks running on a node", 29 Args: cli.ExactArgs(1), 30 RunE: func(cmd *cobra.Command, args []string) error { 31 opts.nodeID = args[0] 32 return runTasks(dockerCli, opts) 33 }, 34 } 35 flags := cmd.Flags() 36 flags.BoolVarP(&opts.all, "all", "a", false, "Display all instances") 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 nodeRef, err := nodeReference(client, ctx, opts.nodeID) 48 if err != nil { 49 return nil 50 } 51 node, err := client.NodeInspect(ctx, nodeRef) 52 if err != nil { 53 return err 54 } 55 56 filter := opts.filter.Value() 57 filter.Add("node", node.ID) 58 if !opts.all { 59 filter.Add("desired_state", string(swarm.TaskStateRunning)) 60 filter.Add("desired_state", string(swarm.TaskStateAccepted)) 61 62 } 63 64 tasks, err := client.TaskList( 65 ctx, 66 types.TaskListOptions{Filter: filter}) 67 if err != nil { 68 return err 69 } 70 71 return task.Print(dockerCli, ctx, tasks, idresolver.New(client, opts.noResolve)) 72 }