Implemented size parameter on GetContainer

Signed-off-by: Steve Taylor <steven@taylormuff.co.uk>
This commit is contained in:
Steve Taylor 2020-03-05 23:02:45 +00:00
parent da15f2f881
commit 83e52cf787
2 changed files with 35 additions and 4 deletions

View File

@ -101,6 +101,20 @@ func ListContainers(w http.ResponseWriter, r *http.Request) {
func GetContainer(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value("runtime").(*libpod.Runtime)
decoder := r.Context().Value("decoder").(*schema.Decoder)
query := struct {
Size bool `schema:"size"`
}{
// override any golang type defaults
}
// Default Size to false
query.Size = false
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()))
return
}
name := utils.GetName(r)
ctnr, err := runtime.LookupContainer(name)
@ -108,7 +122,7 @@ func GetContainer(w http.ResponseWriter, r *http.Request) {
utils.ContainerNotFound(w, name, err)
return
}
api, err := handlers.LibpodToContainerJSON(ctnr)
api, err := handlers.LibpodToContainerJSON(ctnr, query.Size)
if err != nil {
utils.InternalServerError(w, err)
return

View File

@ -402,7 +402,12 @@ func LibpodToContainer(l *libpod.Container, infoData []define.InfoData, sz bool)
}, nil
}
func LibpodToContainerJSON(l *libpod.Container) (*docker.ContainerJSON, error) {
func LibpodToContainerJSON(l *libpod.Container, sz bool) (*docker.ContainerJSON, error) {
var (
sizeRootFs int64
sizeRW int64
)
_, imageName := l.Image()
inspect, err := l.Inspect(true)
if err != nil {
@ -439,6 +444,18 @@ func LibpodToContainerJSON(l *libpod.Container) (*docker.ContainerJSON, error) {
return nil, err
}
if sz {
if sizeRW, err = l.RWSize(); err != nil {
return nil, err
}
if sizeRootFs, err = l.RootFsSize(); err != nil {
return nil, err
}
} else {
sizeRW = 0
sizeRootFs = 0
}
cb := docker.ContainerJSONBase{
ID: l.ID(),
Created: l.CreatedTime().String(),
@ -461,8 +478,8 @@ func LibpodToContainerJSON(l *libpod.Container) (*docker.ContainerJSON, error) {
ExecIDs: inspect.ExecIDs,
HostConfig: &hc,
GraphDriver: graphDriver,
SizeRw: inspect.SizeRw,
SizeRootFs: &inspect.SizeRootFs,
SizeRw: &sizeRW,
SizeRootFs: &sizeRootFs,
}
stopTimeout := int(l.StopTimeout())