diff --git a/api/server/router/image/backend.go b/api/server/router/image/backend.go index ecac8b3225..1ab55f0c70 100644 --- a/api/server/router/image/backend.go +++ b/api/server/router/image/backend.go @@ -5,7 +5,6 @@ import ( "io" "github.com/distribution/reference" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/image" @@ -28,7 +27,7 @@ type imageBackend interface { Images(ctx context.Context, opts image.ListOptions) ([]*image.Summary, error) GetImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (*dockerimage.Image, error) TagImage(ctx context.Context, id dockerimage.ID, newRef reference.Named) error - ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error) + ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*image.PruneReport, error) } type importExportBackend interface { diff --git a/api/types/image/image.go b/api/types/image/image.go index 167df28c7b..8e97ab3f44 100644 --- a/api/types/image/image.go +++ b/api/types/image/image.go @@ -7,3 +7,10 @@ type Metadata struct { // LastTagTime is the date and time at which the image was last tagged. LastTagTime time.Time `json:",omitempty"` } + +// PruneReport contains the response for Engine API: +// POST "/images/prune" +type PruneReport struct { + ImagesDeleted []DeleteResponse + SpaceReclaimed uint64 +} diff --git a/api/types/types.go b/api/types/types.go index 6ff6add549..f0c648e158 100644 --- a/api/types/types.go +++ b/api/types/types.go @@ -419,13 +419,6 @@ type DiskUsage struct { BuilderSize int64 `json:",omitempty"` // Deprecated: deprecated in API 1.38, and no longer used since API 1.40. } -// ImagesPruneReport contains the response for Engine API: -// POST "/images/prune" -type ImagesPruneReport struct { - ImagesDeleted []image.DeleteResponse - SpaceReclaimed uint64 -} - // BuildCachePruneReport contains the response for Engine API: // POST "/build/prune" type BuildCachePruneReport struct { diff --git a/api/types/types_deprecated.go b/api/types/types_deprecated.go index ffa8d4e77b..3781a48aa1 100644 --- a/api/types/types_deprecated.go +++ b/api/types/types_deprecated.go @@ -2,10 +2,17 @@ package types import ( "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/volume" ) +// ImagesPruneReport contains the response for Engine API: +// POST "/images/prune" +// +// Deprecated: use [image.PruneReport]. +type ImagesPruneReport = image.PruneReport + // VolumesPruneReport contains the response for Engine API: // POST "/volumes/prune". // diff --git a/client/image_prune.go b/client/image_prune.go index 6b82d6ab6c..5ee987e248 100644 --- a/client/image_prune.go +++ b/client/image_prune.go @@ -5,13 +5,13 @@ import ( "encoding/json" "fmt" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/image" ) // ImagesPrune requests the daemon to delete unused data -func (cli *Client) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (types.ImagesPruneReport, error) { - var report types.ImagesPruneReport +func (cli *Client) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (image.PruneReport, error) { + var report image.PruneReport if err := cli.NewVersionError(ctx, "1.25", "image prune"); err != nil { return report, err diff --git a/client/image_prune_test.go b/client/image_prune_test.go index 5abe9ea317..10414fb701 100644 --- a/client/image_prune_test.go +++ b/client/image_prune_test.go @@ -13,7 +13,6 @@ import ( "github.com/docker/docker/api/types/image" "github.com/docker/docker/errdefs" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" @@ -84,7 +83,7 @@ func TestImagesPrune(t *testing.T) { actual := query.Get(key) assert.Check(t, is.Equal(expected, actual)) } - content, err := json.Marshal(types.ImagesPruneReport{ + content, err := json.Marshal(image.PruneReport{ ImagesDeleted: []image.DeleteResponse{ { Deleted: "image_id1", diff --git a/client/interface.go b/client/interface.go index 0c8ab5be51..ea0550d9a9 100644 --- a/client/interface.go +++ b/client/interface.go @@ -102,7 +102,7 @@ type ImageAPIClient interface { ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error) ImageSave(ctx context.Context, images []string) (io.ReadCloser, error) ImageTag(ctx context.Context, image, ref string) error - ImagesPrune(ctx context.Context, pruneFilter filters.Args) (types.ImagesPruneReport, error) + ImagesPrune(ctx context.Context, pruneFilter filters.Args) (image.PruneReport, error) } // NetworkAPIClient defines API client methods for the networks diff --git a/daemon/containerd/image_prune.go b/daemon/containerd/image_prune.go index 763acd86ad..6ac064955e 100644 --- a/daemon/containerd/image_prune.go +++ b/daemon/containerd/image_prune.go @@ -8,7 +8,6 @@ import ( cerrdefs "github.com/containerd/errdefs" "github.com/containerd/log" "github.com/distribution/reference" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/image" "github.com/docker/docker/errdefs" @@ -31,7 +30,7 @@ var imagesAcceptedFilters = map[string]bool{ var errPruneRunning = errdefs.Conflict(errors.New("a prune operation is already running")) // ImagesPrune removes unused images -func (i *ImageService) ImagesPrune(ctx context.Context, fltrs filters.Args) (*types.ImagesPruneReport, error) { +func (i *ImageService) ImagesPrune(ctx context.Context, fltrs filters.Args) (*image.PruneReport, error) { if !i.pruneRunning.CompareAndSwap(false, true) { return nil, errPruneRunning } @@ -62,8 +61,8 @@ func (i *ImageService) ImagesPrune(ctx context.Context, fltrs filters.Args) (*ty return i.pruneUnused(ctx, filterFunc, danglingOnly) } -func (i *ImageService) pruneUnused(ctx context.Context, filterFunc imageFilterFunc, danglingOnly bool) (*types.ImagesPruneReport, error) { - report := types.ImagesPruneReport{} +func (i *ImageService) pruneUnused(ctx context.Context, filterFunc imageFilterFunc, danglingOnly bool) (*image.PruneReport, error) { + report := image.PruneReport{} allImages, err := i.images.List(ctx) if err != nil { diff --git a/daemon/image_service.go b/daemon/image_service.go index 12a61b4022..30a8d098d4 100644 --- a/daemon/image_service.go +++ b/daemon/image_service.go @@ -5,7 +5,6 @@ import ( "io" "github.com/distribution/reference" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/filters" @@ -37,7 +36,7 @@ type ImageService interface { Images(ctx context.Context, opts imagetype.ListOptions) ([]*imagetype.Summary, error) LogImageEvent(imageID, refName string, action events.Action) CountImages(ctx context.Context) int - ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error) + ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*imagetype.PruneReport, error) ImportImage(ctx context.Context, ref reference.Named, platform *ocispec.Platform, msg string, layerReader io.Reader, changes []string) (image.ID, error) TagImage(ctx context.Context, imageID image.ID, newTag reference.Named) error GetImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (*image.Image, error) diff --git a/daemon/images/image_prune.go b/daemon/images/image_prune.go index 7634b837ff..182bf98f46 100644 --- a/daemon/images/image_prune.go +++ b/daemon/images/image_prune.go @@ -9,7 +9,6 @@ import ( "github.com/containerd/log" "github.com/distribution/reference" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/filters" imagetypes "github.com/docker/docker/api/types/image" @@ -33,7 +32,7 @@ var imagesAcceptedFilters = map[string]bool{ var errPruneRunning = errdefs.Conflict(errors.New("a prune operation is already running")) // ImagesPrune removes unused images -func (i *ImageService) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error) { +func (i *ImageService) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*imagetypes.PruneReport, error) { if !atomic.CompareAndSwapInt32(&i.pruneRunning, 0, 1) { return nil, errPruneRunning } @@ -45,7 +44,7 @@ func (i *ImageService) ImagesPrune(ctx context.Context, pruneFilters filters.Arg return nil, err } - rep := &types.ImagesPruneReport{} + rep := &imagetypes.PruneReport{} danglingOnly, err := pruneFilters.GetBoolOrDefault("dangling", true) if err != nil {