Use Regexp in volume ls --filter name

Signed-off-by: Boaz Shuster <boaz.shuster.github@gmail.com>
This commit is contained in:
Boaz Shuster
2022-06-15 12:40:11 +03:00
parent 9c4b8a29b0
commit 3b10c1b78a
3 changed files with 60 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package filters
import (
"net/url"
"regexp"
"strings"
"github.com/containers/podman/v4/libpod"
@ -15,9 +16,12 @@ func GenerateVolumeFilters(filters url.Values) ([]libpod.VolumeFilter, error) {
for _, val := range v {
switch filter {
case "name":
nameVal := val
nameRegexp, err := regexp.Compile(val)
if err != nil {
return nil, err
}
vf = append(vf, func(v *libpod.Volume) bool {
return nameVal == v.Name()
return nameRegexp.MatchString(v.Name())
})
case "driver":
driverVal := val

View File

@ -152,6 +152,37 @@ var _ = Describe("Podman volume ls", func() {
Expect(lsDangling).Should(Exit(0))
Expect(lsDangling.OutputToString()).To(ContainSubstring(volName1))
})
It("podman ls volume with --filter name", func() {
volName1 := "volume1"
session := podmanTest.Podman([]string{"volume", "create", volName1})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
volName2 := "volume2"
session2 := podmanTest.Podman([]string{"volume", "create", volName2})
session2.WaitWithDefaultTimeout()
Expect(session2).Should(Exit(0))
session = podmanTest.Podman([]string{"volume", "ls", "--filter", "name=volume1*"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
Expect(session.OutputToStringArray()).To(HaveLen(3))
Expect(session.OutputToStringArray()[1]).To(ContainSubstring(volName1))
Expect(session.OutputToStringArray()[2]).To(ContainSubstring(volName2))
session = podmanTest.Podman([]string{"volume", "ls", "--filter", "name=volumex"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
Expect(session.OutputToStringArray()).To(BeEmpty())
session = podmanTest.Podman([]string{"volume", "ls", "--filter", "name=volume1"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
Expect(session.OutputToStringArray()).To(HaveLen(2))
Expect(session.OutputToStringArray()[1]).To(ContainSubstring(volName1))
})
It("podman ls volume with multiple --filter flag", func() {
session := podmanTest.Podman([]string{"volume", "create", "--label", "foo=bar", "myvol"})
volName := session.OutputToString()

View File

@ -64,6 +64,29 @@ function teardown() {
}
# Filter volumes by name
@test "podman volume filter --name" {
suffix=$(random_string)
prefix="volume"
for i in 1 2; do
myvolume=${prefix}_${i}_${suffix}
run_podman volume create $myvolume
is "$output" "$myvolume" "output from volume create $i"
done
run_podman volume ls --filter name=${prefix}_1.+ --format "{{.Name}}"
is "$output" "${prefix}_1_${suffix}" "--filter name=${prefix}_1.+ shows only one volume"
# The _1* is intentional as asterisk has different meaning in glob and regexp. Make sure this is regexp
run_podman volume ls --filter name=${prefix}_1* --format "{{.Name}}"
is "$output" "${prefix}_1_${suffix}.*${prefix}_2_${suffix}.*" "--filter name=${prefix}_1* shows ${prefix}_1_${suffix} and ${prefix}_2_${suffix}"
for i in 1 2; do
run_podman volume rm ${prefix}_${i}_${suffix}
done
}
# Named volumes
@test "podman volume create / run" {
myvolume=myvol$(random_string)