1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

docker_volume: improve force option (deprecate, add new option) (#51145)

* docker_volume: Deprecating force option, adding recreate option.

* Add changelog.

* Remove mis-placed force: yes for docker_volume.
This commit is contained in:
Felix Fontein 2019-02-03 21:09:24 +01:00 committed by ansibot
parent 470af47ea8
commit 89a1c68f98
7 changed files with 53 additions and 16 deletions

View file

@ -0,0 +1,4 @@
minor_changes:
- "docker_volume - the ``force`` option has been deprecated, and a new option ``recreate``
has been added with default value ``never``. If you use ``force: yes`` in a playbook,
change it to ``recreate: options-changed`` instead."

View file

@ -51,8 +51,27 @@ options:
- With state C(present) causes the volume to be deleted and recreated if the volume already - With state C(present) causes the volume to be deleted and recreated if the volume already
exist and the driver, driver options or labels differ. This will cause any data in the existing exist and the driver, driver options or labels differ. This will cause any data in the existing
volume to be lost. volume to be lost.
- Deprecated. Will be removed in Ansible 2.12. Set I(recreate) to C(options-changed) instead
for the same behavior of setting I(force) to C(yes).
type: bool type: bool
default: 'no' default: no
recreate:
version_added: "2.8"
description:
- Controls when a volume will be recreated when I(state) is C(present). Please
note that recreating an existing volume will cause I(any data in the existing volume
to be lost!) The volume will be deleted and a new volume with the same name will be
created.
- The value C(always) forces the volume to be always recreated.
- The value C(never) makes sure the volume will not be recreated.
- The value C(options-changed) makes sure the volume will be recreated if the volume
already exist and the driver, driver options or labels differ.
choices:
- always
- never
- options-changed
default: never
state: state:
description: description:
@ -133,11 +152,22 @@ class TaskParameters(DockerBaseClass):
self.driver_options = None self.driver_options = None
self.labels = None self.labels = None
self.force = None self.force = None
self.recreate = None
self.debug = None self.debug = None
for key, value in iteritems(client.module.params): for key, value in iteritems(client.module.params):
setattr(self, key, value) setattr(self, key, value)
if self.force is not None:
if self.recreate != 'never':
client.module.fail_json(msg='Cannot use the deprecated "force" '
'option when "recreate" is set. Please stop '
'using the force option.')
client.module.warn('The "force" option of docker_volume has been deprecated '
'in Ansible 2.8. Please use the "recreate" '
'option, which provides the same functionality as "force".')
self.recreate = 'options-changed' if self.force else 'never'
class DockerVolumeManager(object): class DockerVolumeManager(object):
@ -249,7 +279,7 @@ class DockerVolumeManager(object):
differences = self.has_different_config() differences = self.has_different_config()
self.diff_tracker.add('exists', parameter=True, active=self.existing_volume is not None) self.diff_tracker.add('exists', parameter=True, active=self.existing_volume is not None)
if not differences.empty and self.parameters.force: if (not differences.empty and self.parameters.recreate == 'options-changed') or self.parameters.recreate == 'always':
self.remove_volume() self.remove_volume()
self.existing_volume = None self.existing_volume = None
@ -276,7 +306,8 @@ def main():
driver=dict(type='str', default='local'), driver=dict(type='str', default='local'),
driver_options=dict(type='dict', default={}), driver_options=dict(type='dict', default={}),
labels=dict(type='dict'), labels=dict(type='dict'),
force=dict(type='bool', default=False), force=dict(type='bool', removed_in_version='2.12'),
recreate=dict(type='str', default='never', choices=['always', 'never', 'options-changed']),
debug=dict(type='bool', default=False) debug=dict(type='bool', default=False)
) )

View file

@ -52,7 +52,6 @@
docker_volume: docker_volume:
name: "{{ item }}" name: "{{ item }}"
state: absent state: absent
force: yes
loop: "{{ volume_names }}" loop: "{{ volume_names }}"
ignore_errors: yes ignore_errors: yes

View file

@ -1844,7 +1844,6 @@
docker_volume: docker_volume:
name: "{{ volume_name }}" name: "{{ volume_name }}"
state: absent state: absent
force: yes
loop: loop:
- "{{ volume_name_1 }}" - "{{ volume_name_1 }}"
- "{{ volume_name_2 }}" - "{{ volume_name_2 }}"

View file

@ -17,7 +17,6 @@
docker_volume: docker_volume:
name: "{{ item }}" name: "{{ item }}"
state: absent state: absent
force: yes
with_items: "{{ vnames }}" with_items: "{{ vnames }}"
when: docker_py_version is version('1.10.0', '>=') and docker_api_version is version('1.20', '>=') # FIXME: find out API version! when: docker_py_version is version('1.10.0', '>=') and docker_api_version is version('1.20', '>=') # FIXME: find out API version!

View file

@ -20,12 +20,18 @@
name: "{{ vname }}" name: "{{ vname }}"
register: create_2 register: create_2
- name: Create a volume (force) - name: "Create a volume (recreate: options-changed)"
docker_volume: docker_volume:
name: "{{ vname }}" name: "{{ vname }}"
force: yes recreate: options-changed
register: create_3 register: create_3
- name: "Create a volume (recreate: always)"
docker_volume:
name: "{{ vname }}"
recreate: always
register: create_4
- name: Remove a volume - name: Remove a volume
docker_volume: docker_volume:
name: "{{ vname }}" name: "{{ vname }}"
@ -43,6 +49,7 @@
- create_1 is changed - create_1 is changed
- create_2 is not changed - create_2 is not changed
- create_3 is not changed - create_3 is not changed
- create_4 is changed
- absent_1 is changed - absent_1 is changed
- absent_2 is not changed - absent_2 is not changed
@ -80,7 +87,7 @@
o: size=200m,uid=1000 o: size=200m,uid=1000
register: driver_options_3 register: driver_options_3
- name: Create a volume with options (changed, force) - name: "Create a volume with options (changed, recreate: options-changed)"
docker_volume: docker_volume:
name: "{{ vname }}" name: "{{ vname }}"
driver: local driver: local
@ -88,7 +95,7 @@
type: tempfs type: tempfs
device: tmpfs device: tmpfs
o: size=200m,uid=1000 o: size=200m,uid=1000
force: yes recreate: options-changed
register: driver_options_4 register: driver_options_4
- name: Cleanup - name: Cleanup
@ -130,12 +137,12 @@
ansible.test.1: hello ansible.test.1: hello
register: driver_labels_3 register: driver_labels_3
- name: Create a volume with labels (less, force) - name: "Create a volume with labels (less, recreate: options-changed)"
docker_volume: docker_volume:
name: "{{ vname }}" name: "{{ vname }}"
labels: labels:
ansible.test.1: hello ansible.test.1: hello
force: yes recreate: options-changed
register: driver_labels_4 register: driver_labels_4
- name: Create a volume with labels (more) - name: Create a volume with labels (more)
@ -146,13 +153,13 @@
ansible.test.3: ansible ansible.test.3: ansible
register: driver_labels_5 register: driver_labels_5
- name: Create a volume with labels (more, force) - name: "Create a volume with labels (more, recreate: options-changed)"
docker_volume: docker_volume:
name: "{{ vname }}" name: "{{ vname }}"
labels: labels:
ansible.test.1: hello ansible.test.1: hello
ansible.test.3: ansible ansible.test.3: ansible
force: yes recreate: options-changed
register: driver_labels_6 register: driver_labels_6
- name: Cleanup - name: Cleanup

View file

@ -8,7 +8,6 @@
docker_volume: docker_volume:
name: "{{ cname }}" name: "{{ cname }}"
state: absent state: absent
force: yes
- name: Inspect a non-present volume - name: Inspect a non-present volume
docker_volume_facts: docker_volume_facts:
@ -44,7 +43,6 @@
docker_volume: docker_volume:
name: "{{ cname }}" name: "{{ cname }}"
state: absent state: absent
force: yes
- assert: - assert:
that: that: