github.com/kim0/docker@v0.6.2-0.20161130212042-4addda3f07e7/cli/command/stack/ps.go (about) 1 package stack 2 3 import ( 4 "fmt" 5 6 "golang.org/x/net/context" 7 8 "github.com/docker/docker/api/types" 9 "github.com/docker/docker/api/types/swarm" 10 "github.com/docker/docker/cli" 11 "github.com/docker/docker/cli/command" 12 "github.com/docker/docker/cli/command/idresolver" 13 "github.com/docker/docker/cli/command/task" 14 "github.com/docker/docker/opts" 15 "github.com/spf13/cobra" 16 ) 17 18 type psOptions struct { 19 all bool 20 filter opts.FilterOpt 21 noTrunc bool 22 namespace string 23 noResolve bool 24 } 25 26 func newPsCommand(dockerCli *command.DockerCli) *cobra.Command { 27 opts := psOptions{filter: opts.NewFilterOpt()} 28 29 cmd := &cobra.Command{ 30 Use: "ps [OPTIONS] STACK", 31 Short: "List the tasks in the stack", 32 Args: cli.ExactArgs(1), 33 RunE: func(cmd *cobra.Command, args []string) error { 34 opts.namespace = args[0] 35 return runPS(dockerCli, opts) 36 }, 37 } 38 flags := cmd.Flags() 39 flags.BoolVarP(&opts.all, "all", "a", false, "Display all tasks") 40 flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output") 41 flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names") 42 flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided") 43 44 return cmd 45 } 46 47 func runPS(dockerCli *command.DockerCli, opts psOptions) error { 48 namespace := opts.namespace 49 client := dockerCli.Client() 50 ctx := context.Background() 51 52 filter := opts.filter.Value() 53 filter.Add("label", labelNamespace+"="+opts.namespace) 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 if len(tasks) == 0 { 65 fmt.Fprintf(dockerCli.Out(), "Nothing found in stack: %s\n", namespace) 66 return nil 67 } 68 69 return task.Print(dockerCli, ctx, tasks, idresolver.New(client, opts.noResolve), opts.noTrunc) 70 }