mirror of
https://github.com/containers/podman.git
synced 2025-06-21 01:19:15 +08:00
Merge pull request #9958 from jmguzik/limit-prune-filters-for-volumes
Volumes prune endpoint should use only prune filters
This commit is contained in:
@ -266,7 +266,7 @@ func PruneVolumes(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
f := (url.Values)(*filterMap)
|
||||
filterFuncs, err := filters.GenerateVolumeFilters(f)
|
||||
filterFuncs, err := filters.GeneratePruneVolumeFilters(f)
|
||||
if err != nil {
|
||||
utils.Error(w, "Something when wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to parse filters for %s", f.Encode()))
|
||||
return
|
||||
|
@ -150,7 +150,7 @@ func pruneVolumesHelper(r *http.Request) ([]*reports.PruneReport, error) {
|
||||
}
|
||||
|
||||
f := (url.Values)(*filterMap)
|
||||
filterFuncs, err := filters.GenerateVolumeFilters(f)
|
||||
filterFuncs, err := filters.GeneratePruneVolumeFilters(f)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -75,7 +75,25 @@ func GenerateVolumeFilters(filters url.Values) ([]libpod.VolumeFilter, error) {
|
||||
return dangling
|
||||
})
|
||||
default:
|
||||
return nil, errors.Errorf("%q is in an invalid volume filter", filter)
|
||||
return nil, errors.Errorf("%q is an invalid volume filter", filter)
|
||||
}
|
||||
}
|
||||
}
|
||||
return vf, nil
|
||||
}
|
||||
|
||||
func GeneratePruneVolumeFilters(filters url.Values) ([]libpod.VolumeFilter, error) {
|
||||
var vf []libpod.VolumeFilter
|
||||
for filter, v := range filters {
|
||||
for _, val := range v {
|
||||
switch filter {
|
||||
case "label":
|
||||
filter := val
|
||||
vf = append(vf, func(v *libpod.Volume) bool {
|
||||
return util.MatchLabelFilters([]string{filter}, v.Labels())
|
||||
})
|
||||
default:
|
||||
return nil, errors.Errorf("%q is an invalid volume filter", filter)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -123,4 +123,20 @@ t POST libpod/volumes/prune 200
|
||||
#After prune volumes, there should be no volume existing
|
||||
t GET libpod/volumes/json 200 length=0
|
||||
|
||||
# libpod api: do not use list filters for prune
|
||||
t POST libpod/volumes/prune?filters='{"name":["anyname"]}' 500 \
|
||||
.cause="\"name\" is an invalid volume filter"
|
||||
t POST libpod/volumes/prune?filters='{"driver":["anydriver"]}' 500 \
|
||||
.cause="\"driver\" is an invalid volume filter"
|
||||
t POST libpod/volumes/prune?filters='{"scope":["anyscope"]}' 500 \
|
||||
.cause="\"scope\" is an invalid volume filter"
|
||||
|
||||
# compat api: do not use list filters for prune
|
||||
t POST volumes/prune?filters='{"name":["anyname"]}' 500 \
|
||||
.cause="\"name\" is an invalid volume filter"
|
||||
t POST volumes/prune?filters='{"driver":["anydriver"]}' 500 \
|
||||
.cause="\"driver\" is an invalid volume filter"
|
||||
t POST volumes/prune?filters='{"scope":["anyscope"]}' 500 \
|
||||
.cause="\"scope\" is an invalid volume filter"
|
||||
|
||||
# vim: filetype=sh
|
||||
|
Reference in New Issue
Block a user