mirror of
https://github.com/containers/podman.git
synced 2025-06-21 17:38:12 +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)
|
f := (url.Values)(*filterMap)
|
||||||
filterFuncs, err := filters.GenerateVolumeFilters(f)
|
filterFuncs, err := filters.GeneratePruneVolumeFilters(f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Error(w, "Something when wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to parse filters for %s", f.Encode()))
|
utils.Error(w, "Something when wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to parse filters for %s", f.Encode()))
|
||||||
return
|
return
|
||||||
|
@ -150,7 +150,7 @@ func pruneVolumesHelper(r *http.Request) ([]*reports.PruneReport, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
f := (url.Values)(*filterMap)
|
f := (url.Values)(*filterMap)
|
||||||
filterFuncs, err := filters.GenerateVolumeFilters(f)
|
filterFuncs, err := filters.GeneratePruneVolumeFilters(f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,25 @@ func GenerateVolumeFilters(filters url.Values) ([]libpod.VolumeFilter, error) {
|
|||||||
return dangling
|
return dangling
|
||||||
})
|
})
|
||||||
default:
|
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
|
#After prune volumes, there should be no volume existing
|
||||||
t GET libpod/volumes/json 200 length=0
|
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
|
# vim: filetype=sh
|
||||||
|
Reference in New Issue
Block a user