Skip to content

Commit 0984c7c

Browse files
committed
Add prune_volumes method
Signed-off-by: Joffrey F <[email protected]>
1 parent 6d8dff3 commit 0984c7c

File tree

4 files changed

+36
-1
lines changed

4 files changed

+36
-1
lines changed

docker/api/volume.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,28 @@ def inspect_volume(self, name):
116116
url = self._url('/volumes/{0}', name)
117117
return self._result(self._get(url), True)
118118

119+
@utils.minimum_version('1.25')
120+
def prune_volumes(self, filters=None):
121+
"""
122+
Delete unused volumes
123+
124+
Args:
125+
filters (dict): Filters to process on the prune list.
126+
127+
Returns:
128+
(dict): A dict containing a list of deleted volume IDs and
129+
the amount of disk space reclaimed in bytes.
130+
131+
Raises:
132+
:py:class:`docker.errors.APIError`
133+
If the server returns an error.
134+
"""
135+
params = {}
136+
if filters:
137+
params['filters'] = utils.convert_filters(filters)
138+
url = self._url('/volumes/prune')
139+
return self._result(self._post(url, params=params), True)
140+
119141
@utils.minimum_version('1.21')
120142
def remove_volume(self, name, force=False):
121143
"""

docker/models/volumes.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from ..api import APIClient
12
from .resource import Model, Collection
23

34

@@ -92,3 +93,7 @@ def list(self, **kwargs):
9293
if not resp.get('Volumes'):
9394
return []
9495
return [self.prepare_model(obj) for obj in resp['Volumes']]
96+
97+
def prune(self, filters=None):
98+
return self.client.api.prune_volumes(filters=filters)
99+
prune.__doc__ = APIClient.prune_volumes.__doc__

tests/integration/api_image_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,5 +299,5 @@ def test_prune_images(self):
299299
self.tmp_imgs.append('hello-world')
300300
img_id = self.client.inspect_image('hello-world')['Id']
301301
result = self.client.prune_images()
302-
assert img_id in result['ImagesDeleted']
302+
assert img_id in [img['Deleted'] for img in result['ImagesDeleted']]
303303
assert result['SpaceReclaimed'] > 0

tests/integration/api_volume_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ def test_force_remove_volume(self):
5656
self.client.create_volume(name)
5757
self.client.remove_volume(name, force=True)
5858

59+
@requires_api_version('1.25')
60+
def test_prune_volumes(self):
61+
name = 'hopelessmasquerade'
62+
self.client.create_volume(name)
63+
self.tmp_volumes.append(name)
64+
result = self.client.prune_volumes()
65+
assert name in result['VolumesDeleted']
66+
5967
def test_remove_nonexistent_volume(self):
6068
name = 'shootthebullet'
6169
with pytest.raises(docker.errors.NotFound):

0 commit comments

Comments
 (0)