github.com/openshift/moby-moby@v1.13.2-0.20170601211448-f5ec1e2936dc/cli/command/service/ps.go (about) 1 package service 2 3 import ( 4 "github.com/docker/docker/api/types" 5 "github.com/docker/docker/cli" 6 "github.com/docker/docker/cli/command" 7 "github.com/docker/docker/cli/command/idresolver" 8 "github.com/docker/docker/cli/command/node" 9 "github.com/docker/docker/cli/command/task" 10 "github.com/docker/docker/opts" 11 "github.com/spf13/cobra" 12 "golang.org/x/net/context" 13 ) 14 15 type psOptions struct { 16 serviceID string 17 quiet bool 18 noResolve bool 19 noTrunc bool 20 filter opts.FilterOpt 21 } 22 23 func newPsCommand(dockerCli *command.DockerCli) *cobra.Command { 24 opts := psOptions{filter: opts.NewFilterOpt()} 25 26 cmd := &cobra.Command{ 27 Use: "ps [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 runPS(dockerCli, opts) 33 }, 34 } 35 flags := cmd.Flags() 36 flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Only display task IDs") 37 flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output") 38 flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names") 39 flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided") 40 41 return cmd 42 } 43 44 func runPS(dockerCli *command.DockerCli, opts psOptions) error { 45 client := dockerCli.Client() 46 ctx := context.Background() 47 48 service, _, err := client.ServiceInspectWithRaw(ctx, opts.serviceID) 49 if err != nil { 50 return err 51 } 52 53 filter := opts.filter.Value() 54 filter.Add("service", service.ID) 55 if filter.Include("node") { 56 nodeFilters := filter.Get("node") 57 for _, nodeFilter := range nodeFilters { 58 nodeReference, err := node.Reference(ctx, client, nodeFilter) 59 if err != nil { 60 return err 61 } 62 filter.Del("node", nodeFilter) 63 filter.Add("node", nodeReference) 64 } 65 } 66 67 tasks, err := client.TaskList(ctx, types.TaskListOptions{Filters: filter}) 68 if err != nil { 69 return err 70 } 71 72 if opts.quiet { 73 return task.PrintQuiet(dockerCli, tasks) 74 } 75 return task.Print(dockerCli, ctx, tasks, idresolver.New(client, opts.noResolve), opts.noTrunc) 76 }