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:
parent
470af47ea8
commit
89a1c68f98
7 changed files with 53 additions and 16 deletions
4
changelogs/fragments/51145-docker_volume-force.yaml
Normal file
4
changelogs/fragments/51145-docker_volume-force.yaml
Normal 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."
|
|
@ -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)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 }}"
|
||||||
|
|
|
@ -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!
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Add table
Reference in a new issue