diff --git a/docs/source/markdown/podman-ps.1.md b/docs/source/markdown/podman-ps.1.md index 3b5a2a5084..c56aa10cb2 100644 --- a/docs/source/markdown/podman-ps.1.md +++ b/docs/source/markdown/podman-ps.1.md @@ -52,7 +52,7 @@ Valid filters are listed below: | label | [Key] or [Key=Value] Label assigned to a container | | exited | [Int] Container's exit code | | status | [Status] Container's status: 'created', 'exited', 'paused', 'running', 'unknown' | -| ancestor | [ImageName] Image or descendant used to create container | +| ancestor | [ImageName] Image or descendant used to create container (accepts regex) | | before | [ID] or [Name] Containers created before this container | | since | [ID] or [Name] Containers created since this container | | volume | [VolumeName] or [MountpointDestination] Volume mounted in container | diff --git a/pkg/domain/filters/containers.go b/pkg/domain/filters/containers.go index 917f5d61bf..137f3da524 100644 --- a/pkg/domain/filters/containers.go +++ b/pkg/domain/filters/containers.go @@ -96,8 +96,8 @@ func GenerateContainerFilterFuncs(filter string, filterValues []string, r *libpo } if (rootfsImageID == filterValue) || - (rootfsImageName == filterValue) || - (imageNameWithoutTag == filterValue && imageTag == "latest") { + util.StringMatchRegexSlice(rootfsImageName, filterValues) || + (util.StringMatchRegexSlice(imageNameWithoutTag, filterValues) && imageTag == "latest") { return true } } diff --git a/test/e2e/ps_test.go b/test/e2e/ps_test.go index bf5a0dfda3..558d07d138 100644 --- a/test/e2e/ps_test.go +++ b/test/e2e/ps_test.go @@ -313,10 +313,22 @@ var _ = Describe("Podman ps", func() { Expect(result).Should(Exit(0)) Expect(result.OutputToString()).To(Equal(cid)) - // Query by truncated image name should not match ( should return empty output ) + // Query by truncated image name should match (regexp match) result = podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "-a", "--filter", "ancestor=quay.io/libpod/alpi"}) result.WaitWithDefaultTimeout() Expect(result).Should(Exit(0)) + Expect(result.OutputToString()).To(Equal(cid)) + + // Query using regex by truncated image name should match (regexp match) + result = podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "-a", "--filter", "ancestor=^(quay.io|docker.io)/libpod/alpine:[a-zA-Z]+"}) + result.WaitWithDefaultTimeout() + Expect(result).Should(Exit(0)) + Expect(result.OutputToString()).To(Equal(cid)) + + // Query for an non-existing image using regex should not match anything + result = podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "-a", "--filter", "ancestor=^quai.io/libpod/alpi"}) + result.WaitWithDefaultTimeout() + Expect(result).Should(Exit(0)) Expect(result.OutputToString()).To(Equal("")) })