Add 'force' parameter in remove_volume

Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
Joffrey F 2017-01-25 15:46:58 -08:00
parent 39deace7c6
commit a24b114af3
3 changed files with 33 additions and 7 deletions

View File

@ -115,17 +115,27 @@ class VolumeApiMixin(object):
return self._result(self._get(url), True)
@utils.minimum_version('1.21')
def remove_volume(self, name):
def remove_volume(self, name, force=False):
"""
Remove a volume. Similar to the ``docker volume rm`` command.
Args:
name (str): The volume's name
force (bool): Force removal of volumes that were already removed
out of band by the volume driver plugin.
Raises:
``docker.errors.APIError``: If volume failed to remove.
:py:class:`docker.errors.APIError`
If volume failed to remove.
"""
url = self._url('/volumes/{0}', name)
params = {}
if force:
if utils.version_lt(self._version, '1.25'):
raise errors.InvalidVersion(
'force removal was introduced in API 1.25'
)
params = {'force': force}
url = self._url('/volumes/{0}', name, params=params)
resp = self._delete(url)
self._raise_for_status(resp)

View File

@ -10,9 +10,18 @@ class Volume(Model):
"""The name of the volume."""
return self.attrs['Name']
def remove(self):
"""Remove this volume."""
return self.client.api.remove_volume(self.id)
def remove(self, force=False):
"""
Remove this volume.
Args:
force (bool): Force removal of volumes that were already removed
out of band by the volume driver plugin.
Raises:
:py:class:`docker.errors.APIError`
If volume failed to remove.
"""
return self.client.api.remove_volume(self.id, force=force)
class VolumeCollection(Collection):

View File

@ -49,6 +49,13 @@ class TestVolumes(BaseAPIIntegrationTest):
self.client.create_volume(name)
self.client.remove_volume(name)
@requires_api_version('1.25')
def test_force_remove_volume(self):
name = 'shootthebullet'
self.tmp_volumes.append(name)
self.client.create_volume(name)
self.client.remove_volume(name, force=True)
def test_remove_nonexistent_volume(self):
name = 'shootthebullet'
with pytest.raises(docker.errors.NotFound):