Skip to content

Commit

Permalink
Merge pull request #8664 from rhatdan/prune
Browse files Browse the repository at this point in the history
Add --filter to podman system prune
  • Loading branch information
openshift-merge-robot authored Dec 10, 2020
2 parents 2bb1490 + 15cdcdc commit 6823a5d
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 2 deletions.
3 changes: 3 additions & 0 deletions cmd/podman/system/prune.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

}

Expand Down
12 changes: 12 additions & 0 deletions docs/source/markdown/podman-container-prune.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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)
12 changes: 12 additions & 0 deletions docs/source/markdown/podman-image-prune.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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)
16 changes: 16 additions & 0 deletions docs/source/markdown/podman-system-prune.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
1 change: 1 addition & 0 deletions pkg/domain/entities/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ type ServiceOptions struct {
type SystemPruneOptions struct {
All bool
Volume bool
Filter []string
}

// SystemPruneReport provides report after system prune is executed.
Expand Down
14 changes: 12 additions & 2 deletions pkg/domain/infra/abi/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"io/ioutil"
"net/url"
"os"
"os/exec"
"path/filepath"
Expand Down Expand Up @@ -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
}
Expand All @@ -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
Expand Down

0 comments on commit 6823a5d

Please sign in to comment.