ps.go 1.6 KB

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