summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2019-01-17 00:09:29 +0100
committerGitHub <noreply@github.com>2019-01-17 00:09:29 +0100
commit0e3264ae4de85d2c974106582f80fd8cadab8bb8 (patch)
tree17f1b67764193badbd9174347cb72f1424b85e9a
parente6696fc7deba9cf8210041654194ce81fbfef9ea (diff)
parent78fc4c67fdd1f8d8a3567ffd941c1f5b3e1b6ba5 (diff)
downloadpodman-0e3264ae4de85d2c974106582f80fd8cadab8bb8.tar.gz
podman-0e3264ae4de85d2c974106582f80fd8cadab8bb8.tar.bz2
podman-0e3264ae4de85d2c974106582f80fd8cadab8bb8.zip
Merge pull request #2165 from rhatdan/mount
Add --latest and --all to podman mount/umount
-rw-r--r--cmd/podman/mount.go34
-rw-r--r--cmd/podman/umount.go65
-rw-r--r--completions/bash/podman6
-rw-r--r--docs/podman-mount.1.md10
-rw-r--r--docs/podman-rm.1.md8
-rw-r--r--docs/podman-umount.1.md6
6 files changed, 69 insertions, 60 deletions
diff --git a/cmd/podman/mount.go b/cmd/podman/mount.go
index c91115597..86a6b2ad1 100644
--- a/cmd/podman/mount.go
+++ b/cmd/podman/mount.go
@@ -24,13 +24,18 @@ var (
mountFlags = []cli.Flag{
cli.BoolFlag{
- Name: "notruncate",
- Usage: "do not truncate output",
+ Name: "all, a",
+ Usage: "Mount all containers",
},
cli.StringFlag{
Name: "format",
Usage: "Change the output format to Go template",
},
+ cli.BoolFlag{
+ Name: "notruncate",
+ Usage: "do not truncate output",
+ },
+ LatestFlag,
}
mountCommand = cli.Command{
Name: "mount",
@@ -80,20 +85,31 @@ func mountCmd(c *cli.Context) error {
}
}
+ if c.Bool("all") && c.Bool("latest") {
+ return errors.Errorf("--all and --latest cannot be used together")
+ }
+
+ mountContainers, err := getAllOrLatestContainers(c, runtime, -1, "all")
+ if err != nil {
+ if len(mountContainers) == 0 {
+ return err
+ }
+ fmt.Println(err.Error())
+ }
+
formats := map[string]bool{
"": true,
of.JSONString: true,
}
- args := c.Args()
json := c.String("format") == of.JSONString
if !formats[c.String("format")] {
return errors.Errorf("%q is not a supported format", c.String("format"))
}
var lastError error
- if len(args) > 0 {
- for _, name := range args {
+ if len(mountContainers) > 0 {
+ for _, ctr := range mountContainers {
if json {
if lastError != nil {
logrus.Error(lastError)
@@ -101,14 +117,6 @@ func mountCmd(c *cli.Context) error {
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 {
diff --git a/cmd/podman/umount.go b/cmd/podman/umount.go
index 24f0f178b..7c9b5897b 100644
--- a/cmd/podman/umount.go
+++ b/cmd/podman/umount.go
@@ -21,6 +21,7 @@ var (
Name: "force, f",
Usage: "force the complete umount all of the currently mounted containers",
},
+ LatestFlag,
}
description = `
@@ -51,59 +52,37 @@ func umountCmd(c *cli.Context) error {
force := c.Bool("force")
umountAll := c.Bool("all")
- args := c.Args()
- if len(args) == 0 && !umountAll {
- return errors.Errorf("container ID must be specified")
+ if err := checkAllAndLatest(c); err != nil {
+ return err
}
- if len(args) > 0 && umountAll {
- return errors.Errorf("when using the --all switch, you may not pass any container IDs")
+
+ containers, err := getAllOrLatestContainers(c, runtime, -1, "all")
+ if err != nil {
+ if len(containers) == 0 {
+ return err
+ }
+ fmt.Println(err.Error())
}
umountContainerErrStr := "error unmounting container"
var lastError error
- if len(args) > 0 {
- for _, name := range args {
- ctr, err := runtime.LookupContainer(name)
- if err != nil {
- if lastError != nil {
- logrus.Error(lastError)
- }
- lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, name)
- continue
- }
-
- if err = ctr.Unmount(force); err != nil {
- if lastError != nil {
- logrus.Error(lastError)
- }
- lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, name)
- continue
- }
- fmt.Printf("%s\n", ctr.ID())
- }
- } else {
- containers, err := runtime.GetContainers()
- if err != nil {
- return errors.Wrapf(err, "error reading Containers")
+ for _, ctr := range containers {
+ ctrState, err := ctr.State()
+ if ctrState == libpod.ContainerStateRunning || err != nil {
+ continue
}
- for _, ctr := range containers {
- ctrState, err := ctr.State()
- if ctrState == libpod.ContainerStateRunning || err != nil {
- continue
- }
- if err = ctr.Unmount(force); err != nil {
- if umountAll && errors.Cause(err) == storage.ErrLayerNotMounted {
- continue
- }
- if lastError != nil {
- logrus.Error(lastError)
- }
- lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, ctr.ID())
+ if err = ctr.Unmount(force); err != nil {
+ if umountAll && errors.Cause(err) == storage.ErrLayerNotMounted {
continue
}
- fmt.Printf("%s\n", ctr.ID())
+ if lastError != nil {
+ logrus.Error(lastError)
+ }
+ lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, ctr.ID())
+ continue
}
+ fmt.Printf("%s\n", ctr.ID())
}
return lastError
}
diff --git a/completions/bash/podman b/completions/bash/podman
index 6333dfdf2..08891563c 100644
--- a/completions/bash/podman
+++ b/completions/bash/podman
@@ -1514,6 +1514,8 @@ _podman_umount() {
-h
--force
-f
+ --latest
+ -l
"
local options_with_args="
"
@@ -1531,8 +1533,12 @@ _podman_umount() {
_podman_mount() {
local boolean_options="
+ --all
+ -a
--help
-h
+ -l
+ --latest
--notruncate
"
diff --git a/docs/podman-mount.1.md b/docs/podman-mount.1.md
index ccc2d386d..2cccf5ee0 100644
--- a/docs/podman-mount.1.md
+++ b/docs/podman-mount.1.md
@@ -19,10 +19,20 @@ returned.
## OPTIONS
+**--all, a**
+
+Mount all containers.
+
**--format**
Print the mounted containers in specified format (json)
+**--latest, -l**
+
+Instead of providing the container name or ID, use the last created container.
+If you use methods other than Podman to run containers such as CRI-O, the last
+started container could be from either of those methods.
+
**--notruncate**
Do not truncate IDs in output.
diff --git a/docs/podman-rm.1.md b/docs/podman-rm.1.md
index 56664a8c1..4fcb0b6c5 100644
--- a/docs/podman-rm.1.md
+++ b/docs/podman-rm.1.md
@@ -11,14 +11,14 @@ podman\-rm - Remove one or more containers
## OPTIONS
-**--force, f**
-
-Force the removal of a running and paused containers
-
**--all, a**
Remove all containers. Can be used in conjunction with -f as well.
+**--force, f**
+
+Force the removal of a running and paused containers
+
**--latest, -l**
Instead of providing the container name or ID, use the last created container. If you use methods other than Podman
diff --git a/docs/podman-umount.1.md b/docs/podman-umount.1.md
index 70f30869a..cceb63019 100644
--- a/docs/podman-umount.1.md
+++ b/docs/podman-umount.1.md
@@ -29,6 +29,12 @@ processes have mounted it.
Note: This could cause other processes that are using the file system to fail,
as the mount point could be removed without their knowledge.
+**--latest, -l**
+
+Instead of providing the container name or ID, use the last created container.
+If you use methods other than Podman to run containers such as CRI-O, the last
+started container could be from either of those methods.
+
## EXAMPLE
podman umount containerID