aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomSweeneyRedHat <tsweeney@redhat.com>2018-06-29 16:35:22 -0400
committerAtomic Bot <atomic-devel@projectatomic.io>2018-07-03 18:02:45 +0000
commit6d8fac87ed20c7bb3214e28e2ef74d3d8831eadd (patch)
tree5bf4066cb6005fa54119cd16bb02bfa1b21144bd
parent7a5c376e63085d60a5d9c00d8f176b4a945f1ad0 (diff)
downloadpodman-6d8fac87ed20c7bb3214e28e2ef74d3d8831eadd.tar.gz
podman-6d8fac87ed20c7bb3214e28e2ef74d3d8831eadd.tar.bz2
podman-6d8fac87ed20c7bb3214e28e2ef74d3d8831eadd.zip
Allow multiple mounts
Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com> Closes: #1030 Approved by: rhatdan
-rw-r--r--cmd/podman/mount.go47
-rw-r--r--docs/podman-mount.1.md18
-rw-r--r--test/e2e/mount_test.go25
3 files changed, 70 insertions, 20 deletions
diff --git a/cmd/podman/mount.go b/cmd/podman/mount.go
index e913afb75..b053ef1e8 100644
--- a/cmd/podman/mount.go
+++ b/cmd/podman/mount.go
@@ -7,6 +7,7 @@ import (
"github.com/pkg/errors"
of "github.com/projectatomic/libpod/cmd/podman/formats"
"github.com/projectatomic/libpod/cmd/podman/libpodruntime"
+ "github.com/sirupsen/logrus"
"github.com/urfave/cli"
)
@@ -34,7 +35,7 @@ var (
Usage: "Mount a working container's root filesystem",
Description: mountDescription,
Action: mountCmd,
- ArgsUsage: "[CONTAINER-NAME-OR-ID]",
+ ArgsUsage: "[CONTAINER-NAME-OR-ID [...]]",
Flags: mountFlags,
}
)
@@ -68,23 +69,35 @@ func mountCmd(c *cli.Context) error {
return errors.Errorf("%q is not a supported format", c.String("format"))
}
- if len(args) > 1 {
- return errors.Errorf("too many arguments specified")
- }
-
- if len(args) == 1 {
- if json {
- return errors.Wrapf(err, "json option can not be used with a container id")
- }
- ctr, err := runtime.LookupContainer(args[0])
- if err != nil {
- return errors.Wrapf(err, "error looking up container %q", args[0])
- }
- mountPoint, err := ctr.Mount()
- if err != nil {
- return errors.Wrapf(err, "error mounting container %q", ctr.ID())
+ var lastError error
+ if len(args) > 0 {
+ for _, name := range args {
+ if json {
+ if lastError != nil {
+ logrus.Error(lastError)
+ }
+ lastError = errors.Wrapf(err, "json option cannot be used with a container id")
+ continue
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ if lastError != nil {
+ logrus.Error(lastError)
+ }
+ lastError = errors.Wrapf(err, "error looking up container %q", name)
+ continue
+ }
+ mountPoint, err := ctr.Mount()
+ if err != nil {
+ if lastError != nil {
+ logrus.Error(lastError)
+ }
+ lastError = errors.Wrapf(err, "error mounting container %q", ctr.ID())
+ continue
+ }
+ fmt.Printf("%s\n", mountPoint)
}
- fmt.Printf("%s\n", mountPoint)
+ return lastError
} else {
jsonMountPoints := []jsonMountPoint{}
containers, err2 := runtime.GetContainers()
diff --git a/docs/podman-mount.1.md b/docs/podman-mount.1.md
index c73caf011..04210f087 100644
--- a/docs/podman-mount.1.md
+++ b/docs/podman-mount.1.md
@@ -1,15 +1,15 @@
% podman-mount "1"
## NAME
-podman\-mount - Mount a working container's root filesystem
+podman\-mount - Mount the specifed working containers' root filesystem
## SYNOPSIS
**podman** **mount**
-**podman** **mount** **containerID**
+**podman** **mount** **containerID [...]**
## DESCRIPTION
-Mounts the specified container's root file system in a location which can be
+Mounts the specified containers' root file system in a location which can be
accessed from the host, and returns its location.
If you execute the command without any arguments, the tool will list all of the
@@ -41,7 +41,19 @@ podman mount c831414b10a3
podman mount
c831414b10a3 /var/lib/containers/storage/overlay/f3ac502d97b5681989dff84dfedc8354239bcecbdc2692f9a639f4e080a02364/merged
+a7060253093b /var/lib/containers/storage/overlay/0ff7d7ca68bed1ace424f9df154d2dd7b5a125c19d887f17653cbcd5b6e30ba1/merged
+```
+```
+podman mount c831414b10a3 a7060253093b
+
+/var/lib/containers/storage/overlay/f3ac502d97b5681989dff84dfedc8354239bcecbdc2692f9a639f4e080a02364/merged
+/var/lib/containers/storage/overlay/0ff7d7ca68bed1ace424f9df154d2dd7b5a125c19d887f17653cbcd5b6e30ba1/merged
+```
+```
+podman mount
+
+c831414b10a3 /var/lib/containers/storage/overlay/f3ac502d97b5681989dff84dfedc8354239bcecbdc2692f9a639f4e080a02364/merged
a7060253093b /var/lib/containers/storage/overlay/0ff7d7ca68bed1ace424f9df154d2dd7b5a125c19d887f17653cbcd5b6e30ba1/merged
```
diff --git a/test/e2e/mount_test.go b/test/e2e/mount_test.go
index 26eb5a7d2..1c206c597 100644
--- a/test/e2e/mount_test.go
+++ b/test/e2e/mount_test.go
@@ -62,6 +62,31 @@ var _ = Describe("Podman mount", func() {
Expect(umount.ExitCode()).To(Equal(0))
})
+ It("podman mount many", func() {
+ setup1 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
+ setup1.WaitWithDefaultTimeout()
+ Expect(setup1.ExitCode()).To(Equal(0))
+ cid1 := setup1.OutputToString()
+
+ setup2 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
+ setup2.WaitWithDefaultTimeout()
+ Expect(setup2.ExitCode()).To(Equal(0))
+ cid2 := setup2.OutputToString()
+
+ setup3 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
+ setup3.WaitWithDefaultTimeout()
+ Expect(setup3.ExitCode()).To(Equal(0))
+ cid3 := setup3.OutputToString()
+
+ mount1 := podmanTest.Podman([]string{"mount", cid1, cid2, cid3})
+ mount1.WaitWithDefaultTimeout()
+ Expect(mount1.ExitCode()).To(Equal(0))
+
+ umount := podmanTest.Podman([]string{"umount", cid1, cid2, cid3})
+ umount.WaitWithDefaultTimeout()
+ Expect(umount.ExitCode()).To(Equal(0))
+ })
+
It("podman umount many", func() {
setup1 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
setup1.WaitWithDefaultTimeout()