From 8d19ad9f86db410d342192942322cca72f1b2a78 Mon Sep 17 00:00:00 2001 From: "patchback[bot]" <45432694+patchback[bot]@users.noreply.github.com> Date: Sat, 14 Jan 2023 08:09:36 +0100 Subject: [PATCH] docker_plugin: do not crash when plugin doesn't exist (#553) (#556) (#557) * Do not crash when plugin doesn't exist. * Improve style. Co-authored-by: Brian Scholer <1260690+briantist@users.noreply.github.com> Co-authored-by: Brian Scholer <1260690+briantist@users.noreply.github.com> (cherry picked from commit c7cbec01634307dc4f8b7dd990c2744d9b4b3a69) (cherry picked from commit 0ffa3cc1d214f936924f67611af69487e585042d) Co-authored-by: Felix Fontein --- .../553-docker_plugin-check-mode.yml | 2 + plugins/modules/docker_plugin.py | 9 ++- .../docker_plugin/tasks/tests/basic.yml | 64 +++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/553-docker_plugin-check-mode.yml 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 00000000..91562f98 --- /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 b97362ab..c8165e5b 100644 --- a/plugins/modules/docker_plugin.py +++ b/plugins/modules/docker_plugin.py @@ -331,11 +331,18 @@ class DockerPluginManager(object): @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 e94133d7..ac71ce50 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 ############