diff --git a/lib/ansible/plugins/action/__init__.py b/lib/ansible/plugins/action/__init__.py index 565b27502cd..f1e0a14bca6 100644 --- a/lib/ansible/plugins/action/__init__.py +++ b/lib/ansible/plugins/action/__init__.py @@ -242,22 +242,25 @@ class ActionBase(with_metaclass(ABCMeta, object)): # we'll propagate back to the controller in the task result discovered_key = 'discovered_interpreter_%s' % idre.interpreter_name + # update the local vars copy for the retry + if use_vars.get('ansible_facts') is None: + use_vars['ansible_facts'] = {} + use_vars['ansible_facts'][discovered_key] = self._discovered_interpreter + # TODO: this condition prevents 'wrong host' from being updated # but in future we would want to be able to update 'delegated host facts' # irrespective of task settings if not self._task.delegate_to or self._task.delegate_facts: # store in local task_vars facts collection for the retry and any other usages in this worker - if use_vars.get('ansible_facts') is None: - task_vars['ansible_facts'] = use_vars['ansible_facts'] = {} - task_vars['ansible_facts'][discovered_key] = use_vars['ansible_facts'][discovered_key] = self._discovered_interpreter + if task_vars.get('ansible_facts') is None: + task_vars['ansible_facts'] = {} + task_vars['ansible_facts'][discovered_key] = self._discovered_interpreter # preserve this so _execute_module can propagate back to controller as a fact self._discovered_interpreter_key = discovered_key else: if task_vars['ansible_delegated_vars'][self._task.delegate_to].get('ansible_facts') is None: task_vars['ansible_delegated_vars'][self._task.delegate_to]['ansible_facts'] = {} - use_vars['ansible_delegated_vars'][self._task.delegate_to]['ansible_facts'] = {} task_vars['ansible_delegated_vars'][self._task.delegate_to]['ansible_facts'][discovered_key] = self._discovered_interpreter - use_vars['ansible_delegated_vars'][self._task.delegate_to]['ansible_facts'][discovered_key] = self._discovered_interpreter return (module_style, module_shebang, module_data, module_path) diff --git a/test/integration/targets/delegate_to/runme.sh b/test/integration/targets/delegate_to/runme.sh index b315d20ef84..b5e0836ae06 100755 --- a/test/integration/targets/delegate_to/runme.sh +++ b/test/integration/targets/delegate_to/runme.sh @@ -73,3 +73,5 @@ ansible-playbook discovery_applied.yml -i inventory -v "$@" # https://github.com/ansible/ansible/issues/70168 ansible-playbook verify_interpreter_delegate_facts.yml -i inventory -v "$@" + +ansible-playbook verify_interpreter_auto_delegate_to.yml -i inventory -v "$@" diff --git a/test/integration/targets/delegate_to/verify_interpreter_auto_delegate_to.yml b/test/integration/targets/delegate_to/verify_interpreter_auto_delegate_to.yml new file mode 100644 index 00000000000..81905413b91 --- /dev/null +++ b/test/integration/targets/delegate_to/verify_interpreter_auto_delegate_to.yml @@ -0,0 +1,7 @@ +- hosts: testhost + gather_facts: no + tasks: + - detect_interpreter: + delegate_to: testhost3 + vars: + ansible_python_interpreter: auto