Merge pull request #2165 from rhatdan/mount

Add --latest and --all to podman mount/umount
This commit is contained in:
OpenShift Merge Robot 2019-01-17 00:09:29 +01:00 committed by GitHub
commit 0e3264ae4d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 69 additions and 60 deletions

View file

@ -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 {

View file

@ -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
}
for _, ctr := range containers {
ctrState, err := ctr.State()
if ctrState == libpod.ContainerStateRunning || err != nil {
continue
}
if err = ctr.Unmount(force); err != nil {
if lastError != nil {
logrus.Error(lastError)
}
lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, name)
if err = ctr.Unmount(force); err != nil {
if umountAll && errors.Cause(err) == storage.ErrLayerNotMounted {
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
if lastError != nil {
logrus.Error(lastError)
}
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())
continue
}
fmt.Printf("%s\n", ctr.ID())
lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, ctr.ID())
continue
}
fmt.Printf("%s\n", ctr.ID())
}
return lastError
}

View file

@ -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
"

View file

@ -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.

View file

@ -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

View file

@ -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