mirror of
https://github.com/containers/podman.git
synced 2025-06-03 12:17:13 +08:00

add the ability for the podman-remote client to be able to print an image tree. Signed-off-by: baude <bbaude@redhat.com>
57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
// +build remoteclient
|
|
|
|
package adapter
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/containers/libpod/cmd/podman/cliconfig"
|
|
iopodman "github.com/containers/libpod/cmd/podman/varlink"
|
|
"github.com/containers/libpod/libpod/image"
|
|
"github.com/containers/libpod/pkg/inspect"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// Inspect returns returns an ImageData struct from over a varlink connection
|
|
func (i *ContainerImage) Inspect(ctx context.Context) (*inspect.ImageData, error) {
|
|
reply, err := iopodman.InspectImage().Call(i.Runtime.Conn, i.ID())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
data := inspect.ImageData{}
|
|
if err := json.Unmarshal([]byte(reply), &data); err != nil {
|
|
return nil, err
|
|
}
|
|
return &data, nil
|
|
}
|
|
|
|
// Tree ...
|
|
func (r *LocalRuntime) Tree(c *cliconfig.TreeValues) (*image.InfoImage, map[string]*image.LayerInfo, *ContainerImage, error) {
|
|
layerInfoMap := make(map[string]*image.LayerInfo)
|
|
imageInfo := &image.InfoImage{}
|
|
|
|
img, err := r.NewImageFromLocal(c.InputArgs[0])
|
|
if err != nil {
|
|
return nil, nil, nil, err
|
|
}
|
|
|
|
reply, err := iopodman.GetLayersMapWithImageInfo().Call(r.Conn)
|
|
if err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to obtain image layers")
|
|
}
|
|
if err := json.Unmarshal([]byte(reply), &layerInfoMap); err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to unmarshal image layers")
|
|
}
|
|
|
|
reply, err = iopodman.BuildImageHierarchyMap().Call(r.Conn, c.InputArgs[0])
|
|
if err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to get build image map")
|
|
}
|
|
if err := json.Unmarshal([]byte(reply), imageInfo); err != nil {
|
|
return nil, nil, nil, errors.Wrap(err, "failed to unmarshal build image map")
|
|
}
|
|
|
|
return imageInfo, layerInfoMap, img, nil
|
|
}
|