diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-01-23 11:12:36 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-23 11:12:36 -0800 |
commit | 5bad873c4cd9fab9112e1d84ba376d47073cc8bb (patch) | |
tree | ec76af6eb70bebd52e861273228215480df0cbc2 /libpod | |
parent | 8beeb067aac857deb29e91562cf4b6f068fe0328 (diff) | |
parent | cf7be58b2c160e2e1df737015c913fc1aff1dbe8 (diff) | |
download | podman-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.go | 41 |
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 +} |