ps.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. noTrunc bool
  16. filter opts.FilterOpt
  17. }
  18. func newPsCommand(dockerCli *client.DockerCli) *cobra.Command {
  19. opts := psOptions{filter: opts.NewFilterOpt()}
  20. cmd := &cobra.Command{
  21. Use: "ps [OPTIONS] [NODE]",
  22. Short: "List tasks running on a node, defaults to current node",
  23. Args: cli.RequiresRangeArgs(0, 1),
  24. RunE: func(cmd *cobra.Command, args []string) error {
  25. opts.nodeID = "self"
  26. if len(args) != 0 {
  27. opts.nodeID = args[0]
  28. }
  29. return runPs(dockerCli, opts)
  30. },
  31. }
  32. flags := cmd.Flags()
  33. flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output")
  34. flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names")
  35. flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided")
  36. return cmd
  37. }
  38. func runPs(dockerCli *client.DockerCli, opts psOptions) error {
  39. client := dockerCli.Client()
  40. ctx := context.Background()
  41. nodeRef, err := Reference(client, ctx, opts.nodeID)
  42. if err != nil {
  43. return nil
  44. }
  45. node, _, err := client.NodeInspectWithRaw(ctx, nodeRef)
  46. if err != nil {
  47. return err
  48. }
  49. filter := opts.filter.Value()
  50. filter.Add("node", node.ID)
  51. tasks, err := client.TaskList(
  52. ctx,
  53. types.TaskListOptions{Filter: filter})
  54. if err != nil {
  55. return err
  56. }
  57. return task.Print(dockerCli, ctx, tasks, idresolver.New(client, opts.noResolve), opts.noTrunc)
  58. }