forked from containers/podman
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request containers#8724 from bblenard/support-volume-filte…
…rs-in-system-prune Add volume filters to system prune
- Loading branch information
Showing
8 changed files
with
225 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package lpfilters | ||
|
||
import ( | ||
"net/url" | ||
"strings" | ||
|
||
"github.com/pkg/errors" | ||
) | ||
|
||
func ParseFilterArgumentsIntoFilters(filters []string) (url.Values, error) { | ||
parsedFilters := make(url.Values) | ||
for _, f := range filters { | ||
t := strings.SplitN(f, "=", 2) | ||
if len(t) < 2 { | ||
return parsedFilters, errors.Errorf("filter input must be in the form of filter=value: %s is invalid", f) | ||
} | ||
parsedFilters.Add(t[0], t[1]) | ||
} | ||
return parsedFilters, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# -*- sh -*- | ||
# | ||
# system related tests | ||
# | ||
|
||
## ensure system is clean | ||
t POST 'libpod/system/prune?volumes=true&all=true' params='' 200 | ||
|
||
## podman system df | ||
t GET system/df 200 '{"LayersSize":0,"Images":[],"Containers":[],"Volumes":[],"BuildCache":[],"BuilderSize":0}' | ||
t GET libpod/system/df 200 '{"Images":[],"Containers":[],"Volumes":[]}' | ||
|
||
# Create volume. We expect df to report this volume next invocation of system/df | ||
t GET libpod/info 200 | ||
volumepath=$(jq -r ".store.volumePath" <<<"$output") | ||
t POST libpod/volumes/create name=foo1 201 \ | ||
.Name=foo1 \ | ||
.Driver=local \ | ||
.Mountpoint=$volumepath/foo1/_data \ | ||
.CreatedAt~[0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}.* \ | ||
.Labels={} \ | ||
.Options=null | ||
|
||
t GET system/df 200 '.Volumes[0].Name=foo1' | ||
|
||
t GET libpod/system/df 200 '.Volumes[0].VolumeName=foo1' | ||
|
||
# Create two more volumes to test pruneing | ||
t POST libpod/volumes/create \ | ||
'"Name":"foo2","Label":{"testlabel1":""},"Options":{"type":"tmpfs","o":"nodev,noexec"}}' 201 \ | ||
.Name=foo2 \ | ||
.Driver=local \ | ||
.Mountpoint=$volumepath/foo2/_data \ | ||
.CreatedAt~[0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}.* \ | ||
.Labels.testlabel1="" \ | ||
.Options.o=nodev,noexec | ||
|
||
t POST libpod/volumes/create \ | ||
'"Name":"foo3","Label":{"testlabel1":"testonly"},"Options":{"type":"tmpfs","o":"nodev,noexec"}}' 201 \ | ||
.Name=foo3 \ | ||
.Driver=local \ | ||
.Mountpoint=$volumepath/foo3/_data \ | ||
.CreatedAt~[0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}.* \ | ||
.Labels.testlabel1=testonly \ | ||
.Options.o=nodev,noexec | ||
|
||
t GET system/df 200 '.Volumes | length=3' | ||
t GET libpod/system/df 200 '.Volumes | length=3' | ||
|
||
# Prune volumes | ||
|
||
# -G --data-urlencode 'volumes=true&filters={"label":["testlabel1=idontmatch"]}' | ||
t POST 'libpod/system/prune?volumes=true&filters=%7B%22label%22:%5B%22testlabel1=idontmatch%22%5D%7D' params='' 200 | ||
|
||
# nothing should have been pruned | ||
t GET system/df 200 '.Volumes | length=3' | ||
t GET libpod/system/df 200 '.Volumes | length=3' | ||
|
||
# -G --data-urlencode 'volumes=true&filters={"label":["testlabel1=testonly"]}' | ||
# only foo3 should be pruned because of filter | ||
t POST 'libpod/system/prune?volumes=true&filters=%7B%22label%22:%5B%22testlabel1=testonly%22%5D%7D' params='' 200 .VolumePruneReport[0].Id=foo3 | ||
# only foo2 should be pruned because of filter | ||
t POST 'libpod/system/prune?volumes=true&filters=%7B%22label%22:%5B%22testlabel1%22%5D%7D' params='' 200 .VolumePruneReport[0].Id=foo2 | ||
# foo1, the last remaining volume should be pruned without any filters applied | ||
t POST 'libpod/system/prune?volumes=true' params='' 200 .VolumePruneReport[0].Id=foo1 | ||
|
||
# TODO add other system prune tests for pods / images |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters