mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Make volume ls output order
Fixes: #20384 Add order support for volume ls to make it easy to external users to consume. Signed-off-by: Kai Qiang Wu(Kennan) <wkqwu@cn.ibm.com>
This commit is contained in:
parent
2a9e6ace70
commit
60ffd6c880
2 changed files with 31 additions and 6 deletions
|
@ -2,6 +2,7 @@ package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
|
|
||||||
Cli "github.com/docker/docker/cli"
|
Cli "github.com/docker/docker/cli"
|
||||||
|
@ -72,6 +73,7 @@ func (cli *DockerCli) CmdVolumeLs(args ...string) error {
|
||||||
fmt.Fprintf(w, "\n")
|
fmt.Fprintf(w, "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sort.Sort(byVolumeName(volumes.Volumes))
|
||||||
for _, vol := range volumes.Volumes {
|
for _, vol := range volumes.Volumes {
|
||||||
if *quiet {
|
if *quiet {
|
||||||
fmt.Fprintln(w, vol.Name)
|
fmt.Fprintln(w, vol.Name)
|
||||||
|
@ -83,6 +85,14 @@ func (cli *DockerCli) CmdVolumeLs(args ...string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type byVolumeName []*types.Volume
|
||||||
|
|
||||||
|
func (r byVolumeName) Len() int { return len(r) }
|
||||||
|
func (r byVolumeName) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
|
||||||
|
func (r byVolumeName) Less(i, j int) bool {
|
||||||
|
return r[i].Name < r[j].Name
|
||||||
|
}
|
||||||
|
|
||||||
// CmdVolumeInspect displays low-level information on one or more volumes.
|
// CmdVolumeInspect displays low-level information on one or more volumes.
|
||||||
//
|
//
|
||||||
// Usage: docker volume inspect [OPTIONS] VOLUME [VOLUME...]
|
// Usage: docker volume inspect [OPTIONS] VOLUME [VOLUME...]
|
||||||
|
|
|
@ -65,19 +65,34 @@ func (s *DockerSuite) TestVolumeCliInspectMulti(c *check.C) {
|
||||||
|
|
||||||
func (s *DockerSuite) TestVolumeCliLs(c *check.C) {
|
func (s *DockerSuite) TestVolumeCliLs(c *check.C) {
|
||||||
prefix, _ := getPrefixAndSlashFromDaemonPlatform()
|
prefix, _ := getPrefixAndSlashFromDaemonPlatform()
|
||||||
out, _ := dockerCmd(c, "volume", "create")
|
out, _ := dockerCmd(c, "volume", "create", "--name", "aaa")
|
||||||
id := strings.TrimSpace(out)
|
|
||||||
|
|
||||||
dockerCmd(c, "volume", "create", "--name", "test")
|
dockerCmd(c, "volume", "create", "--name", "test")
|
||||||
dockerCmd(c, "run", "-v", prefix+"/foo", "busybox", "ls", "/")
|
|
||||||
|
dockerCmd(c, "volume", "create", "--name", "soo")
|
||||||
|
dockerCmd(c, "run", "-v", "soo:"+prefix+"/foo", "busybox", "ls", "/")
|
||||||
|
|
||||||
out, _ = dockerCmd(c, "volume", "ls")
|
out, _ = dockerCmd(c, "volume", "ls")
|
||||||
outArr := strings.Split(strings.TrimSpace(out), "\n")
|
outArr := strings.Split(strings.TrimSpace(out), "\n")
|
||||||
c.Assert(len(outArr), check.Equals, 4, check.Commentf("\n%s", out))
|
c.Assert(len(outArr), check.Equals, 4, check.Commentf("\n%s", out))
|
||||||
|
|
||||||
// Since there is no guarantee of ordering of volumes, we just make sure the names are in the output
|
assertVolList(c, out, []string{"aaa", "soo", "test"})
|
||||||
c.Assert(strings.Contains(out, id+"\n"), check.Equals, true)
|
}
|
||||||
c.Assert(strings.Contains(out, "test\n"), check.Equals, true)
|
|
||||||
|
// assertVolList checks volume retrieved with ls command
|
||||||
|
// equals to expected volume list
|
||||||
|
// note: out should be `volume ls [option]` result
|
||||||
|
func assertVolList(c *check.C, out string, expectVols []string) {
|
||||||
|
lines := strings.Split(out, "\n")
|
||||||
|
var volList []string
|
||||||
|
for _, line := range lines[1 : len(lines)-1] {
|
||||||
|
volFields := strings.Fields(line)
|
||||||
|
// wrap all volume name in volList
|
||||||
|
volList = append(volList, volFields[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
// volume ls should contains all expected volumes
|
||||||
|
c.Assert(volList, checker.DeepEquals, expectVols)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DockerSuite) TestVolumeCliLsFilterDangling(c *check.C) {
|
func (s *DockerSuite) TestVolumeCliLsFilterDangling(c *check.C) {
|
||||||
|
|
Loading…
Reference in a new issue