mirror of
https://github.com/containers/podman.git
synced 2025-05-20 08:36:23 +08:00
Use Regexp in volume ls --filter name
Signed-off-by: Boaz Shuster <boaz.shuster.github@gmail.com>
This commit is contained in:
@ -2,6 +2,7 @@ package filters
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containers/podman/v4/libpod"
|
"github.com/containers/podman/v4/libpod"
|
||||||
@ -15,9 +16,12 @@ func GenerateVolumeFilters(filters url.Values) ([]libpod.VolumeFilter, error) {
|
|||||||
for _, val := range v {
|
for _, val := range v {
|
||||||
switch filter {
|
switch filter {
|
||||||
case "name":
|
case "name":
|
||||||
nameVal := val
|
nameRegexp, err := regexp.Compile(val)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
vf = append(vf, func(v *libpod.Volume) bool {
|
vf = append(vf, func(v *libpod.Volume) bool {
|
||||||
return nameVal == v.Name()
|
return nameRegexp.MatchString(v.Name())
|
||||||
})
|
})
|
||||||
case "driver":
|
case "driver":
|
||||||
driverVal := val
|
driverVal := val
|
||||||
|
@ -152,6 +152,37 @@ var _ = Describe("Podman volume ls", func() {
|
|||||||
Expect(lsDangling).Should(Exit(0))
|
Expect(lsDangling).Should(Exit(0))
|
||||||
Expect(lsDangling.OutputToString()).To(ContainSubstring(volName1))
|
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() {
|
It("podman ls volume with multiple --filter flag", func() {
|
||||||
session := podmanTest.Podman([]string{"volume", "create", "--label", "foo=bar", "myvol"})
|
session := podmanTest.Podman([]string{"volume", "create", "--label", "foo=bar", "myvol"})
|
||||||
volName := session.OutputToString()
|
volName := session.OutputToString()
|
||||||
|
@ -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
|
# Named volumes
|
||||||
@test "podman volume create / run" {
|
@test "podman volume create / run" {
|
||||||
myvolume=myvol$(random_string)
|
myvolume=myvol$(random_string)
|
||||||
|
Reference in New Issue
Block a user