mirror of
https://github.com/containers/podman.git
synced 2025-06-23 02:18:13 +08:00
compat api network ls accept both format options
Docker allows both the old `map[string]map[string]bool` and the newer `map[string][]string` for the filter param so we should too. Fixes #9526 Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
This commit is contained in:
@ -180,16 +180,18 @@ func findPluginByName(plugins []*libcni.NetworkConfig, pluginType string) ([]byt
|
|||||||
|
|
||||||
func ListNetworks(w http.ResponseWriter, r *http.Request) {
|
func ListNetworks(w http.ResponseWriter, r *http.Request) {
|
||||||
runtime := r.Context().Value("runtime").(*libpod.Runtime)
|
runtime := r.Context().Value("runtime").(*libpod.Runtime)
|
||||||
decoder := r.Context().Value("decoder").(*schema.Decoder)
|
filters, err := filtersFromRequest(r)
|
||||||
query := struct {
|
if err != nil {
|
||||||
Filters map[string][]string `schema:"filters"`
|
|
||||||
}{
|
|
||||||
// override any golang type defaults
|
|
||||||
}
|
|
||||||
if err := decoder.Decode(&query, r.URL.Query()); err != nil {
|
|
||||||
utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
|
utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
filterMap := map[string][]string{}
|
||||||
|
for _, filter := range filters {
|
||||||
|
split := strings.SplitN(filter, "=", 2)
|
||||||
|
if len(split) > 1 {
|
||||||
|
filterMap[split[0]] = append(filterMap[split[0]], split[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
config, err := runtime.GetConfig()
|
config, err := runtime.GetConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.InternalServerError(w, err)
|
utils.InternalServerError(w, err)
|
||||||
@ -205,7 +207,7 @@ func ListNetworks(w http.ResponseWriter, r *http.Request) {
|
|||||||
reports := []*types.NetworkResource{}
|
reports := []*types.NetworkResource{}
|
||||||
logrus.Debugf("netNames: %q", strings.Join(netNames, ", "))
|
logrus.Debugf("netNames: %q", strings.Join(netNames, ", "))
|
||||||
for _, name := range netNames {
|
for _, name := range netNames {
|
||||||
report, err := getNetworkResourceByNameOrID(name, runtime, query.Filters)
|
report, err := getNetworkResourceByNameOrID(name, runtime, filterMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.InternalServerError(w, err)
|
utils.InternalServerError(w, err)
|
||||||
return
|
return
|
||||||
|
@ -38,6 +38,9 @@ length=2
|
|||||||
# filters={"label":["abc"]}
|
# filters={"label":["abc"]}
|
||||||
t GET networks?filters=%7B%22label%22%3A%5B%22abc%22%5D%7D 200 \
|
t GET networks?filters=%7B%22label%22%3A%5B%22abc%22%5D%7D 200 \
|
||||||
length=1
|
length=1
|
||||||
|
# filters={"label":{"abc":true}} old docker filter type see #9526
|
||||||
|
t GET networks?filters=%7B%22label%22%3A%7B%22abc%22%3Atrue%7D%7D 200 \
|
||||||
|
length=1
|
||||||
# id filter filters={"id":["a7662f44d65029fd4635c91feea3d720a57cef52e2a9fcc7772b69072cc1ccd1"]}
|
# id filter filters={"id":["a7662f44d65029fd4635c91feea3d720a57cef52e2a9fcc7772b69072cc1ccd1"]}
|
||||||
t GET networks?filters=%7B%22id%22%3A%5B%22a7662f44d65029fd4635c91feea3d720a57cef52e2a9fcc7772b69072cc1ccd1%22%5D%7D 200 \
|
t GET networks?filters=%7B%22id%22%3A%5B%22a7662f44d65029fd4635c91feea3d720a57cef52e2a9fcc7772b69072cc1ccd1%22%5D%7D 200 \
|
||||||
length=1 \
|
length=1 \
|
||||||
|
Reference in New Issue
Block a user