diff options
author | Daniel Nephin <dnephin@gmail.com> | 2016-07-13 13:44:37 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-13 13:44:37 -0400 |
commit | b511352bea79aff12d565b11662bebee36e362fc (patch) | |
tree | 271ead353ac9e1a20e7e51a63ace2ed198b23ffb | |
parent | 1f34b4896ad336d1a9b51029a0b837f904ba485c (diff) | |
parent | 8f8a3d0ed2dd1f1bc3ae68c2af186070dc3007a8 (diff) | |
download | docker-py-b511352bea79aff12d565b11662bebee36e362fc.tar.gz |
Merge pull request #1115 from TomasTomecek/create-volume-support-labels
volumes,create: support adding labels
-rw-r--r-- | docker/api/volume.py | 13 | ||||
-rw-r--r-- | docs/api.md | 11 | ||||
-rw-r--r-- | tests/unit/fake_api.py | 5 | ||||
-rw-r--r-- | tests/unit/volume_test.py | 16 |
4 files changed, 41 insertions, 4 deletions
diff --git a/docker/api/volume.py b/docker/api/volume.py index bb8b39b..afc72cb 100644 --- a/docker/api/volume.py +++ b/docker/api/volume.py @@ -1,3 +1,4 @@ +from .. import errors from .. import utils @@ -11,7 +12,7 @@ class VolumeApiMixin(object): return self._result(self._get(url, params=params), True) @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') if driver_opts is not None and not isinstance(driver_opts, dict): raise TypeError('driver_opts must be a dictionary') @@ -21,6 +22,16 @@ class VolumeApiMixin(object): 'Driver': driver, '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) @utils.minimum_version('1.21') diff --git a/docs/api.md b/docs/api.md index 4d2fe10..41c5e6c 100644 --- a/docs/api.md +++ b/docs/api.md @@ -310,6 +310,7 @@ Create and register a named volume * name (str): Name of the volume * driver (str): Name of the driver used to create the volume * 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 @@ -317,10 +318,16 @@ Create and register a named volume >>> from docker import Client >>> cli = Client() >>> 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) -{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 --git a/tests/unit/fake_api.py b/tests/unit/fake_api.py index 9952595..835d73f 100644 --- a/tests/unit/fake_api.py +++ b/tests/unit/fake_api.py @@ -433,7 +433,10 @@ def get_fake_volume(): response = { 'Name': 'perfectcherryblossom', '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 diff --git a/tests/unit/volume_test.py b/tests/unit/volume_test.py index 5b1823a..136d11a 100644 --- a/tests/unit/volume_test.py +++ b/tests/unit/volume_test.py @@ -43,6 +43,22 @@ class VolumeTest(DockerClientTest): self.assertEqual(args[0][1], url_prefix + 'volumes/create') 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') def test_create_volume_with_driver(self): name = 'perfectcherryblossom' |