Signed-off-by: Josh Horwitz <horwitzja@gmail.com>
| ... | ... |
@@ -17,6 +17,7 @@ import ( |
| 17 | 17 |
|
| 18 | 18 |
type psOptions struct {
|
| 19 | 19 |
nodeIDs []string |
| 20 |
+ all bool |
|
| 20 | 21 |
noResolve bool |
| 21 | 22 |
noTrunc bool |
| 22 | 23 |
filter opts.FilterOpt |
| ... | ... |
@@ -43,6 +44,7 @@ func newPsCommand(dockerCli *command.DockerCli) *cobra.Command {
|
| 43 | 43 |
flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output") |
| 44 | 44 |
flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names") |
| 45 | 45 |
flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided") |
| 46 |
+ flags.BoolVarP(&opts.all, "all", "a", false, "Show all tasks (default shows tasks that are or will be running)") |
|
| 46 | 47 |
|
| 47 | 48 |
return cmd |
| 48 | 49 |
} |
| ... | ... |
@@ -72,6 +74,11 @@ func runPs(dockerCli *command.DockerCli, opts psOptions) error {
|
| 72 | 72 |
filter := opts.filter.Value() |
| 73 | 73 |
filter.Add("node", node.ID)
|
| 74 | 74 |
|
| 75 |
+ if !opts.all && !filter.Include("desired-state") {
|
|
| 76 |
+ filter.Add("desired-state", string(swarm.TaskStateRunning))
|
|
| 77 |
+ filter.Add("desired-state", string(swarm.TaskStateAccepted))
|
|
| 78 |
+ } |
|
| 79 |
+ |
|
| 75 | 80 |
nodeTasks, err := client.TaskList(ctx, types.TaskListOptions{Filters: filter})
|
| 76 | 81 |
if err != nil {
|
| 77 | 82 |
errs = append(errs, err.Error()) |
| ... | ... |
@@ -2,6 +2,7 @@ package service |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 | 4 |
"github.com/docker/docker/api/types" |
| 5 |
+ "github.com/docker/docker/api/types/swarm" |
|
| 5 | 6 |
"github.com/docker/docker/cli" |
| 6 | 7 |
"github.com/docker/docker/cli/command" |
| 7 | 8 |
"github.com/docker/docker/cli/command/idresolver" |
| ... | ... |
@@ -14,6 +15,7 @@ import ( |
| 14 | 14 |
|
| 15 | 15 |
type psOptions struct {
|
| 16 | 16 |
serviceID string |
| 17 |
+ all bool |
|
| 17 | 18 |
quiet bool |
| 18 | 19 |
noResolve bool |
| 19 | 20 |
noTrunc bool |
| ... | ... |
@@ -37,6 +39,7 @@ func newPsCommand(dockerCli *command.DockerCli) *cobra.Command {
|
| 37 | 37 |
flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output") |
| 38 | 38 |
flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names") |
| 39 | 39 |
flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided") |
| 40 |
+ flags.BoolVarP(&opts.all, "all", "a", false, "Show all tasks (default shows tasks that are or will be running)") |
|
| 40 | 41 |
|
| 41 | 42 |
return cmd |
| 42 | 43 |
} |
| ... | ... |
@@ -64,6 +67,11 @@ func runPS(dockerCli *command.DockerCli, opts psOptions) error {
|
| 64 | 64 |
} |
| 65 | 65 |
} |
| 66 | 66 |
|
| 67 |
+ if !opts.all && !filter.Include("desired-state") {
|
|
| 68 |
+ filter.Add("desired-state", string(swarm.TaskStateRunning))
|
|
| 69 |
+ filter.Add("desired-state", string(swarm.TaskStateAccepted))
|
|
| 70 |
+ } |
|
| 71 |
+ |
|
| 67 | 72 |
tasks, err := client.TaskList(ctx, types.TaskListOptions{Filters: filter})
|
| 68 | 73 |
if err != nil {
|
| 69 | 74 |
return err |
| ... | ... |
@@ -22,7 +22,7 @@ Usage: docker node ps [OPTIONS] [NODE...] |
| 22 | 22 |
List tasks running on one or more nodes, defaults to current node. |
| 23 | 23 |
|
| 24 | 24 |
Options: |
| 25 |
- -a, --all Display all instances |
|
| 25 |
+ -a, --all Show all tasks (default shows tasks that are or will be running) |
|
| 26 | 26 |
-f, --filter value Filter output based on conditions provided |
| 27 | 27 |
--help Print usage |
| 28 | 28 |
--no-resolve Do not map IDs to Names |
| ... | ... |
@@ -22,6 +22,7 @@ Usage: docker service ps [OPTIONS] SERVICE |
| 22 | 22 |
List the tasks of a service |
| 23 | 23 |
|
| 24 | 24 |
Options: |
| 25 |
+ -a, --all Show all tasks (default shows tasks that are or will be running) |
|
| 25 | 26 |
-f, --filter filter Filter output based on conditions provided |
| 26 | 27 |
--help Print usage |
| 27 | 28 |
--no-resolve Do not map IDs to Names |
| ... | ... |
@@ -203,6 +203,88 @@ func (s *DockerSwarmSuite) TestSwarmNodeTaskListFilter(c *check.C) {
|
| 203 | 203 |
c.Assert(out, checker.Not(checker.Contains), name+".1") |
| 204 | 204 |
c.Assert(out, checker.Not(checker.Contains), name+".2") |
| 205 | 205 |
c.Assert(out, checker.Not(checker.Contains), name+".3") |
| 206 |
+ |
|
| 207 |
+ out, err = d.Cmd("node", "ps", "--filter", "desired-state=running", "self")
|
|
| 208 |
+ c.Assert(err, checker.IsNil) |
|
| 209 |
+ c.Assert(out, checker.Contains, name+".1") |
|
| 210 |
+ c.Assert(out, checker.Contains, name+".2") |
|
| 211 |
+ c.Assert(out, checker.Contains, name+".3") |
|
| 212 |
+ |
|
| 213 |
+ out, err = d.Cmd("node", "ps", "--filter", "desired-state=shutdown", "self")
|
|
| 214 |
+ c.Assert(err, checker.IsNil) |
|
| 215 |
+ c.Assert(out, checker.Not(checker.Contains), name+".1") |
|
| 216 |
+ c.Assert(out, checker.Not(checker.Contains), name+".2") |
|
| 217 |
+ c.Assert(out, checker.Not(checker.Contains), name+".3") |
|
| 218 |
+} |
|
| 219 |
+ |
|
| 220 |
+func (s *DockerSwarmSuite) TestSwarmServiceTaskListAll(c *check.C) {
|
|
| 221 |
+ d := s.AddDaemon(c, true, true) |
|
| 222 |
+ |
|
| 223 |
+ name := "service-task-list-1" |
|
| 224 |
+ out, err := d.Cmd("service", "create", "--name", name, "--replicas=3", "busybox", "top")
|
|
| 225 |
+ c.Assert(err, checker.IsNil) |
|
| 226 |
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Equals), "") |
|
| 227 |
+ |
|
| 228 |
+ // make sure task has been deployed. |
|
| 229 |
+ waitAndAssert(c, defaultReconciliationTimeout, d.checkActiveContainerCount, checker.Equals, 3) |
|
| 230 |
+ |
|
| 231 |
+ out, err = d.Cmd("service", "ps", name)
|
|
| 232 |
+ c.Assert(err, checker.IsNil) |
|
| 233 |
+ c.Assert(out, checker.Contains, name+".1") |
|
| 234 |
+ c.Assert(out, checker.Contains, name+".2") |
|
| 235 |
+ c.Assert(out, checker.Contains, name+".3") |
|
| 236 |
+ |
|
| 237 |
+ // Get the last container id so we can restart it to cause a task error in the history |
|
| 238 |
+ containerID, err := d.Cmd("ps", "-q", "-l")
|
|
| 239 |
+ c.Assert(err, checker.IsNil) |
|
| 240 |
+ |
|
| 241 |
+ _, err = d.Cmd("stop", strings.TrimSpace(containerID))
|
|
| 242 |
+ c.Assert(err, checker.IsNil) |
|
| 243 |
+ |
|
| 244 |
+ waitAndAssert(c, defaultReconciliationTimeout, d.checkActiveContainerCount, checker.Equals, 3) |
|
| 245 |
+ |
|
| 246 |
+ out, err = d.Cmd("service", "ps", name)
|
|
| 247 |
+ c.Assert(err, checker.IsNil) |
|
| 248 |
+ c.Assert(out, checker.Count, name, 3) |
|
| 249 |
+ |
|
| 250 |
+ out, err = d.Cmd("service", "ps", name, "-a")
|
|
| 251 |
+ c.Assert(err, checker.IsNil) |
|
| 252 |
+ c.Assert(out, checker.Count, name, 4) |
|
| 253 |
+} |
|
| 254 |
+ |
|
| 255 |
+func (s *DockerSwarmSuite) TestSwarmNodeTaskListAll(c *check.C) {
|
|
| 256 |
+ d := s.AddDaemon(c, true, true) |
|
| 257 |
+ |
|
| 258 |
+ name := "node-task-list" |
|
| 259 |
+ out, err := d.Cmd("service", "create", "--name", name, "--replicas=3", "busybox", "top")
|
|
| 260 |
+ c.Assert(err, checker.IsNil) |
|
| 261 |
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Equals), "") |
|
| 262 |
+ |
|
| 263 |
+ // make sure task has been deployed. |
|
| 264 |
+ waitAndAssert(c, defaultReconciliationTimeout, d.checkActiveContainerCount, checker.Equals, 3) |
|
| 265 |
+ |
|
| 266 |
+ out, err = d.Cmd("service", "ps", name)
|
|
| 267 |
+ c.Assert(err, checker.IsNil) |
|
| 268 |
+ c.Assert(out, checker.Contains, name+".1") |
|
| 269 |
+ c.Assert(out, checker.Contains, name+".2") |
|
| 270 |
+ c.Assert(out, checker.Contains, name+".3") |
|
| 271 |
+ |
|
| 272 |
+ // Get the last container id so we can restart it to cause a task error in the history |
|
| 273 |
+ containerID, err := d.Cmd("ps", "-q", "-l")
|
|
| 274 |
+ c.Assert(err, checker.IsNil) |
|
| 275 |
+ |
|
| 276 |
+ _, err = d.Cmd("stop", strings.TrimSpace(containerID))
|
|
| 277 |
+ c.Assert(err, checker.IsNil) |
|
| 278 |
+ |
|
| 279 |
+ waitAndAssert(c, defaultReconciliationTimeout, d.checkActiveContainerCount, checker.Equals, 3) |
|
| 280 |
+ |
|
| 281 |
+ out, err = d.Cmd("node", "ps", "self")
|
|
| 282 |
+ c.Assert(err, checker.IsNil) |
|
| 283 |
+ c.Assert(out, checker.Count, name, 3) |
|
| 284 |
+ |
|
| 285 |
+ out, err = d.Cmd("node", "ps", "self", "-a")
|
|
| 286 |
+ c.Assert(err, checker.IsNil) |
|
| 287 |
+ c.Assert(out, checker.Count, name, 4) |
|
| 206 | 288 |
} |
| 207 | 289 |
|
| 208 | 290 |
// Test case for #25375 |