1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Generate api/types:Image from the swagger spec

and rename it to a more appropriate name ImageSummary.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
Daniel Nephin 2016-10-03 15:17:39 -04:00
parent f06d8d6db9
commit b06c352783
13 changed files with 135 additions and 74 deletions

View file

@ -143,4 +143,5 @@ swagger-gen:
docker run --rm -v $(PWD):/work -w /work quay.io/goswagger/swagger \ docker run --rm -v $(PWD):/work -w /work quay.io/goswagger/swagger \
generate model -m "types" -f api/swagger.yaml -t api/ --skip-validator \ generate model -m "types" -f api/swagger.yaml -t api/ --skip-validator \
-n Volume \ -n Volume \
-n Port -n Port \
-n ImageSummary

View file

@ -25,7 +25,7 @@ type containerBackend interface {
type imageBackend interface { type imageBackend interface {
ImageDelete(imageRef string, force, prune bool) ([]types.ImageDelete, error) ImageDelete(imageRef string, force, prune bool) ([]types.ImageDelete, error)
ImageHistory(imageName string) ([]*types.ImageHistory, error) ImageHistory(imageName string) ([]*types.ImageHistory, error)
Images(filterArgs string, filter string, all bool, withExtraAttrs bool) ([]*types.Image, error) Images(filterArgs string, filter string, all bool, withExtraAttrs bool) ([]*types.ImageSummary, error)
LookupImage(name string) (*types.ImageInspect, error) LookupImage(name string) (*types.ImageInspect, error)
TagImage(imageName, repository, tag string) error TagImage(imageName, repository, tag string) error
ImagesPrune(config *types.ImagesPruneConfig) (*types.ImagesPruneReport, error) ImagesPrune(config *types.ImagesPruneConfig) (*types.ImagesPruneReport, error)

View file

@ -762,6 +762,58 @@ definitions:
type: "string" type: "string"
BaseLayer: BaseLayer:
type: "string" type: "string"
ImageSummary:
type: "object"
required:
- Id
- ParentId
- RepoTags
- RepoDigests
- Created
- Size
- SharedSize
- VirtualSize
- Labels
- Containers
properties:
Id:
type: "string"
x-nullable: false
ParentId:
type: "string"
x-nullable: false
RepoTags:
type: "array"
x-nullable: false
items:
type: "string"
RepoDigests:
type: "array"
x-nullable: false
items:
type: "string"
Created:
type: "integer"
x-nullable: false
Size:
type: "integer"
x-nullable: false
SharedSize:
type: "integer"
x-nullable: false
VirtualSize:
type: "integer"
x-nullable: false
Labels:
type: "object"
x-nullable: false
additionalProperties:
type: "string"
Containers:
x-nullable: false
type: "integer"
AuthConfig: AuthConfig:
type: "object" type: "object"
properties: properties:
@ -3829,37 +3881,11 @@ paths:
- "application/json" - "application/json"
responses: responses:
200: 200:
description: "no error" description: "Summary image data for the images matching the query"
schema: schema:
type: "array" type: "array"
items: items:
type: "object" $ref: "#/definitions/ImageSummary"
properties:
Id:
type: "string"
ParentId:
type: "string"
RepoTags:
type: "array"
items:
type: "string"
RepoDigests:
type: "array"
items:
type: "string"
Created:
type: "integer"
format: "int64"
Size:
type: "integer"
format: "int64"
VirtualSize:
type: "integer"
format: "int64"
Labels:
type: "object"
additionalProperties:
type: "string"
examples: examples:
application/json: application/json:
- RepoTags: - RepoTags:

View file

@ -0,0 +1,49 @@
package types
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
// ImageSummary image summary
// swagger:model ImageSummary
type ImageSummary struct {
// containers
// Required: true
Containers int64 `json:"Containers"`
// created
// Required: true
Created int64 `json:"Created"`
// Id
// Required: true
ID string `json:"Id"`
// labels
// Required: true
Labels map[string]string `json:"Labels"`
// parent Id
// Required: true
ParentID string `json:"ParentId"`
// repo digests
// Required: true
RepoDigests []string `json:"RepoDigests"`
// repo tags
// Required: true
RepoTags []string `json:"RepoTags"`
// shared size
// Required: true
SharedSize int64 `json:"SharedSize"`
// size
// Required: true
Size int64 `json:"Size"`
// virtual size
// Required: true
VirtualSize int64 `json:"VirtualSize"`
}

View file

@ -86,21 +86,6 @@ type ImageDelete struct {
Deleted string `json:",omitempty"` Deleted string `json:",omitempty"`
} }
// Image contains response of Remote API:
// GET "/images/json"
type Image struct {
ID string `json:"Id"`
ParentID string `json:"ParentId"`
RepoTags []string
RepoDigests []string
Created int64
Size int64
SharedSize int64
VirtualSize int64
Labels map[string]string
Containers int64
}
// GraphDriverData returns Image's graph driver config info // GraphDriverData returns Image's graph driver config info
// when calling inspect command // when calling inspect command
type GraphDriverData struct { type GraphDriverData struct {
@ -516,7 +501,7 @@ type Runtime struct {
// GET "/system/df" // GET "/system/df"
type DiskUsage struct { type DiskUsage struct {
LayersSize int64 LayersSize int64
Images []*Image Images []*ImageSummary
Containers []*Container Containers []*Container
Volumes []*Volume Volumes []*Volume
} }

View file

@ -31,7 +31,7 @@ type DiskUsageContext struct {
Context Context
Verbose bool Verbose bool
LayersSize int64 LayersSize int64
Images []*types.Image Images []*types.ImageSummary
Containers []*types.Container Containers []*types.Container
Volumes []*types.Volume Volumes []*types.Volume
} }
@ -155,7 +155,7 @@ func (ctx *DiskUsageContext) Write() {
type diskUsageImagesContext struct { type diskUsageImagesContext struct {
HeaderContext HeaderContext
totalSize int64 totalSize int64
images []*types.Image images []*types.ImageSummary
} }
func (c *diskUsageImagesContext) Type() string { func (c *diskUsageImagesContext) Type() string {

View file

@ -26,7 +26,7 @@ type ImageContext struct {
Digest bool Digest bool
} }
func isDangling(image types.Image) bool { func isDangling(image types.ImageSummary) bool {
return len(image.RepoTags) == 1 && image.RepoTags[0] == "<none>:<none>" && len(image.RepoDigests) == 1 && image.RepoDigests[0] == "<none>@<none>" return len(image.RepoTags) == 1 && image.RepoTags[0] == "<none>:<none>" && len(image.RepoDigests) == 1 && image.RepoDigests[0] == "<none>@<none>"
} }
@ -72,14 +72,14 @@ virtual_size: {{.Size}}
} }
// ImageWrite writes the formatter images using the ImageContext // ImageWrite writes the formatter images using the ImageContext
func ImageWrite(ctx ImageContext, images []types.Image) error { func ImageWrite(ctx ImageContext, images []types.ImageSummary) error {
render := func(format func(subContext subContext) error) error { render := func(format func(subContext subContext) error) error {
return imageFormat(ctx, images, format) return imageFormat(ctx, images, format)
} }
return ctx.Write(&imageContext{}, render) return ctx.Write(&imageContext{}, render)
} }
func imageFormat(ctx ImageContext, images []types.Image, format func(subContext subContext) error) error { func imageFormat(ctx ImageContext, images []types.ImageSummary, format func(subContext subContext) error) error {
for _, image := range images { for _, image := range images {
images := []*imageContext{} images := []*imageContext{}
if isDangling(image) { if isDangling(image) {
@ -184,7 +184,7 @@ func imageFormat(ctx ImageContext, images []types.Image, format func(subContext
type imageContext struct { type imageContext struct {
HeaderContext HeaderContext
trunc bool trunc bool
i types.Image i types.ImageSummary
repo string repo string
tag string tag string
digest string digest string

View file

@ -24,36 +24,36 @@ func TestImageContext(t *testing.T) {
call func() string call func() string
}{ }{
{imageContext{ {imageContext{
i: types.Image{ID: imageID}, i: types.ImageSummary{ID: imageID},
trunc: true, trunc: true,
}, stringid.TruncateID(imageID), imageIDHeader, ctx.ID}, }, stringid.TruncateID(imageID), imageIDHeader, ctx.ID},
{imageContext{ {imageContext{
i: types.Image{ID: imageID}, i: types.ImageSummary{ID: imageID},
trunc: false, trunc: false,
}, imageID, imageIDHeader, ctx.ID}, }, imageID, imageIDHeader, ctx.ID},
{imageContext{ {imageContext{
i: types.Image{Size: 10, VirtualSize: 10}, i: types.ImageSummary{Size: 10, VirtualSize: 10},
trunc: true, trunc: true,
}, "10 B", sizeHeader, ctx.Size}, }, "10 B", sizeHeader, ctx.Size},
{imageContext{ {imageContext{
i: types.Image{Created: unix}, i: types.ImageSummary{Created: unix},
trunc: true, trunc: true,
}, time.Unix(unix, 0).String(), createdAtHeader, ctx.CreatedAt}, }, time.Unix(unix, 0).String(), createdAtHeader, ctx.CreatedAt},
// FIXME // FIXME
// {imageContext{ // {imageContext{
// i: types.Image{Created: unix}, // i: types.ImageSummary{Created: unix},
// trunc: true, // trunc: true,
// }, units.HumanDuration(time.Unix(unix, 0)), createdSinceHeader, ctx.CreatedSince}, // }, units.HumanDuration(time.Unix(unix, 0)), createdSinceHeader, ctx.CreatedSince},
{imageContext{ {imageContext{
i: types.Image{}, i: types.ImageSummary{},
repo: "busybox", repo: "busybox",
}, "busybox", repositoryHeader, ctx.Repository}, }, "busybox", repositoryHeader, ctx.Repository},
{imageContext{ {imageContext{
i: types.Image{}, i: types.ImageSummary{},
tag: "latest", tag: "latest",
}, "latest", tagHeader, ctx.Tag}, }, "latest", tagHeader, ctx.Tag},
{imageContext{ {imageContext{
i: types.Image{}, i: types.ImageSummary{},
digest: "sha256:d149ab53f8718e987c3a3024bb8aa0e2caadf6c0328f1d9d850b2a2a67f2819a", digest: "sha256:d149ab53f8718e987c3a3024bb8aa0e2caadf6c0328f1d9d850b2a2a67f2819a",
}, "sha256:d149ab53f8718e987c3a3024bb8aa0e2caadf6c0328f1d9d850b2a2a67f2819a", digestHeader, ctx.Digest}, }, "sha256:d149ab53f8718e987c3a3024bb8aa0e2caadf6c0328f1d9d850b2a2a67f2819a", digestHeader, ctx.Digest},
} }
@ -262,7 +262,7 @@ image_id: imageID3
} }
for _, testcase := range cases { for _, testcase := range cases {
images := []types.Image{ images := []types.ImageSummary{
{ID: "imageID1", RepoTags: []string{"image:tag1"}, RepoDigests: []string{"image@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"}, Created: unixTime}, {ID: "imageID1", RepoTags: []string{"image:tag1"}, RepoDigests: []string{"image@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"}, Created: unixTime},
{ID: "imageID2", RepoTags: []string{"image:tag2"}, Created: unixTime}, {ID: "imageID2", RepoTags: []string{"image:tag2"}, Created: unixTime},
{ID: "imageID3", RepoTags: []string{"<none>:<none>"}, RepoDigests: []string{"<none>@<none>"}, Created: unixTime}, {ID: "imageID3", RepoTags: []string{"<none>:<none>"}, RepoDigests: []string{"<none>@<none>"}, Created: unixTime},
@ -280,7 +280,7 @@ image_id: imageID3
func TestImageContextWriteWithNoImage(t *testing.T) { func TestImageContextWriteWithNoImage(t *testing.T) {
out := bytes.NewBufferString("") out := bytes.NewBufferString("")
images := []types.Image{} images := []types.ImageSummary{}
contexts := []struct { contexts := []struct {
context ImageContext context ImageContext

View file

@ -10,8 +10,8 @@ import (
) )
// ImageList returns a list of images in the docker host. // ImageList returns a list of images in the docker host.
func (cli *Client) ImageList(ctx context.Context, options types.ImageListOptions) ([]types.Image, error) { func (cli *Client) ImageList(ctx context.Context, options types.ImageListOptions) ([]types.ImageSummary, error) {
var images []types.Image var images []types.ImageSummary
query := url.Values{} query := url.Values{}
if options.Filters.Len() > 0 { if options.Filters.Len() > 0 {

View file

@ -93,7 +93,7 @@ func TestImageList(t *testing.T) {
return nil, fmt.Errorf("%s not set in URL query properly. Expected '%s', got %s", key, expected, actual) return nil, fmt.Errorf("%s not set in URL query properly. Expected '%s', got %s", key, expected, actual)
} }
} }
content, err := json.Marshal([]types.Image{ content, err := json.Marshal([]types.ImageSummary{
{ {
ID: "image_id2", ID: "image_id2",
}, },

View file

@ -71,7 +71,7 @@ type ImageAPIClient interface {
ImageHistory(ctx context.Context, image string) ([]types.ImageHistory, error) ImageHistory(ctx context.Context, image string) ([]types.ImageHistory, error)
ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error)
ImageInspectWithRaw(ctx context.Context, image string) (types.ImageInspect, []byte, error) ImageInspectWithRaw(ctx context.Context, image string) (types.ImageInspect, []byte, error)
ImageList(ctx context.Context, options types.ImageListOptions) ([]types.Image, error) ImageList(ctx context.Context, options types.ImageListOptions) ([]types.ImageSummary, error)
ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error)
ImagePull(ctx context.Context, ref string, options types.ImagePullOptions) (io.ReadCloser, error) ImagePull(ctx context.Context, ref string, options types.ImagePullOptions) (io.ReadCloser, error)
ImagePush(ctx context.Context, ref string, options types.ImagePushOptions) (io.ReadCloser, error) ImagePush(ctx context.Context, ref string, options types.ImagePushOptions) (io.ReadCloser, error)

View file

@ -22,7 +22,7 @@ var acceptedImageFilterTags = map[string]bool{
// byCreated is a temporary type used to sort a list of images by creation // byCreated is a temporary type used to sort a list of images by creation
// time. // time.
type byCreated []*types.Image type byCreated []*types.ImageSummary
func (r byCreated) Len() int { return len(r) } func (r byCreated) Len() int { return len(r) }
func (r byCreated) Swap(i, j int) { r[i], r[j] = r[j], r[i] } func (r byCreated) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
@ -38,7 +38,7 @@ func (daemon *Daemon) Map() map[image.ID]*image.Image {
// filter is a shell glob string applied to repository names. The argument // filter is a shell glob string applied to repository names. The argument
// named all controls whether all images in the graph are filtered, or just // named all controls whether all images in the graph are filtered, or just
// the heads. // the heads.
func (daemon *Daemon) Images(filterArgs, filter string, all bool, withExtraAttrs bool) ([]*types.Image, error) { func (daemon *Daemon) Images(filterArgs, filter string, all bool, withExtraAttrs bool) ([]*types.ImageSummary, error) {
var ( var (
allImages map[image.ID]*image.Image allImages map[image.ID]*image.Image
err error err error
@ -83,8 +83,8 @@ func (daemon *Daemon) Images(filterArgs, filter string, all bool, withExtraAttrs
return nil, err return nil, err
} }
images := []*types.Image{} images := []*types.ImageSummary{}
var imagesMap map[*image.Image]*types.Image var imagesMap map[*image.Image]*types.ImageSummary
var layerRefs map[layer.ChainID]int var layerRefs map[layer.ChainID]int
var allLayers map[layer.ChainID]layer.Layer var allLayers map[layer.ChainID]layer.Layer
var allContainers []*container.Container var allContainers []*container.Container
@ -181,7 +181,7 @@ func (daemon *Daemon) Images(filterArgs, filter string, all bool, withExtraAttrs
if imagesMap == nil { if imagesMap == nil {
allContainers = daemon.List() allContainers = daemon.List()
allLayers = daemon.layerStore.Map() allLayers = daemon.layerStore.Map()
imagesMap = make(map[*image.Image]*types.Image) imagesMap = make(map[*image.Image]*types.ImageSummary)
layerRefs = make(map[layer.ChainID]int) layerRefs = make(map[layer.ChainID]int)
} }
@ -241,8 +241,8 @@ func (daemon *Daemon) Images(filterArgs, filter string, all bool, withExtraAttrs
return images, nil return images, nil
} }
func newImage(image *image.Image, virtualSize int64) *types.Image { func newImage(image *image.Image, virtualSize int64) *types.ImageSummary {
newImage := new(types.Image) newImage := new(types.ImageSummary)
newImage.ParentID = image.Parent.String() newImage.ParentID = image.Parent.String()
newImage.ID = image.ID().String() newImage.ID = image.ID().String()
newImage.Created = image.Created.Unix() newImage.Created = image.Created.Unix()

View file

@ -18,7 +18,7 @@ func (s *DockerSuite) TestAPIImagesFilter(c *check.C) {
for _, n := range []string{name, name2, name3} { for _, n := range []string{name, name2, name3} {
dockerCmd(c, "tag", "busybox", n) dockerCmd(c, "tag", "busybox", n)
} }
type image types.Image type image types.ImageSummary
getImages := func(filter string) []image { getImages := func(filter string) []image {
v := url.Values{} v := url.Values{}
v.Set("filter", filter) v.Set("filter", filter)