From 596c75c2bc5c8a7419f268a9c308d18d52762ca8 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Tue, 9 Jan 2024 12:14:00 -0500 Subject: [PATCH] uri action plugin check_mode support update (#82484) Also updated base action messages to be more specific --- changelogs/fragments/uri_action_cmode.yml | 2 ++ lib/ansible/plugins/action/__init__.py | 6 +++--- lib/ansible/plugins/action/uri.py | 1 + test/integration/targets/script/tasks/main.yml | 2 +- test/integration/targets/uri/tasks/main.yml | 11 +++++++++++ 5 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 changelogs/fragments/uri_action_cmode.yml diff --git a/changelogs/fragments/uri_action_cmode.yml b/changelogs/fragments/uri_action_cmode.yml new file mode 100644 index 00000000000..f47cf71e4a4 --- /dev/null +++ b/changelogs/fragments/uri_action_cmode.yml @@ -0,0 +1,2 @@ +bugfixes: + - uri action plugin now skipped during check mode (not supported) instead of even trying to execute the module, which already skipped, this does not really change the result, but returns much faster. diff --git a/lib/ansible/plugins/action/__init__.py b/lib/ansible/plugins/action/__init__.py index 35ae8e587df..5979337f175 100644 --- a/lib/ansible/plugins/action/__init__.py +++ b/lib/ansible/plugins/action/__init__.py @@ -115,11 +115,11 @@ class ActionBase(ABC): del tmp if self._task.async_val and not self._supports_async: - raise AnsibleActionFail('async is not supported for this task.') + raise AnsibleActionFail('This action (%s) does not support async.' % self._task.action) elif self._task.check_mode and not self._supports_check_mode: - raise AnsibleActionSkip('check mode is not supported for this task.') + raise AnsibleActionSkip('This action (%s) does not support check mode.' % self._task.action) elif self._task.async_val and self._task.check_mode: - raise AnsibleActionFail('check mode and async cannot be used on same task.') + raise AnsibleActionFail('"check mode" and "async" cannot be used on same task.') # Error if invalid argument is passed if self._VALID_ARGS: diff --git a/lib/ansible/plugins/action/uri.py b/lib/ansible/plugins/action/uri.py index 138269d3269..9860f2683b3 100644 --- a/lib/ansible/plugins/action/uri.py +++ b/lib/ansible/plugins/action/uri.py @@ -20,6 +20,7 @@ class ActionModule(ActionBase): def run(self, tmp=None, task_vars=None): self._supports_async = True + self._supports_check_mode = False if task_vars is None: task_vars = dict() diff --git a/test/integration/targets/script/tasks/main.yml b/test/integration/targets/script/tasks/main.yml index 8720ae020b1..b4deaedbe0d 100644 --- a/test/integration/targets/script/tasks/main.yml +++ b/test/integration/targets/script/tasks/main.yml @@ -162,7 +162,7 @@ assert: that: - script_result3 is failed - - script_result3.msg == "async is not supported for this task." + - script_result3.msg == "This action (script) does not support async." # check mode diff --git a/test/integration/targets/uri/tasks/main.yml b/test/integration/targets/uri/tasks/main.yml index 5df9544750e..23aa6436f9f 100644 --- a/test/integration/targets/uri/tasks/main.yml +++ b/test/integration/targets/uri/tasks/main.yml @@ -697,3 +697,14 @@ - name: Test unix socket import_tasks: install-socat-and-test-unix-socket.yml + +- name: ensure skip action + uri: + url: http://example.com + check_mode: True + register: uri_check + +- name: check that we skipped at action + assert: + that: + - uri_check.msg == "This action (uri) does not support check mode."