Skip to content

Commit

Permalink
libpod/containers/json: alias last -> limit
Browse files Browse the repository at this point in the history
Support both `last` and `limit` for in the containers listing endpoint.
We intended to use `limit` which is also mentioned in the docs, but the
implementation ended up using `last` as the http parameter; likely being
caused by the CLI using `--last`.  To avoid any regression, we decided
for supporting both and aliasing `last`.

Fixes: containers#6413
Signed-off-by: Valentin Rothberg <[email protected]>
  • Loading branch information
vrothberg committed Jun 22, 2020
1 parent 0e4b734 commit 2abcd4f
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 3 deletions.
17 changes: 15 additions & 2 deletions pkg/api/handlers/libpod/containers.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/containers/libpod/pkg/ps"
"github.com/gorilla/schema"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)

func ContainerExists(w http.ResponseWriter, r *http.Request) {
Expand All @@ -36,7 +37,8 @@ func ListContainers(w http.ResponseWriter, r *http.Request) {
query := struct {
All bool `schema:"all"`
Filters map[string][]string `schema:"filters"`
Last int `schema:"last"`
Last int `schema:"last"` // alias for limit
Limit int `schema:"limit"`
Namespace bool `schema:"namespace"`
Pod bool `schema:"pod"`
Size bool `schema:"size"`
Expand All @@ -50,11 +52,22 @@ func ListContainers(w http.ResponseWriter, r *http.Request) {
errors.Wrapf(err, "Failed to parse parameters for %s", r.URL.String()))
return
}

limit := query.Limit
// Support `last` as an alias for `limit`. While Podman uses --last in
// the CLI, the API is using `limit`. As we first used `last` in the
// API as well, we decided to go with aliasing to prevent any
// regression. See github.com/containers/libpod/issues/6413.
if _, found := r.URL.Query()["last"]; found {
logrus.Info("List containers: received `last` parameter - overwriting `limit`")
limit = query.Last
}

runtime := r.Context().Value("runtime").(*libpod.Runtime)
opts := entities.ContainerListOptions{
All: query.All,
Filters: query.Filters,
Last: query.Last,
Last: limit,
Size: query.Size,
Sort: "",
Namespace: query.Namespace,
Expand Down
2 changes: 1 addition & 1 deletion pkg/bindings/containers/containers.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func List(ctx context.Context, filters map[string][]string, all *bool, last *int
params.Set("all", strconv.FormatBool(*all))
}
if last != nil {
params.Set("last", strconv.Itoa(*last))
params.Set("limit", strconv.Itoa(*last))
}
if pod != nil {
params.Set("pod", strconv.FormatBool(*pod))
Expand Down
21 changes: 21 additions & 0 deletions test/apiv2/20-containers.at
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,27 @@ t GET libpod/containers/json?all=true 200 \
.[0].ExitCode=0 \
.[0].IsInfra=false

# Make sure `limit` works.
t GET libpod/containers/json?limit=1 200 \
length=1 \
.[0].Id~[0-9a-f]\\{64\\} \
.[0].Image=$IMAGE \
.[0].Command[0]="true" \
.[0].State~\\\(exited\\\|stopped\\\) \
.[0].ExitCode=0 \
.[0].IsInfra=false

# Make sure `last` works, which is an alias for `limit`.
# See https://github.com/containers/libpod/issues/6413.
t GET libpod/containers/json?last=1 200 \
length=1 \
.[0].Id~[0-9a-f]\\{64\\} \
.[0].Image=$IMAGE \
.[0].Command[0]="true" \
.[0].State~\\\(exited\\\|stopped\\\) \
.[0].ExitCode=0 \
.[0].IsInfra=false

cid=$(jq -r '.[0].Id' <<<"$output")

t DELETE libpod/containers/$cid 204
Expand Down

0 comments on commit 2abcd4f

Please sign in to comment.