Add prune_volumes method

Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
Joffrey F 2017-01-30 17:59:03 -08:00
parent 7f0c2e7531
commit 89d3803344
4 changed files with 36 additions and 1 deletions

View File

@ -115,6 +115,28 @@ class VolumeApiMixin(object):
url = self._url('/volumes/{0}', name)
return self._result(self._get(url), True)
@utils.minimum_version('1.25')
def prune_volumes(self, filters=None):
"""
Delete unused volumes
Args:
filters (dict): Filters to process on the prune list.
Returns:
(dict): A dict containing a list of deleted volume IDs and
the amount of disk space reclaimed in bytes.
Raises:
:py:class:`docker.errors.APIError`
If the server returns an error.
"""
params = {}
if filters:
params['filters'] = utils.convert_filters(filters)
url = self._url('/volumes/prune')
return self._result(self._post(url, params=params), True)
@utils.minimum_version('1.21')
def remove_volume(self, name, force=False):
"""

View File

@ -1,3 +1,4 @@
from ..api import APIClient
from .resource import Model, Collection
@ -91,3 +92,7 @@ class VolumeCollection(Collection):
if not resp.get('Volumes'):
return []
return [self.prepare_model(obj) for obj in resp['Volumes']]
def prune(self, filters=None):
return self.client.api.prune_volumes(filters=filters)
prune.__doc__ = APIClient.prune_volumes.__doc__

View File

@ -299,5 +299,5 @@ class PruneImagesTest(BaseAPIIntegrationTest):
self.tmp_imgs.append('hello-world')
img_id = self.client.inspect_image('hello-world')['Id']
result = self.client.prune_images()
assert img_id in result['ImagesDeleted']
assert img_id in [img['Deleted'] for img in result['ImagesDeleted']]
assert result['SpaceReclaimed'] > 0

View File

@ -56,6 +56,14 @@ class TestVolumes(BaseAPIIntegrationTest):
self.client.create_volume(name)
self.client.remove_volume(name, force=True)
@requires_api_version('1.25')
def test_prune_volumes(self):
name = 'hopelessmasquerade'
self.client.create_volume(name)
self.tmp_volumes.append(name)
result = self.client.prune_volumes()
assert name in result['VolumesDeleted']
def test_remove_nonexistent_volume(self):
name = 'shootthebullet'
with pytest.raises(docker.errors.NotFound):