mirror of https://github.com/docker/docker-py.git
Merge pull request #1115 from TomasTomecek/create-volume-support-labels
volumes,create: support adding labels
This commit is contained in:
commit
b511352bea
|
|
@ -1,3 +1,4 @@
|
||||||
|
from .. import errors
|
||||||
from .. import utils
|
from .. import utils
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -11,7 +12,7 @@ class VolumeApiMixin(object):
|
||||||
return self._result(self._get(url, params=params), True)
|
return self._result(self._get(url, params=params), True)
|
||||||
|
|
||||||
@utils.minimum_version('1.21')
|
@utils.minimum_version('1.21')
|
||||||
def create_volume(self, name, driver=None, driver_opts=None):
|
def create_volume(self, name, driver=None, driver_opts=None, labels=None):
|
||||||
url = self._url('/volumes/create')
|
url = self._url('/volumes/create')
|
||||||
if driver_opts is not None and not isinstance(driver_opts, dict):
|
if driver_opts is not None and not isinstance(driver_opts, dict):
|
||||||
raise TypeError('driver_opts must be a dictionary')
|
raise TypeError('driver_opts must be a dictionary')
|
||||||
|
|
@ -21,6 +22,16 @@ class VolumeApiMixin(object):
|
||||||
'Driver': driver,
|
'Driver': driver,
|
||||||
'DriverOpts': driver_opts,
|
'DriverOpts': driver_opts,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if labels is not None:
|
||||||
|
if utils.compare_version('1.23', self._version) < 0:
|
||||||
|
raise errors.InvalidVersion(
|
||||||
|
'volume labels were introduced in API 1.23'
|
||||||
|
)
|
||||||
|
if not isinstance(labels, dict):
|
||||||
|
raise TypeError('labels must be a dictionary')
|
||||||
|
data["Labels"] = labels
|
||||||
|
|
||||||
return self._result(self._post_json(url, data=data), True)
|
return self._result(self._post_json(url, data=data), True)
|
||||||
|
|
||||||
@utils.minimum_version('1.21')
|
@utils.minimum_version('1.21')
|
||||||
|
|
|
||||||
11
docs/api.md
11
docs/api.md
|
|
@ -310,6 +310,7 @@ Create and register a named volume
|
||||||
* name (str): Name of the volume
|
* name (str): Name of the volume
|
||||||
* driver (str): Name of the driver used to create the volume
|
* driver (str): Name of the driver used to create the volume
|
||||||
* driver_opts (dict): Driver options as a key-value dictionary
|
* driver_opts (dict): Driver options as a key-value dictionary
|
||||||
|
* labels (dict): Labels to set on the volume
|
||||||
|
|
||||||
**Returns** (dict): The created volume reference object
|
**Returns** (dict): The created volume reference object
|
||||||
|
|
||||||
|
|
@ -317,10 +318,16 @@ Create and register a named volume
|
||||||
>>> from docker import Client
|
>>> from docker import Client
|
||||||
>>> cli = Client()
|
>>> cli = Client()
|
||||||
>>> volume = cli.create_volume(
|
>>> volume = cli.create_volume(
|
||||||
name='foobar', driver='local', driver_opts={'foo': 'bar', 'baz': 'false'}
|
name='foobar', driver='local', driver_opts={'foo': 'bar', 'baz': 'false'},
|
||||||
|
labels={"key": "value"}
|
||||||
)
|
)
|
||||||
>>> print(volume)
|
>>> print(volume)
|
||||||
{u'Mountpoint': u'/var/lib/docker/volumes/foobar/_data', u'Driver': u'local', u'Name': u'foobar'}
|
{
|
||||||
|
u'Mountpoint': u'/var/lib/docker/volumes/foobar/_data',
|
||||||
|
u'Driver': u'local',
|
||||||
|
u'Name': u'foobar',
|
||||||
|
u'Labels': {u'key': u'value'}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## diff
|
## diff
|
||||||
|
|
|
||||||
|
|
@ -433,7 +433,10 @@ def get_fake_volume():
|
||||||
response = {
|
response = {
|
||||||
'Name': 'perfectcherryblossom',
|
'Name': 'perfectcherryblossom',
|
||||||
'Driver': 'local',
|
'Driver': 'local',
|
||||||
'Mountpoint': '/var/lib/docker/volumes/perfectcherryblossom'
|
'Mountpoint': '/var/lib/docker/volumes/perfectcherryblossom',
|
||||||
|
'Labels': {
|
||||||
|
'com.example.some-label': 'some-value'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return status_code, response
|
return status_code, response
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,22 @@ class VolumeTest(DockerClientTest):
|
||||||
self.assertEqual(args[0][1], url_prefix + 'volumes/create')
|
self.assertEqual(args[0][1], url_prefix + 'volumes/create')
|
||||||
self.assertEqual(json.loads(args[1]['data']), {'Name': name})
|
self.assertEqual(json.loads(args[1]['data']), {'Name': name})
|
||||||
|
|
||||||
|
@base.requires_api_version('1.23')
|
||||||
|
def test_create_volume_with_labels(self):
|
||||||
|
name = 'perfectcherryblossom'
|
||||||
|
result = self.client.create_volume(name, labels={
|
||||||
|
'com.example.some-label': 'some-value'})
|
||||||
|
self.assertEqual(
|
||||||
|
result["Labels"],
|
||||||
|
{'com.example.some-label': 'some-value'}
|
||||||
|
)
|
||||||
|
|
||||||
|
@base.requires_api_version('1.23')
|
||||||
|
def test_create_volume_with_invalid_labels(self):
|
||||||
|
name = 'perfectcherryblossom'
|
||||||
|
with pytest.raises(TypeError):
|
||||||
|
self.client.create_volume(name, labels=1)
|
||||||
|
|
||||||
@base.requires_api_version('1.21')
|
@base.requires_api_version('1.21')
|
||||||
def test_create_volume_with_driver(self):
|
def test_create_volume_with_driver(self):
|
||||||
name = 'perfectcherryblossom'
|
name = 'perfectcherryblossom'
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue