mirror of
https://github.com/containers/podman
synced 2024-10-20 01:03:51 +00:00
Merge pull request #2165 from rhatdan/mount
Add --latest and --all to podman mount/umount
This commit is contained in:
commit
0e3264ae4d
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
"
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue