summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel J Walsh <dwalsh@redhat.com>2020-12-09 07:03:51 -0500
committerDaniel J Walsh <dwalsh@redhat.com>2020-12-09 16:01:13 -0500
commit15cdcdca76f1cd21bd5f61edadec2fb7df307b1e (patch)
tree6aefc2f552cb3eb65d2ab359b02c7b0d6651acce
parent059c2ee739c156287237c07e07f497602bd9958d (diff)
downloadpodman-15cdcdca76f1cd21bd5f61edadec2fb7df307b1e.tar.gz
podman-15cdcdca76f1cd21bd5f61edadec2fb7df307b1e.tar.bz2
podman-15cdcdca76f1cd21bd5f61edadec2fb7df307b1e.zip
Add --filter to podman system prune
Also document the allowable filters in podman system prune, podman image prune and podman container prune. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
-rw-r--r--cmd/podman/system/prune.go3
-rw-r--r--docs/source/markdown/podman-container-prune.1.md12
-rw-r--r--docs/source/markdown/podman-image-prune.1.md12
-rw-r--r--docs/source/markdown/podman-system-prune.1.md16
-rw-r--r--pkg/domain/entities/system.go1
-rw-r--r--pkg/domain/infra/abi/system.go14
6 files changed, 56 insertions, 2 deletions
diff --git a/cmd/podman/system/prune.go b/cmd/podman/system/prune.go
index f57689584..5ee017581 100644
--- a/cmd/podman/system/prune.go
+++ b/cmd/podman/system/prune.go
@@ -46,6 +46,9 @@ func init() {
flags.BoolVarP(&force, "force", "f", false, "Do not prompt for confirmation. The default is false")
flags.BoolVarP(&pruneOptions.All, "all", "a", false, "Remove all unused data")
flags.BoolVar(&pruneOptions.Volume, "volumes", false, "Prune volumes")
+ filterFlagName := "filter"
+ flags.StringArrayVar(&pruneOptions.Filter, filterFlagName, []string{}, "Provide filter values (e.g. 'label=<key>=<value>')")
+ _ = pruneCommand.RegisterFlagCompletionFunc(filterFlagName, completion.AutocompleteNone)
}
diff --git a/docs/source/markdown/podman-container-prune.1.md b/docs/source/markdown/podman-container-prune.1.md
index 4b4effb0b..b199f9ebb 100644
--- a/docs/source/markdown/podman-container-prune.1.md
+++ b/docs/source/markdown/podman-container-prune.1.md
@@ -15,6 +15,17 @@ podman-container-prune - Remove all stopped containers from local storage
Provide filter values.
+The --filter flag format is of “key=value”. If there is more than one filter, then pass multiple flags (e.g., --filter "foo=bar" --filter "bif=baz")
+
+Supported filters:
+
+- `until` (_timestamp_) - only remove containers and images created before given timestamp
+- `label` (label=_key_, label=_key=value_, label!=_key_, or label!=_key=value_) - only remove containers and images, with (or without, in case label!=... is used) the specified labels.
+
+The until filter can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. 10m, 1h30m) computed relative to the machine’s time.
+
+The label filter accepts two formats. One is the label=... (label=_key_ or label=_key=value_), which removes containers with the specified labels. The other format is the label!=... (label!=_key_ or label!=_key=value_), which removes containers without the specified labels.
+
#### **--force**, **-f**
Do not provide an interactive prompt for container removal.
@@ -63,3 +74,4 @@ podman(1), podman-ps
## HISTORY
December 2018, Originally compiled by Brent Baude (bbaude at redhat dot com)
+December 2020, converted filter information from docs.docker.com documentation by Dan Walsh (dwalsh at redhat dot com)
diff --git a/docs/source/markdown/podman-image-prune.1.md b/docs/source/markdown/podman-image-prune.1.md
index d8558d244..73024ffb8 100644
--- a/docs/source/markdown/podman-image-prune.1.md
+++ b/docs/source/markdown/podman-image-prune.1.md
@@ -22,6 +22,17 @@ Remove dangling images and images that have no associated containers.
Provide filter values.
+The --filter flag format is of “key=value”. If there is more than one filter, then pass multiple flags (e.g., --filter "foo=bar" --filter "bif=baz")
+
+Supported filters:
+
+- `until` (_timestamp_) - only remove containers and images created before given timestamp
+- `label` (label=_key_, label=_key=value_, label!=_key_, or label!=_key=value_) - only remove containers and images, with (or without, in case label!=... is used) the specified labels.
+
+The until filter can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. 10m, 1h30m) computed relative to the machine’s time.
+
+The label filter accepts two formats. One is the label=... (label=_key_ or label=_key=value_), which removes images with the specified labels. The other format is the label!=... (label!=_key_ or label!=_key=value_), which removes images without the specified labels.
+
#### **--force**, **-f**
Do not provide an interactive prompt for container removal.
@@ -93,3 +104,4 @@ podman(1), podman-images
## HISTORY
December 2018, Originally compiled by Brent Baude (bbaude at redhat dot com)
+December 2020, converted filter information from docs.docker.com documentation by Dan Walsh (dwalsh at redhat dot com)
diff --git a/docs/source/markdown/podman-system-prune.1.md b/docs/source/markdown/podman-system-prune.1.md
index 431a11267..791503a2c 100644
--- a/docs/source/markdown/podman-system-prune.1.md
+++ b/docs/source/markdown/podman-system-prune.1.md
@@ -18,6 +18,21 @@ By default, volumes are not removed to prevent important data from being deleted
Recursively remove all unused pod, container, image and volume data (Maximum 50 iterations.)
+#### **--filter**=*filters*
+
+Provide filter values.
+
+The --filter flag format is of “key=value”. If there is more than one filter, then pass multiple flags (e.g., --filter "foo=bar" --filter "bif=baz")
+
+Supported filters:
+
+- `until` (_timestamp_) - only remove containers and images created before given timestamp
+- `label` (label=_key_, label=_key=value_, label!=_key_, or label!=_key=value_) - only remove containers and images, with (or without, in case label!=... is used) the specified labels.
+
+The until filter can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. 10m, 1h30m) computed relative to the machine’s time.
+
+The label filter accepts two formats. One is the label=... (label=_key_ or label=_key=value_), which removes containers and images with the specified labels. The other format is the label!=... (label!=_key_ or label!=_key=value_), which removes containers and images without the specified labels.
+
#### **--force**, **-f**
Do not prompt for confirmation
@@ -35,3 +50,4 @@ podman(1), podman-image-prune(1), podman-container-prune(1), podman-pod-prune(1)
## HISTORY
February 2019, Originally compiled by Dan Walsh (dwalsh at redhat dot com)
+December 2020, converted filter information from docs.docker.com documentation by Dan Walsh (dwalsh at redhat dot com)
diff --git a/pkg/domain/entities/system.go b/pkg/domain/entities/system.go
index bde2b6ef2..4af013134 100644
--- a/pkg/domain/entities/system.go
+++ b/pkg/domain/entities/system.go
@@ -19,6 +19,7 @@ type ServiceOptions struct {
type SystemPruneOptions struct {
All bool
Volume bool
+ Filter []string
}
// SystemPruneReport provides report after system prune is executed.
diff --git a/pkg/domain/infra/abi/system.go b/pkg/domain/infra/abi/system.go
index 7ed58092b..d6881fdc4 100644
--- a/pkg/domain/infra/abi/system.go
+++ b/pkg/domain/infra/abi/system.go
@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"io/ioutil"
+ "net/url"
"os"
"os/exec"
"path/filepath"
@@ -179,7 +180,16 @@ func (ic *ContainerEngine) SystemPrune(ctx context.Context, options entities.Sys
found = true
}
systemPruneReport.PodPruneReport = append(systemPruneReport.PodPruneReport, podPruneReport...)
- containerPruneReport, err := ic.pruneContainersHelper(nil)
+ containerPruneOptions := entities.ContainerPruneOptions{}
+ for _, f := range options.Filter {
+ t := strings.SplitN(f, "=", 2)
+ containerPruneOptions.Filters = make(url.Values)
+ if len(t) < 2 {
+ return nil, errors.Errorf("filter input must be in the form of filter=value: %s is invalid", f)
+ }
+ containerPruneOptions.Filters.Add(t[0], t[1])
+ }
+ containerPruneReport, err := ic.ContainerPrune(ctx, containerPruneOptions)
if err != nil {
return nil, err
}
@@ -194,7 +204,7 @@ func (ic *ContainerEngine) SystemPrune(ctx context.Context, options entities.Sys
}
}
- results, err := ic.Libpod.ImageRuntime().PruneImages(ctx, options.All, nil)
+ results, err := ic.Libpod.ImageRuntime().PruneImages(ctx, options.All, options.Filter)
if err != nil {
return nil, err