[release-3.4] Images tag (#5958)
* Feat: Add pagination for listing repository tags (#683) * feat: add pagination for listing repository tags Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> * use ParseQueryParameter Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> --------- Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> * feat: add tags total count (#695) (#698) Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> --------- Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> Co-authored-by: Wenhao Zhou <34303854+zhou1203@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
aa0da0c80d
commit
7f0aa48333
@@ -19,6 +19,7 @@ package v1alpha3
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/emicklei/go-restful/v3"
|
||||
@@ -251,6 +252,9 @@ func (h *Handler) handleGetRepositoryTags(request *restful.Request, response *re
|
||||
secretName := request.QueryParameter("secret")
|
||||
namespace := request.PathParameter("namespace")
|
||||
repository := request.QueryParameter("repository")
|
||||
|
||||
q := query.ParseQueryParameter(request)
|
||||
|
||||
var secret *v1.Secret
|
||||
|
||||
if len(repository) == 0 {
|
||||
@@ -272,6 +276,12 @@ func (h *Handler) handleGetRepositoryTags(request *restful.Request, response *re
|
||||
return
|
||||
}
|
||||
|
||||
if !q.Ascending {
|
||||
sort.Sort(sort.Reverse(sort.StringSlice(tags.Tags)))
|
||||
}
|
||||
startIndex, endIndex := q.Pagination.GetValidPagination(len(tags.Tags))
|
||||
tags.Tags = tags.Tags[startIndex:endIndex]
|
||||
|
||||
response.WriteHeaderAndJson(http.StatusOK, tags, restful.MIME_JSON)
|
||||
}
|
||||
|
||||
|
||||
@@ -141,7 +141,9 @@ func AddToContainer(c *restful.Container, informerFactory informers.InformerFact
|
||||
Param(webservice.PathParameter("namespace", "Namespace of the image repository secret.").Required(true)).
|
||||
Param(webservice.QueryParameter("repository", "Repository to query, e.g. calico/cni.").Required(true)).
|
||||
Param(webservice.QueryParameter("secret", "Secret name of the image repository credential, left empty means anonymous fetch.").Required(false)).
|
||||
Metadata(restfulspec.KeyOpenAPITags, []string{tagNamespacedResource}).
|
||||
Param(webservice.QueryParameter(query.ParameterPage, "page").Required(false).DataFormat("page=%d").DefaultValue("page=1")).
|
||||
Param(webservice.QueryParameter(query.ParameterLimit, "limit").Required(false)).
|
||||
Param(webservice.QueryParameter(query.ParameterAscending, "sort parameters, e.g. reverse=true").Required(false).DefaultValue("ascending=false")).
|
||||
Doc("List repository tags, this is an experimental API, use it by your own caution.").
|
||||
Returns(http.StatusOK, ok, v2.RepositoryTags{}))
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ func (r *registryer) ListRepositoryTags(src string) (RepositoryTags, error) {
|
||||
Registry: repo.RegistryStr(),
|
||||
Repository: repo.RepositoryStr(),
|
||||
Tags: tags,
|
||||
Total: len(tags),
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ type RepositoryTags struct {
|
||||
Registry string `json:"registry"`
|
||||
Repository string `json:"repository"`
|
||||
Tags []string `json:"tags"`
|
||||
Total int `json:"total"`
|
||||
}
|
||||
|
||||
// ImageConfig wraps v1.ConfigFile to avoid direct dependency
|
||||
|
||||
Reference in New Issue
Block a user