Merge pull request #9958 from jmguzik/limit-prune-filters-for-volumes

Volumes prune endpoint should use only prune filters
This commit is contained in:
OpenShift Merge Robot
2021-04-07 18:55:23 -04:00
committed by GitHub
4 changed files with 37 additions and 3 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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)
}
}
}

View File

@ -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