summaryrefslogtreecommitdiff
path: root/libpod
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-01-23 11:12:36 -0800
committerGitHub <noreply@github.com>2020-01-23 11:12:36 -0800
commit5bad873c4cd9fab9112e1d84ba376d47073cc8bb (patch)
treeec76af6eb70bebd52e861273228215480df0cbc2 /libpod
parent8beeb067aac857deb29e91562cf4b6f068fe0328 (diff)
parentcf7be58b2c160e2e1df737015c913fc1aff1dbe8 (diff)
downloadpodman-5bad873c4cd9fab9112e1d84ba376d47073cc8bb.tar.gz
podman-5bad873c4cd9fab9112e1d84ba376d47073cc8bb.tar.bz2
podman-5bad873c4cd9fab9112e1d84ba376d47073cc8bb.zip
Merge pull request #4953 from baude/reviewcorrections2
Review corrections pass #2
Diffstat (limited to 'libpod')
-rw-r--r--libpod/runtime_ctr.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/libpod/runtime_ctr.go b/libpod/runtime_ctr.go
index de7cfd3b8..e8952967d 100644
--- a/libpod/runtime_ctr.go
+++ b/libpod/runtime_ctr.go
@@ -836,3 +836,44 @@ func (r *Runtime) GetLatestContainer() (*Container, error) {
}
return ctrs[lastCreatedIndex], nil
}
+
+// PruneContainers removes stopped and exited containers from localstorage. A set of optional filters
+// can be provided to be more granular.
+func (r *Runtime) PruneContainers(filterFuncs []ContainerFilter) (map[string]int64, map[string]error, error) {
+ pruneErrors := make(map[string]error)
+ prunedContainers := make(map[string]int64)
+ // We add getting the exited and stopped containers via a filter
+ containerStateFilter := func(c *Container) bool {
+ if c.PodID() != "" {
+ return false
+ }
+ state, err := c.State()
+ if err != nil {
+ logrus.Error(err)
+ return false
+ }
+ if state == define.ContainerStateStopped || state == define.ContainerStateExited {
+ return true
+ }
+ return false
+ }
+ filterFuncs = append(filterFuncs, containerStateFilter)
+ delContainers, err := r.GetContainers(filterFuncs...)
+ if err != nil {
+ return nil, nil, err
+ }
+ for _, c := range delContainers {
+ ctr := c
+ size, err := ctr.RWSize()
+ if err != nil {
+ pruneErrors[ctr.ID()] = err
+ continue
+ }
+ err = r.RemoveContainer(context.Background(), ctr, false, false)
+ pruneErrors[ctr.ID()] = err
+ if err != nil {
+ prunedContainers[ctr.ID()] = size
+ }
+ }
+ return prunedContainers, pruneErrors, nil
+}