diff --git a/changelogs/fragments/uri-supports-async.yaml b/changelogs/fragments/uri-supports-async.yaml new file mode 100644 index 00000000000..ff9e8eb20df --- /dev/null +++ b/changelogs/fragments/uri-supports-async.yaml @@ -0,0 +1,2 @@ +bugfixes: +- uri - Ensure the ``uri`` module supports async (https://github.com/ansible/ansible/issues/47660) diff --git a/lib/ansible/plugins/action/uri.py b/lib/ansible/plugins/action/uri.py index 0eea66e7a63..63280e78818 100644 --- a/lib/ansible/plugins/action/uri.py +++ b/lib/ansible/plugins/action/uri.py @@ -20,6 +20,8 @@ class ActionModule(ActionBase): TRANSFERS_FILES = True def run(self, tmp=None, task_vars=None): + self._supports_async = True + if task_vars is None: task_vars = dict() @@ -33,7 +35,7 @@ class ActionModule(ActionBase): if (src and remote_src) or not src: # everything is remote, so we just execute the module # without changing any of the module arguments - raise _AnsibleActionDone(result=self._execute_module(task_vars=task_vars)) + raise _AnsibleActionDone(result=self._execute_module(task_vars=task_vars, wrap_async=self._task.async_val)) try: src = self._find_needle('files', src) @@ -51,9 +53,10 @@ class ActionModule(ActionBase): ) ) - result.update(self._execute_module('uri', module_args=new_module_args, task_vars=task_vars)) + result.update(self._execute_module('uri', module_args=new_module_args, task_vars=task_vars, wrap_async=self._task.async_val)) except AnsibleAction as e: result.update(e.result) finally: - self._remove_tmp_path(self._connection._shell.tmpdir) + if not self._task.async_val: + self._remove_tmp_path(self._connection._shell.tmpdir) return result