diff --git a/changelogs/fragments/553-docker_plugin-check-mode.yml b/changelogs/fragments/553-docker_plugin-check-mode.yml new file mode 100644 index 000000000..91562f981 --- /dev/null +++ b/changelogs/fragments/553-docker_plugin-check-mode.yml @@ -0,0 +1,2 @@ +bugfixes: + - "docker_plugin - do not crash if plugin is installed in check mode (https://github.com/ansible-collections/community.docker/issues/552, https://github.com/ansible-collections/community.docker/pull/553)." diff --git a/plugins/modules/docker_plugin.py b/plugins/modules/docker_plugin.py index e98838c5e..921a454a0 100644 --- a/plugins/modules/docker_plugin.py +++ b/plugins/modules/docker_plugin.py @@ -333,11 +333,18 @@ def disable(self): @property def result(self): + plugin_data = {} + if self.parameters.state != 'absent': + try: + plugin_data = self.client.inspect_plugin(self.preferred_name) + except NotFound: + # This can happen in check mode + pass result = { 'actions': self.actions, 'changed': self.changed, 'diff': self.diff, - 'plugin': self.client.inspect_plugin(self.preferred_name) if self.parameters.state != 'absent' else {} + 'plugin': plugin_data, } return dict((k, v) for k, v in result.items() if v is not None) diff --git a/tests/integration/targets/docker_plugin/tasks/tests/basic.yml b/tests/integration/targets/docker_plugin/tasks/tests/basic.yml index e94133d7e..ac71ce509 100644 --- a/tests/integration/targets/docker_plugin/tasks/tests/basic.yml +++ b/tests/integration/targets/docker_plugin/tasks/tests/basic.yml @@ -10,48 +10,104 @@ ############ basic test ############ #################################### +- name: Create a plugin (check mode) + docker_plugin: + plugin_name: "{{ plugin_name }}" + state: present + register: create_1_check + check_mode: true + - name: Create a plugin docker_plugin: plugin_name: "{{ plugin_name }}" state: present register: create_1 +- name: Create a plugin (Idempotent, check mode) + docker_plugin: + plugin_name: "{{ plugin_name }}" + state: present + register: create_2_check + check_mode: true + - name: Create a plugin (Idempotent) docker_plugin: plugin_name: "{{ plugin_name }}" state: present register: create_2 +- name: Enable a plugin (check mode) + docker_plugin: + plugin_name: "{{ plugin_name }}" + state: enable + register: create_3_check + check_mode: true + - name: Enable a plugin docker_plugin: plugin_name: "{{ plugin_name }}" state: enable register: create_3 +- name: Enable a plugin (Idempotent, check mode) + docker_plugin: + plugin_name: "{{ plugin_name }}" + state: enable + register: create_4_check + check_mode: true + - name: Enable a plugin (Idempotent) docker_plugin: plugin_name: "{{ plugin_name }}" state: enable register: create_4 +- name: Disable a plugin (check mode) + docker_plugin: + plugin_name: "{{ plugin_name }}" + state: disable + register: absent_1_check + check_mode: true + - name: Disable a plugin docker_plugin: plugin_name: "{{ plugin_name }}" state: disable register: absent_1 +- name: Disable a plugin (Idempotent, check mode) + docker_plugin: + plugin_name: "{{ plugin_name }}" + state: disable + register: absent_2_check + check_mode: true + - name: Disable a plugin (Idempotent) docker_plugin: plugin_name: "{{ plugin_name }}" state: disable register: absent_2 +- name: Remove a plugin (check mode) + docker_plugin: + plugin_name: "{{ plugin_name }}" + state: absent + register: absent_3_check + check_mode: true + - name: Remove a plugin docker_plugin: plugin_name: "{{ plugin_name }}" state: absent register: absent_3 +- name: Remove a plugin (Idempotent, check mode) + docker_plugin: + plugin_name: "{{ plugin_name }}" + state: absent + register: absent_4_check + check_mode: true + - name: Remove a plugin (Idempotent) docker_plugin: plugin_name: "{{ plugin_name }}" @@ -60,13 +116,21 @@ - assert: that: + - create_1_check is changed - create_1 is changed + - create_2_check is not changed - create_2 is not changed + - create_3_check is changed - create_3 is changed + - create_4_check is not changed - create_4 is not changed + - absent_1_check is changed - absent_1 is changed + - absent_2_check is not changed - absent_2 is not changed + - absent_3_check is changed - absent_3 is changed + - absent_4_check is not changed - absent_4 is not changed ############ Plugin_Options ############