summaryrefslogtreecommitdiff
path: root/cmd/podman/containers_prune.go
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2019-04-20 12:58:59 -0500
committerbaude <bbaude@redhat.com>2019-04-26 10:15:09 -0500
commit2e800d63aa388bb248c97ea24fae2f7190fe3cce (patch)
treea802665cf02289f454e79f06a770e0b9ec54283d /cmd/podman/containers_prune.go
parent135c8bef223d32f553659cbdfd5eb99f948a6c84 (diff)
downloadpodman-2e800d63aa388bb248c97ea24fae2f7190fe3cce.tar.gz
podman-2e800d63aa388bb248c97ea24fae2f7190fe3cce.tar.bz2
podman-2e800d63aa388bb248c97ea24fae2f7190fe3cce.zip
podman-remote prune containers
enable the ability to prune containers from the remote-command. this also includes the system prune command. Signed-off-by: baude <bbaude@redhat.com>
Diffstat (limited to 'cmd/podman/containers_prune.go')
-rw-r--r--cmd/podman/containers_prune.go56
1 files changed, 16 insertions, 40 deletions
diff --git a/cmd/podman/containers_prune.go b/cmd/podman/containers_prune.go
index abc56cee1..340c47e8d 100644
--- a/cmd/podman/containers_prune.go
+++ b/cmd/podman/containers_prune.go
@@ -1,14 +1,11 @@
package main
import (
- "context"
-
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/cmd/podman/shared"
"github.com/containers/libpod/libpod"
"github.com/containers/libpod/pkg/adapter"
"github.com/pkg/errors"
- "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
@@ -41,39 +38,6 @@ func init() {
flags.BoolVarP(&pruneContainersCommand.Force, "force", "f", false, "Force removal of a running container. The default is false")
}
-func pruneContainers(runtime *adapter.LocalRuntime, ctx context.Context, maxWorkers int, force, volumes bool) error {
- var deleteFuncs []shared.ParallelWorkerInput
-
- filter := func(c *libpod.Container) bool {
- state, err := c.State()
- if state == libpod.ContainerStateStopped || (state == libpod.ContainerStateExited && err == nil && c.PodID() == "") {
- return true
- }
- return false
- }
- delContainers, err := runtime.GetContainers(filter)
- if err != nil {
- return err
- }
- if len(delContainers) < 1 {
- return nil
- }
- for _, container := range delContainers {
- con := container
- f := func() error {
- return runtime.RemoveContainer(ctx, con, force, volumes)
- }
-
- deleteFuncs = append(deleteFuncs, shared.ParallelWorkerInput{
- ContainerID: con.ID(),
- ParallelFunc: f,
- })
- }
- // Run the parallel funcs
- deleteErrors, errCount := shared.ParallelExecuteWorkerPool(maxWorkers, deleteFuncs)
- return printParallelOutput(deleteErrors, errCount)
-}
-
func pruneContainersCmd(c *cliconfig.PruneContainersValues) error {
runtime, err := adapter.GetRuntime(&c.PodmanCommand)
if err != nil {
@@ -81,11 +45,23 @@ func pruneContainersCmd(c *cliconfig.PruneContainersValues) error {
}
defer runtime.Shutdown(false)
- maxWorkers := shared.Parallelize("rm")
+ maxWorkers := shared.DefaultPoolSize("prune")
if c.GlobalIsSet("max-workers") {
maxWorkers = c.GlobalFlags.MaxWorks
}
- logrus.Debugf("Setting maximum workers to %d", maxWorkers)
-
- return pruneContainers(runtime, getContext(), maxWorkers, c.Bool("force"), c.Bool("volumes"))
+ ok, failures, err := runtime.Prune(getContext(), maxWorkers, c.Force)
+ if err != nil {
+ if errors.Cause(err) == libpod.ErrNoSuchCtr {
+ if len(c.InputArgs) > 1 {
+ exitCode = 125
+ } else {
+ exitCode = 1
+ }
+ }
+ return err
+ }
+ if len(failures) > 0 {
+ exitCode = 125
+ }
+ return printCmdResults(ok, failures)
}