From 1d7fc30a8e8b967df693439b1b0a27904f65943d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doma=C5=84ski?= Date: Thu, 15 Oct 2015 13:04:13 +0200 Subject: [PATCH 1/2] allow filtering containers by any status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kamil DomaƄski (cherry picked from commit 9ada6a06c57ce4ed4bfad50f603962b7b9ce6fb1) Upstream-commit: f30364c5835452598e58781f360681f2d77fa16c Component: engine --- components/engine/daemon/list.go | 5 ++--- .../engine/docs/reference/api/docker_remote_api_v1.22.md | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/components/engine/daemon/list.go b/components/engine/daemon/list.go index b91e69a7f7..5be864a7cf 100644 --- a/components/engine/daemon/list.go +++ b/components/engine/daemon/list.go @@ -150,9 +150,8 @@ func (daemon *Daemon) foldFilter(config *ContainersConfig) (*listContext, error) if !isValidStateString(value) { return nil, errors.New("Unrecognised filter value for status") } - if value == "exited" || value == "created" { - config.All = true - } + + config.All = true } } diff --git a/components/engine/docs/reference/api/docker_remote_api_v1.22.md b/components/engine/docs/reference/api/docker_remote_api_v1.22.md index fee0842966..fc8e37d634 100644 --- a/components/engine/docs/reference/api/docker_remote_api_v1.22.md +++ b/components/engine/docs/reference/api/docker_remote_api_v1.22.md @@ -114,7 +114,7 @@ Query Parameters: sizes - **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - `exited=`; -- containers with exit code of `` ; - - `status=`(`created`|`restarting`|`running`|`paused`|`exited`) + - `status=`(`created`|`restarting`|`running`|`paused`|`exited`|`dead`) - `label=key` or `label="key=value"` of a container label - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) From 9c09b9b37ac8ca888c10d7b8845e6dafc92efc3c Mon Sep 17 00:00:00 2001 From: David Calavera Date: Wed, 11 Nov 2015 12:51:36 -0500 Subject: [PATCH 2/2] Test that paused containers show up filtering by status. Signed-off-by: David Calavera Upstream-commit: 2a07b19fd8fd402b4ec7b7814f85d099c8b8efca Component: engine --- .../integration-cli/docker_cli_ps_test.go | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/components/engine/integration-cli/docker_cli_ps_test.go b/components/engine/integration-cli/docker_cli_ps_test.go index 3c621511a1..906fcea4ef 100644 --- a/components/engine/integration-cli/docker_cli_ps_test.go +++ b/components/engine/integration-cli/docker_cli_ps_test.go @@ -168,14 +168,12 @@ func (s *DockerSuite) TestPsListContainersSize(c *check.C) { func (s *DockerSuite) TestPsListContainersFilterStatus(c *check.C) { testRequires(c, DaemonIsLinux) - // FIXME: this should test paused, but it makes things hang and its wonky - // this is because paused containers can't be controlled by signals // start exited container out, _ := dockerCmd(c, "run", "-d", "busybox") firstID := strings.TrimSpace(out) - // make sure the exited cintainer is not running + // make sure the exited container is not running dockerCmd(c, "wait", firstID) // start running container @@ -183,17 +181,27 @@ func (s *DockerSuite) TestPsListContainersFilterStatus(c *check.C) { secondID := strings.TrimSpace(out) // filter containers by exited - out, _ = dockerCmd(c, "ps", "-q", "--filter=status=exited") + out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter=status=exited") containerOut := strings.TrimSpace(out) - c.Assert(containerOut, checker.Equals, firstID[:12], check.Commentf("Expected id %s, got %s for exited filter, output: %q", firstID[:12], containerOut, out)) + c.Assert(containerOut, checker.Equals, firstID) - out, _ = dockerCmd(c, "ps", "-a", "-q", "--filter=status=running") + out, _ = dockerCmd(c, "ps", "-a", "--no-trunc", "-q", "--filter=status=running") containerOut = strings.TrimSpace(out) - c.Assert(containerOut, checker.Equals, secondID[:12], check.Commentf("Expected id %s, got %s for running filter, output: %q", secondID[:12], containerOut, out)) + c.Assert(containerOut, checker.Equals, secondID) out, _, _ = dockerCmdWithTimeout(time.Second*60, "ps", "-a", "-q", "--filter=status=rubbish") c.Assert(out, checker.Contains, "Unrecognised filter value for status", check.Commentf("Expected error response due to invalid status filter output: %q", out)) + // pause running container + out, _ = dockerCmd(c, "run", "-itd", "busybox") + pausedID := strings.TrimSpace(out) + dockerCmd(c, "pause", pausedID) + // make sure the container is unpaused to let the daemon stop it properly + defer func() { dockerCmd(c, "unpause", pausedID) }() + + out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter=status=paused") + containerOut = strings.TrimSpace(out) + c.Assert(containerOut, checker.Equals, pausedID) } func (s *DockerSuite) TestPsListContainersFilterID(c *check.C) {