summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fontein <felix@fontein.de>2018-11-12 12:24:07 +0100
committerToshio Kuratomi <a.badger@gmail.com>2018-11-12 19:27:23 -0800
commitb126a21963729bc512556f4e4efb68660a8a2225 (patch)
tree9bcd40f6288b126aacde2086198d81504b4ee5ab
parent709845436e5a1d7ea36a7dfb397aa7b66081d1f2 (diff)
downloadansible-b126a21963729bc512556f4e4efb68660a8a2225.tar.gz
Docker volume fix labels (#48536)
* Add integration test for labels (which fails). * Changing labels from list to dict. * Add changelog. (cherry picked from commit feb60b947cd07085c7bb5c60b346bae790994478)
-rw-r--r--changelogs/fragments/48536-docker_volume-labels.yml2
-rw-r--r--lib/ansible/modules/cloud/docker/docker_volume.py11
-rw-r--r--test/integration/targets/docker_volume/tasks/tests/basic.yml47
3 files changed, 56 insertions, 4 deletions
diff --git a/changelogs/fragments/48536-docker_volume-labels.yml b/changelogs/fragments/48536-docker_volume-labels.yml
new file mode 100644
index 0000000000..8ac0d90f63
--- /dev/null
+++ b/changelogs/fragments/48536-docker_volume-labels.yml
@@ -0,0 +1,2 @@
+bugfixes:
+- "docker_volume - ``labels`` now work (and are a ``dict`` and no longer a ``list``)."
diff --git a/lib/ansible/modules/cloud/docker/docker_volume.py b/lib/ansible/modules/cloud/docker/docker_volume.py
index f1f480e7e8..a39d9cf522 100644
--- a/lib/ansible/modules/cloud/docker/docker_volume.py
+++ b/lib/ansible/modules/cloud/docker/docker_volume.py
@@ -25,6 +25,7 @@ options:
description:
- Name of the volume to operate on.
required: true
+ type: dict
aliases:
- volume_name
@@ -32,15 +33,18 @@ options:
description:
- Specify the type of volume. Docker provides the C(local) driver, but 3rd party drivers can also be used.
default: local
+ type: str
driver_options:
description:
- "Dictionary of volume settings. Consult docker docs for valid options and values:
U(https://docs.docker.com/engine/reference/commandline/volume_create/#driver-specific-options)"
+ type: dict
labels:
description:
- - List of labels to set for the volume
+ - Dictionary of label key/values to set for the volume
+ type: dict
force:
description:
@@ -185,8 +189,7 @@ class DockerVolumeManager(object):
differences.append('driver_options.%s' % key)
if self.parameters.labels:
existing_labels = self.existing_volume.get('Labels', {})
- all_labels = set(self.parameters.labels) | set(existing_labels)
- for label in all_labels:
+ for label in self.parameters.labels:
if existing_labels.get(label) != self.parameters.labels.get(label):
differences.append('labels.%s' % label)
@@ -247,7 +250,7 @@ def main():
state=dict(type='str', default='present', choices=['present', 'absent']),
driver=dict(type='str', default='local'),
driver_options=dict(type='dict', default={}),
- labels=dict(type='list'),
+ labels=dict(type='dict'),
force=dict(type='bool', default=False),
debug=dict(type='bool', default=False)
)
diff --git a/test/integration/targets/docker_volume/tasks/tests/basic.yml b/test/integration/targets/docker_volume/tasks/tests/basic.yml
index f40e54a137..89787c72a3 100644
--- a/test/integration/targets/docker_volume/tasks/tests/basic.yml
+++ b/test/integration/targets/docker_volume/tasks/tests/basic.yml
@@ -90,3 +90,50 @@
- driver_options_1 is changed
- driver_options_2 is not changed
- driver_options_3 is changed
+
+####################################################################
+## labels ##########################################################
+####################################################################
+
+- name: Create a volume with labels
+ docker_volume:
+ name: "{{ vname }}"
+ labels:
+ ansible.test.1: hello
+ ansible.test.2: world
+ register: driver_labels_1
+
+- name: Create a volume with labels (idempotency)
+ docker_volume:
+ name: "{{ vname }}"
+ labels:
+ ansible.test.2: world
+ ansible.test.1: hello
+ register: driver_labels_2
+
+- name: Create a volume with labels (less)
+ docker_volume:
+ name: "{{ vname }}"
+ labels:
+ ansible.test.1: hello
+ register: driver_labels_3
+
+- name: Create a volume with labels (more)
+ docker_volume:
+ name: "{{ vname }}"
+ labels:
+ ansible.test.1: hello
+ ansible.test.3: ansible
+ register: driver_labels_4
+
+- name: Cleanup
+ docker_volume:
+ name: "{{ vname }}"
+ state: absent
+
+- assert:
+ that:
+ - driver_labels_1 is changed
+ - driver_labels_2 is not changed
+ - driver_labels_3 is not changed
+ - driver_labels_4 is changed