ps.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package node
  2. import (
  3. "golang.org/x/net/context"
  4. "github.com/docker/docker/api/client"
  5. "github.com/docker/docker/api/client/idresolver"
  6. "github.com/docker/docker/api/client/task"
  7. "github.com/docker/docker/cli"
  8. "github.com/docker/docker/opts"
  9. "github.com/docker/engine-api/types"
  10. "github.com/spf13/cobra"
  11. )
  12. type psOptions struct {
  13. nodeID string
  14. noResolve bool
  15. filter opts.FilterOpt
  16. }
  17. func newPSCommand(dockerCli *client.DockerCli) *cobra.Command {
  18. opts := psOptions{filter: opts.NewFilterOpt()}
  19. cmd := &cobra.Command{
  20. Use: "ps [OPTIONS] self|NODE",
  21. Short: "List tasks running on a node",
  22. Args: cli.ExactArgs(1),
  23. RunE: func(cmd *cobra.Command, args []string) error {
  24. opts.nodeID = args[0]
  25. return runPS(dockerCli, opts)
  26. },
  27. }
  28. flags := cmd.Flags()
  29. flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names")
  30. flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided")
  31. return cmd
  32. }
  33. func runPS(dockerCli *client.DockerCli, opts psOptions) error {
  34. client := dockerCli.Client()
  35. ctx := context.Background()
  36. nodeRef, err := Reference(client, ctx, opts.nodeID)
  37. if err != nil {
  38. return nil
  39. }
  40. node, _, err := client.NodeInspectWithRaw(ctx, nodeRef)
  41. if err != nil {
  42. return err
  43. }
  44. filter := opts.filter.Value()
  45. filter.Add("node", node.ID)
  46. tasks, err := client.TaskList(
  47. ctx,
  48. types.TaskListOptions{Filter: filter})
  49. if err != nil {
  50. return err
  51. }
  52. return task.Print(dockerCli, ctx, tasks, idresolver.New(client, opts.noResolve))
  53. }