enable remote image tree

Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
Brent Baude
2020-05-13 09:34:46 -05:00
parent d147b3ee02
commit 3fea2f0a91
3 changed files with 25 additions and 14 deletions

View File

@ -56,13 +56,6 @@ func ImageExists(w http.ResponseWriter, r *http.Request) {
func ImageTree(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value("runtime").(*libpod.Runtime)
name := utils.GetName(r)
img, err := runtime.ImageRuntime().NewFromLocal(name)
if err != nil {
utils.Error(w, "Something went wrong.", http.StatusNotFound, errors.Wrapf(err, "Failed to find image %s", name))
return
}
decoder := r.Context().Value("decoder").(*schema.Decoder)
query := struct {
WhatRequires bool `schema:"whatrequires"`
@ -74,14 +67,18 @@ func ImageTree(w http.ResponseWriter, r *http.Request) {
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return
}
tree, err := img.GenerateTree(query.WhatRequires)
ir := abi.ImageEngine{Libpod: runtime}
options := entities.ImageTreeOptions{WhatRequires: query.WhatRequires}
report, err := ir.Tree(r.Context(), name, options)
if err != nil {
if errors.Cause(err) == define.ErrNoSuchImage {
utils.Error(w, "Something went wrong.", http.StatusNotFound, errors.Wrapf(err, "Failed to find image %s", name))
return
}
utils.Error(w, "Server error", http.StatusInternalServerError, errors.Wrapf(err, "failed to generate image tree for %s", name))
return
}
utils.WriteResponse(w, http.StatusOK, tree)
utils.WriteResponse(w, http.StatusOK, report)
}
func GetImage(w http.ResponseWriter, r *http.Request) {

View File

@ -74,8 +74,22 @@ func GetImage(ctx context.Context, nameOrID string, size *bool) (*entities.Image
return &inspectedData, response.Process(&inspectedData)
}
func Tree(ctx context.Context, nameOrId string) error {
return bindings.ErrNotImplemented
// Tree retrieves a "tree" based representation of the given image
func Tree(ctx context.Context, nameOrId string, whatRequires *bool) (*entities.ImageTreeReport, error) {
var report entities.ImageTreeReport
conn, err := bindings.GetClient(ctx)
if err != nil {
return nil, err
}
params := url.Values{}
if whatRequires != nil {
params.Set("size", strconv.FormatBool(*whatRequires))
}
response, err := conn.DoRequest(nil, http.MethodGet, "/images/%s/tree", params, nameOrId)
if err != nil {
return nil, err
}
return &report, response.Process(&report)
}
// History returns the parent layers of an image.

View File

@ -258,7 +258,7 @@ func (ir *ImageEngine) Build(ctx context.Context, containerFiles []string, opts
}
func (ir *ImageEngine) Tree(ctx context.Context, nameOrId string, opts entities.ImageTreeOptions) (*entities.ImageTreeReport, error) {
return nil, errors.New("not implemented yet")
return images.Tree(ir.ClientCxt, nameOrId, &opts.WhatRequires)
}
// Shutdown Libpod engine