github.com/portworx/docker@v1.12.1/api/client/service/ps.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/node" 9 "github.com/docker/docker/api/client/task" 10 "github.com/docker/docker/cli" 11 "github.com/docker/docker/opts" 12 "github.com/docker/engine-api/types" 13 "github.com/spf13/cobra" 14 ) 15 16 type psOptions struct { 17 serviceID string 18 noResolve bool 19 filter opts.FilterOpt 20 } 21 22 func newPSCommand(dockerCli *client.DockerCli) *cobra.Command { 23 opts := psOptions{filter: opts.NewFilterOpt()} 24 25 cmd := &cobra.Command{ 26 Use: "ps [OPTIONS] SERVICE", 27 Short: "List the tasks of a service", 28 Args: cli.ExactArgs(1), 29 RunE: func(cmd *cobra.Command, args []string) error { 30 opts.serviceID = args[0] 31 return runPS(dockerCli, opts) 32 }, 33 } 34 flags := cmd.Flags() 35 flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names") 36 flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided") 37 38 return cmd 39 } 40 41 func runPS(dockerCli *client.DockerCli, opts psOptions) error { 42 client := dockerCli.Client() 43 ctx := context.Background() 44 45 service, _, err := client.ServiceInspectWithRaw(ctx, opts.serviceID) 46 if err != nil { 47 return err 48 } 49 50 filter := opts.filter.Value() 51 filter.Add("service", service.ID) 52 if filter.Include("node") { 53 nodeFilters := filter.Get("node") 54 for _, nodeFilter := range nodeFilters { 55 nodeReference, err := node.Reference(client, ctx, nodeFilter) 56 if err != nil { 57 return err 58 } 59 filter.Del("node", nodeFilter) 60 filter.Add("node", nodeReference) 61 } 62 } 63 64 tasks, err := client.TaskList(ctx, types.TaskListOptions{Filter: filter}) 65 if err != nil { 66 return err 67 } 68 69 return task.Print(dockerCli, ctx, tasks, idresolver.New(client, opts.noResolve)) 70 }