Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -200,7 +200,7 @@ type VolumeAPIClient interface {
|
| 200 | 200 |
VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error) |
| 201 | 201 |
VolumeList(ctx context.Context, options VolumeListOptions) (volume.ListResponse, error) |
| 202 | 202 |
VolumeRemove(ctx context.Context, volumeID string, force bool) error |
| 203 |
- VolumesPrune(ctx context.Context, pruneFilter Filters) (volume.PruneReport, error) |
|
| 203 |
+ VolumesPrune(ctx context.Context, opts VolumePruneOptions) (VolumePruneResult, error) |
|
| 204 | 204 |
VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error |
| 205 | 205 |
} |
| 206 | 206 |
|
| ... | ... |
@@ -9,21 +9,31 @@ import ( |
| 9 | 9 |
"github.com/moby/moby/api/types/volume" |
| 10 | 10 |
) |
| 11 | 11 |
|
| 12 |
+// VolumePruneOptions holds parameters to prune networks. |
|
| 13 |
+type VolumePruneOptions struct {
|
|
| 14 |
+ Filters Filters |
|
| 15 |
+} |
|
| 16 |
+ |
|
| 17 |
+// VolumePruneResult holds the result from the [Client.VolumesPrune] method. |
|
| 18 |
+type VolumePruneResult struct {
|
|
| 19 |
+ Report volume.PruneReport |
|
| 20 |
+} |
|
| 21 |
+ |
|
| 12 | 22 |
// VolumesPrune requests the daemon to delete unused data |
| 13 |
-func (cli *Client) VolumesPrune(ctx context.Context, pruneFilters Filters) (volume.PruneReport, error) {
|
|
| 23 |
+func (cli *Client) VolumesPrune(ctx context.Context, opts VolumePruneOptions) (VolumePruneResult, error) {
|
|
| 14 | 24 |
query := url.Values{}
|
| 15 |
- pruneFilters.updateURLValues(query) |
|
| 25 |
+ opts.Filters.updateURLValues(query) |
|
| 16 | 26 |
|
| 17 | 27 |
resp, err := cli.post(ctx, "/volumes/prune", query, nil, nil) |
| 18 | 28 |
defer ensureReaderClosed(resp) |
| 19 | 29 |
if err != nil {
|
| 20 |
- return volume.PruneReport{}, err
|
|
| 30 |
+ return VolumePruneResult{}, err
|
|
| 21 | 31 |
} |
| 22 | 32 |
|
| 23 | 33 |
var report volume.PruneReport |
| 24 | 34 |
if err := json.NewDecoder(resp.Body).Decode(&report); err != nil {
|
| 25 |
- return volume.PruneReport{}, fmt.Errorf("Error retrieving volume prune report: %v", err)
|
|
| 35 |
+ return VolumePruneResult{}, fmt.Errorf("Error retrieving volume prune report: %v", err)
|
|
| 26 | 36 |
} |
| 27 | 37 |
|
| 28 |
- return report, nil |
|
| 38 |
+ return VolumePruneResult{Report: report}, nil
|
|
| 29 | 39 |
} |
| ... | ... |
@@ -110,7 +110,7 @@ func TestAuthZPluginV2RejectVolumeRequests(t *testing.T) {
|
| 110 | 110 |
assert.Assert(t, err != nil) |
| 111 | 111 |
assert.ErrorContains(t, err, fmt.Sprintf("Error response from daemon: plugin %s failed with error:", authzPluginNameWithTag))
|
| 112 | 112 |
|
| 113 |
- _, err = c.VolumesPrune(ctx, nil) |
|
| 113 |
+ _, err = c.VolumesPrune(ctx, client.VolumePruneOptions{})
|
|
| 114 | 114 |
assert.Assert(t, err != nil) |
| 115 | 115 |
assert.ErrorContains(t, err, fmt.Sprintf("Error response from daemon: plugin %s failed with error:", authzPluginNameWithTag))
|
| 116 | 116 |
} |
| ... | ... |
@@ -270,10 +270,10 @@ func TestVolumePruneAnonymous(t *testing.T) {
|
| 270 | 270 |
assert.NilError(t, err) |
| 271 | 271 |
|
| 272 | 272 |
// Prune anonymous volumes |
| 273 |
- pruneReport, err := apiClient.VolumesPrune(ctx, nil) |
|
| 273 |
+ res, err := apiClient.VolumesPrune(ctx, client.VolumePruneOptions{})
|
|
| 274 | 274 |
assert.NilError(t, err) |
| 275 |
- assert.Check(t, is.Equal(len(pruneReport.VolumesDeleted), 1)) |
|
| 276 |
- assert.Check(t, is.Equal(pruneReport.VolumesDeleted[0], v.Name)) |
|
| 275 |
+ assert.Check(t, is.Equal(len(res.Report.VolumesDeleted), 1)) |
|
| 276 |
+ assert.Check(t, is.Equal(res.Report.VolumesDeleted[0], v.Name)) |
|
| 277 | 277 |
|
| 278 | 278 |
_, err = apiClient.VolumeInspect(ctx, vNamed.Name) |
| 279 | 279 |
assert.NilError(t, err) |
| ... | ... |
@@ -282,9 +282,11 @@ func TestVolumePruneAnonymous(t *testing.T) {
|
| 282 | 282 |
_, err = apiClient.VolumeCreate(ctx, volume.CreateOptions{})
|
| 283 | 283 |
assert.NilError(t, err) |
| 284 | 284 |
|
| 285 |
- pruneReport, err = apiClient.VolumesPrune(ctx, make(client.Filters).Add("all", "1"))
|
|
| 285 |
+ res, err = apiClient.VolumesPrune(ctx, client.VolumePruneOptions{
|
|
| 286 |
+ Filters: make(client.Filters).Add("all", "1"),
|
|
| 287 |
+ }) |
|
| 286 | 288 |
assert.NilError(t, err) |
| 287 |
- assert.Check(t, is.Equal(len(pruneReport.VolumesDeleted), 2)) |
|
| 289 |
+ assert.Check(t, is.Equal(len(res.Report.VolumesDeleted), 2)) |
|
| 288 | 290 |
|
| 289 | 291 |
// Validate that older API versions still have the old behavior of pruning all local volumes |
| 290 | 292 |
clientOld, err := client.NewClientWithOpts(client.FromEnv, client.WithVersion("1.41"))
|
| ... | ... |
@@ -297,11 +299,11 @@ func TestVolumePruneAnonymous(t *testing.T) {
|
| 297 | 297 |
vNamed, err = apiClient.VolumeCreate(ctx, volume.CreateOptions{Name: "test-api141"})
|
| 298 | 298 |
assert.NilError(t, err) |
| 299 | 299 |
|
| 300 |
- pruneReport, err = clientOld.VolumesPrune(ctx, nil) |
|
| 300 |
+ res, err = clientOld.VolumesPrune(ctx, client.VolumePruneOptions{})
|
|
| 301 | 301 |
assert.NilError(t, err) |
| 302 |
- assert.Check(t, is.Equal(len(pruneReport.VolumesDeleted), 2)) |
|
| 303 |
- assert.Check(t, is.Contains(pruneReport.VolumesDeleted, v.Name)) |
|
| 304 |
- assert.Check(t, is.Contains(pruneReport.VolumesDeleted, vNamed.Name)) |
|
| 302 |
+ assert.Check(t, is.Equal(len(res.Report.VolumesDeleted), 2)) |
|
| 303 |
+ assert.Check(t, is.Contains(res.Report.VolumesDeleted, v.Name)) |
|
| 304 |
+ assert.Check(t, is.Contains(res.Report.VolumesDeleted, vNamed.Name)) |
|
| 305 | 305 |
} |
| 306 | 306 |
|
| 307 | 307 |
func TestVolumePruneAnonFromImage(t *testing.T) {
|
| ... | ... |
@@ -332,7 +334,7 @@ VOLUME ` + volDest |
| 332 | 332 |
err = apiClient.ContainerRemove(ctx, id, client.ContainerRemoveOptions{})
|
| 333 | 333 |
assert.NilError(t, err) |
| 334 | 334 |
|
| 335 |
- pruneReport, err := apiClient.VolumesPrune(ctx, nil) |
|
| 335 |
+ res, err := apiClient.VolumesPrune(ctx, client.VolumePruneOptions{})
|
|
| 336 | 336 |
assert.NilError(t, err) |
| 337 |
- assert.Assert(t, is.Contains(pruneReport.VolumesDeleted, volumeName)) |
|
| 337 |
+ assert.Assert(t, is.Contains(res.Report.VolumesDeleted, volumeName)) |
|
| 338 | 338 |
} |
| ... | ... |
@@ -200,7 +200,7 @@ type VolumeAPIClient interface {
|
| 200 | 200 |
VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error) |
| 201 | 201 |
VolumeList(ctx context.Context, options VolumeListOptions) (volume.ListResponse, error) |
| 202 | 202 |
VolumeRemove(ctx context.Context, volumeID string, force bool) error |
| 203 |
- VolumesPrune(ctx context.Context, pruneFilter Filters) (volume.PruneReport, error) |
|
| 203 |
+ VolumesPrune(ctx context.Context, opts VolumePruneOptions) (VolumePruneResult, error) |
|
| 204 | 204 |
VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error |
| 205 | 205 |
} |
| 206 | 206 |
|
| ... | ... |
@@ -9,21 +9,31 @@ import ( |
| 9 | 9 |
"github.com/moby/moby/api/types/volume" |
| 10 | 10 |
) |
| 11 | 11 |
|
| 12 |
+// VolumePruneOptions holds parameters to prune networks. |
|
| 13 |
+type VolumePruneOptions struct {
|
|
| 14 |
+ Filters Filters |
|
| 15 |
+} |
|
| 16 |
+ |
|
| 17 |
+// VolumePruneResult holds the result from the [Client.VolumesPrune] method. |
|
| 18 |
+type VolumePruneResult struct {
|
|
| 19 |
+ Report volume.PruneReport |
|
| 20 |
+} |
|
| 21 |
+ |
|
| 12 | 22 |
// VolumesPrune requests the daemon to delete unused data |
| 13 |
-func (cli *Client) VolumesPrune(ctx context.Context, pruneFilters Filters) (volume.PruneReport, error) {
|
|
| 23 |
+func (cli *Client) VolumesPrune(ctx context.Context, opts VolumePruneOptions) (VolumePruneResult, error) {
|
|
| 14 | 24 |
query := url.Values{}
|
| 15 |
- pruneFilters.updateURLValues(query) |
|
| 25 |
+ opts.Filters.updateURLValues(query) |
|
| 16 | 26 |
|
| 17 | 27 |
resp, err := cli.post(ctx, "/volumes/prune", query, nil, nil) |
| 18 | 28 |
defer ensureReaderClosed(resp) |
| 19 | 29 |
if err != nil {
|
| 20 |
- return volume.PruneReport{}, err
|
|
| 30 |
+ return VolumePruneResult{}, err
|
|
| 21 | 31 |
} |
| 22 | 32 |
|
| 23 | 33 |
var report volume.PruneReport |
| 24 | 34 |
if err := json.NewDecoder(resp.Body).Decode(&report); err != nil {
|
| 25 |
- return volume.PruneReport{}, fmt.Errorf("Error retrieving volume prune report: %v", err)
|
|
| 35 |
+ return VolumePruneResult{}, fmt.Errorf("Error retrieving volume prune report: %v", err)
|
|
| 26 | 36 |
} |
| 27 | 37 |
|
| 28 |
- return report, nil |
|
| 38 |
+ return VolumePruneResult{Report: report}, nil
|
|
| 29 | 39 |
} |