Signed-off-by: Daniel Nephin <dnephin@docker.com>
| ... | ... |
@@ -25,7 +25,7 @@ type containerBackend interface {
|
| 25 | 25 |
} |
| 26 | 26 |
|
| 27 | 27 |
type imageBackend interface {
|
| 28 |
- ImageDelete(imageRef string, force, prune bool) ([]types.ImageDelete, error) |
|
| 28 |
+ ImageDelete(imageRef string, force, prune bool) ([]types.ImageDeleteResponseItem, error) |
|
| 29 | 29 |
ImageHistory(imageName string) ([]*image.HistoryResponseItem, error) |
| 30 | 30 |
Images(imageFilters filters.Args, all bool, withExtraAttrs bool) ([]*types.ImageSummary, error) |
| 31 | 31 |
LookupImage(name string) (*types.ImageInspect, error) |
| ... | ... |
@@ -2337,7 +2337,7 @@ definitions: |
| 2337 | 2337 |
- |
| 2338 | 2338 |
NetworkID: "4qvuz4ko70xaltuqbt8956gd1" |
| 2339 | 2339 |
Addr: "10.255.0.3/16" |
| 2340 |
- ImageDeleteResponse: |
|
| 2340 |
+ ImageDeleteResponseItem: |
|
| 2341 | 2341 |
type: "object" |
| 2342 | 2342 |
properties: |
| 2343 | 2343 |
Untagged: |
| ... | ... |
@@ -4780,19 +4780,20 @@ paths: |
| 4780 | 4780 |
delete: |
| 4781 | 4781 |
summary: "Remove an image" |
| 4782 | 4782 |
description: | |
| 4783 |
- Remove an image, along with any untagged parent images that were referenced by that image. |
|
| 4783 |
+ Remove an image, along with any untagged parent images that were |
|
| 4784 |
+ referenced by that image. |
|
| 4784 | 4785 |
|
| 4785 |
- Images can't be removed if they have descendant images, are being used by a running container or are being used by a build. |
|
| 4786 |
+ Images can't be removed if they have descendant images, are being |
|
| 4787 |
+ used by a running container or are being used by a build. |
|
| 4786 | 4788 |
operationId: "ImageDelete" |
| 4787 |
- produces: |
|
| 4788 |
- - "application/json" |
|
| 4789 |
+ produces: ["application/json"] |
|
| 4789 | 4790 |
responses: |
| 4790 | 4791 |
200: |
| 4791 |
- description: "No error" |
|
| 4792 |
+ description: "The image was deleted successfully" |
|
| 4792 | 4793 |
schema: |
| 4793 | 4794 |
type: "array" |
| 4794 | 4795 |
items: |
| 4795 |
- $ref: "#/definitions/ImageDeleteResponse" |
|
| 4796 |
+ $ref: "#/definitions/ImageDeleteResponseItem" |
|
| 4796 | 4797 |
examples: |
| 4797 | 4798 |
application/json: |
| 4798 | 4799 |
- Untagged: "3e2f21a89f" |
| ... | ... |
@@ -4920,7 +4921,7 @@ paths: |
| 4920 | 4920 |
description: "Images that were deleted" |
| 4921 | 4921 |
type: "array" |
| 4922 | 4922 |
items: |
| 4923 |
- $ref: "#/definitions/ImageDeleteResponse" |
|
| 4923 |
+ $ref: "#/definitions/ImageDeleteResponseItem" |
|
| 4924 | 4924 |
SpaceReclaimed: |
| 4925 | 4925 |
description: "Disk space reclaimed in bytes" |
| 4926 | 4926 |
type: "integer" |
| 4927 | 4927 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,15 @@ |
| 0 |
+package types |
|
| 1 |
+ |
|
| 2 |
+// This file was generated by the swagger tool. |
|
| 3 |
+// Editing this file might prove futile when you re-run the swagger generate command |
|
| 4 |
+ |
|
| 5 |
+// ImageDeleteResponseItem image delete response item |
|
| 6 |
+// swagger:model ImageDeleteResponseItem |
|
| 7 |
+type ImageDeleteResponseItem struct {
|
|
| 8 |
+ |
|
| 9 |
+ // The image ID of an image that was deleted |
|
| 10 |
+ Deleted string `json:"Deleted,omitempty"` |
|
| 11 |
+ |
|
| 12 |
+ // The image ID of an image that was untagged |
|
| 13 |
+ Untagged string `json:"Untagged,omitempty"` |
|
| 14 |
+} |
| ... | ... |
@@ -17,13 +17,6 @@ import ( |
| 17 | 17 |
"github.com/docker/go-connections/nat" |
| 18 | 18 |
) |
| 19 | 19 |
|
| 20 |
-// ImageDelete contains response of Engine API: |
|
| 21 |
-// DELETE "/images/{name:.*}"
|
|
| 22 |
-type ImageDelete struct {
|
|
| 23 |
- Untagged string `json:",omitempty"` |
|
| 24 |
- Deleted string `json:",omitempty"` |
|
| 25 |
-} |
|
| 26 |
- |
|
| 27 | 20 |
// GraphDriverData returns Image's graph driver config info |
| 28 | 21 |
// when calling inspect command |
| 29 | 22 |
type GraphDriverData struct {
|
| ... | ... |
@@ -508,7 +501,7 @@ type VolumesPruneReport struct {
|
| 508 | 508 |
// ImagesPruneReport contains the response for Engine API: |
| 509 | 509 |
// POST "/images/prune" |
| 510 | 510 |
type ImagesPruneReport struct {
|
| 511 |
- ImagesDeleted []ImageDelete |
|
| 511 |
+ ImagesDeleted []ImageDeleteResponseItem |
|
| 512 | 512 |
SpaceReclaimed uint64 |
| 513 | 513 |
} |
| 514 | 514 |
|
| ... | ... |
@@ -9,7 +9,7 @@ import ( |
| 9 | 9 |
) |
| 10 | 10 |
|
| 11 | 11 |
// ImageRemove removes an image from the docker host. |
| 12 |
-func (cli *Client) ImageRemove(ctx context.Context, imageID string, options types.ImageRemoveOptions) ([]types.ImageDelete, error) {
|
|
| 12 |
+func (cli *Client) ImageRemove(ctx context.Context, imageID string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) {
|
|
| 13 | 13 |
query := url.Values{}
|
| 14 | 14 |
|
| 15 | 15 |
if options.Force {
|
| ... | ... |
@@ -24,7 +24,7 @@ func (cli *Client) ImageRemove(ctx context.Context, imageID string, options type |
| 24 | 24 |
return nil, err |
| 25 | 25 |
} |
| 26 | 26 |
|
| 27 |
- var dels []types.ImageDelete |
|
| 27 |
+ var dels []types.ImageDeleteResponseItem |
|
| 28 | 28 |
err = json.NewDecoder(resp.body).Decode(&dels) |
| 29 | 29 |
ensureReaderClosed(resp) |
| 30 | 30 |
return dels, err |
| ... | ... |
@@ -63,7 +63,7 @@ func TestImageRemove(t *testing.T) {
|
| 63 | 63 |
return nil, fmt.Errorf("%s not set in URL query properly. Expected '%s', got %s", key, expected, actual)
|
| 64 | 64 |
} |
| 65 | 65 |
} |
| 66 |
- b, err := json.Marshal([]types.ImageDelete{
|
|
| 66 |
+ b, err := json.Marshal([]types.ImageDeleteResponseItem{
|
|
| 67 | 67 |
{
|
| 68 | 68 |
Untagged: "image_id1", |
| 69 | 69 |
}, |
| ... | ... |
@@ -79,7 +79,7 @@ type ImageAPIClient interface {
|
| 79 | 79 |
ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error) |
| 80 | 80 |
ImagePull(ctx context.Context, ref string, options types.ImagePullOptions) (io.ReadCloser, error) |
| 81 | 81 |
ImagePush(ctx context.Context, ref string, options types.ImagePushOptions) (io.ReadCloser, error) |
| 82 |
- ImageRemove(ctx context.Context, image string, options types.ImageRemoveOptions) ([]types.ImageDelete, error) |
|
| 82 |
+ ImageRemove(ctx context.Context, image string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) |
|
| 83 | 83 |
ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error) |
| 84 | 84 |
ImageSave(ctx context.Context, images []string) (io.ReadCloser, error) |
| 85 | 85 |
ImageTag(ctx context.Context, image, ref string) error |
| ... | ... |
@@ -61,9 +61,9 @@ const ( |
| 61 | 61 |
// FIXME: remove ImageDelete's dependency on Daemon, then move to the graph |
| 62 | 62 |
// package. This would require that we no longer need the daemon to determine |
| 63 | 63 |
// whether images are being used by a stopped or running container. |
| 64 |
-func (daemon *Daemon) ImageDelete(imageRef string, force, prune bool) ([]types.ImageDelete, error) {
|
|
| 64 |
+func (daemon *Daemon) ImageDelete(imageRef string, force, prune bool) ([]types.ImageDeleteResponseItem, error) {
|
|
| 65 | 65 |
start := time.Now() |
| 66 |
- records := []types.ImageDelete{}
|
|
| 66 |
+ records := []types.ImageDeleteResponseItem{}
|
|
| 67 | 67 |
|
| 68 | 68 |
imgID, err := daemon.GetImageID(imageRef) |
| 69 | 69 |
if err != nil {
|
| ... | ... |
@@ -99,7 +99,7 @@ func (daemon *Daemon) ImageDelete(imageRef string, force, prune bool) ([]types.I |
| 99 | 99 |
return nil, err |
| 100 | 100 |
} |
| 101 | 101 |
|
| 102 |
- untaggedRecord := types.ImageDelete{Untagged: parsedRef.String()}
|
|
| 102 |
+ untaggedRecord := types.ImageDeleteResponseItem{Untagged: parsedRef.String()}
|
|
| 103 | 103 |
|
| 104 | 104 |
daemon.LogImageEvent(imgID.String(), imgID.String(), "untag") |
| 105 | 105 |
records = append(records, untaggedRecord) |
| ... | ... |
@@ -126,7 +126,7 @@ func (daemon *Daemon) ImageDelete(imageRef string, force, prune bool) ([]types.I |
| 126 | 126 |
return records, err |
| 127 | 127 |
} |
| 128 | 128 |
|
| 129 |
- untaggedRecord := types.ImageDelete{Untagged: repoRef.String()}
|
|
| 129 |
+ untaggedRecord := types.ImageDeleteResponseItem{Untagged: repoRef.String()}
|
|
| 130 | 130 |
records = append(records, untaggedRecord) |
| 131 | 131 |
} else {
|
| 132 | 132 |
remainingRefs = append(remainingRefs, repoRef) |
| ... | ... |
@@ -162,7 +162,7 @@ func (daemon *Daemon) ImageDelete(imageRef string, force, prune bool) ([]types.I |
| 162 | 162 |
return nil, err |
| 163 | 163 |
} |
| 164 | 164 |
|
| 165 |
- untaggedRecord := types.ImageDelete{Untagged: parsedRef.String()}
|
|
| 165 |
+ untaggedRecord := types.ImageDeleteResponseItem{Untagged: parsedRef.String()}
|
|
| 166 | 166 |
|
| 167 | 167 |
daemon.LogImageEvent(imgID.String(), imgID.String(), "untag") |
| 168 | 168 |
records = append(records, untaggedRecord) |
| ... | ... |
@@ -244,9 +244,9 @@ func (daemon *Daemon) removeImageRef(ref reference.Named) (reference.Named, erro |
| 244 | 244 |
// removeAllReferencesToImageID attempts to remove every reference to the given |
| 245 | 245 |
// imgID from this daemon's store of repository tag/digest references. Returns |
| 246 | 246 |
// on the first encountered error. Removed references are logged to this |
| 247 |
-// daemon's event service. An "Untagged" types.ImageDelete is added to the |
|
| 247 |
+// daemon's event service. An "Untagged" types.ImageDeleteResponseItem is added to the |
|
| 248 | 248 |
// given list of records. |
| 249 |
-func (daemon *Daemon) removeAllReferencesToImageID(imgID image.ID, records *[]types.ImageDelete) error {
|
|
| 249 |
+func (daemon *Daemon) removeAllReferencesToImageID(imgID image.ID, records *[]types.ImageDeleteResponseItem) error {
|
|
| 250 | 250 |
imageRefs := daemon.referenceStore.References(imgID.Digest()) |
| 251 | 251 |
|
| 252 | 252 |
for _, imageRef := range imageRefs {
|
| ... | ... |
@@ -255,7 +255,7 @@ func (daemon *Daemon) removeAllReferencesToImageID(imgID image.ID, records *[]ty |
| 255 | 255 |
return err |
| 256 | 256 |
} |
| 257 | 257 |
|
| 258 |
- untaggedRecord := types.ImageDelete{Untagged: parsedRef.String()}
|
|
| 258 |
+ untaggedRecord := types.ImageDeleteResponseItem{Untagged: parsedRef.String()}
|
|
| 259 | 259 |
|
| 260 | 260 |
daemon.LogImageEvent(imgID.String(), imgID.String(), "untag") |
| 261 | 261 |
*records = append(*records, untaggedRecord) |
| ... | ... |
@@ -295,7 +295,7 @@ func (idc *imageDeleteConflict) Error() string {
|
| 295 | 295 |
// conflict is encountered, it will be returned immediately without deleting |
| 296 | 296 |
// the image. If quiet is true, any encountered conflicts will be ignored and |
| 297 | 297 |
// the function will return nil immediately without deleting the image. |
| 298 |
-func (daemon *Daemon) imageDeleteHelper(imgID image.ID, records *[]types.ImageDelete, force, prune, quiet bool) error {
|
|
| 298 |
+func (daemon *Daemon) imageDeleteHelper(imgID image.ID, records *[]types.ImageDeleteResponseItem, force, prune, quiet bool) error {
|
|
| 299 | 299 |
// First, determine if this image has any conflicts. Ignore soft conflicts |
| 300 | 300 |
// if force is true. |
| 301 | 301 |
c := conflictHard |
| ... | ... |
@@ -331,9 +331,9 @@ func (daemon *Daemon) imageDeleteHelper(imgID image.ID, records *[]types.ImageDe |
| 331 | 331 |
} |
| 332 | 332 |
|
| 333 | 333 |
daemon.LogImageEvent(imgID.String(), imgID.String(), "delete") |
| 334 |
- *records = append(*records, types.ImageDelete{Deleted: imgID.String()})
|
|
| 334 |
+ *records = append(*records, types.ImageDeleteResponseItem{Deleted: imgID.String()})
|
|
| 335 | 335 |
for _, removedLayer := range removedLayers {
|
| 336 |
- *records = append(*records, types.ImageDelete{Deleted: removedLayer.ChainID.String()})
|
|
| 336 |
+ *records = append(*records, types.ImageDeleteResponseItem{Deleted: removedLayer.ChainID.String()})
|
|
| 337 | 337 |
} |
| 338 | 338 |
|
| 339 | 339 |
if !prune || parent == "" {
|
| ... | ... |
@@ -114,7 +114,7 @@ func (daemon *Daemon) ImagesPrune(pruneFilters filters.Args) (*types.ImagesPrune |
| 114 | 114 |
continue |
| 115 | 115 |
} |
| 116 | 116 |
|
| 117 |
- deletedImages := []types.ImageDelete{}
|
|
| 117 |
+ deletedImages := []types.ImageDeleteResponseItem{}
|
|
| 118 | 118 |
refs := daemon.referenceStore.References(dgst) |
| 119 | 119 |
if len(refs) > 0 {
|
| 120 | 120 |
if danglingOnly {
|
| ... | ... |
@@ -3,13 +3,14 @@ set -eu |
| 3 | 3 |
|
| 4 | 4 |
swagger generate model -f api/swagger.yaml \ |
| 5 | 5 |
-t api -m types --skip-validator -C api/swagger-gen.yaml \ |
| 6 |
- -n Volume \ |
|
| 7 |
- -n Port \ |
|
| 8 |
- -n ImageSummary \ |
|
| 9 |
- -n Plugin -n PluginDevice -n PluginMount -n PluginEnv -n PluginInterfaceType \ |
|
| 10 | 6 |
-n ErrorResponse \ |
| 11 | 7 |
-n IdResponse \ |
| 12 |
- -n ServiceUpdateResponse |
|
| 8 |
+ -n ImageDeleteResponseItem \ |
|
| 9 |
+ -n ImageSummary \ |
|
| 10 |
+ -n Plugin -n PluginDevice -n PluginMount -n PluginEnv -n PluginInterfaceType \ |
|
| 11 |
+ -n Port \ |
|
| 12 |
+ -n ServiceUpdateResponse \ |
|
| 13 |
+ -n Volume |
|
| 13 | 14 |
|
| 14 | 15 |
swagger generate operation -f api/swagger.yaml \ |
| 15 | 16 |
-t api -a types -m types -C api/swagger-gen.yaml \ |