Prevent ansible_failed_task from further templating (#74290)

* Prevent ansible_failed_task from further templating

Fixes #74036

* Add changelog
This commit is contained in:
Martin Krizek 2021-04-15 21:48:57 +02:00 committed by GitHub
parent c6945de899
commit 664531d7d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 1 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- Prevent ``ansible_failed_task`` from further templating (https://github.com/ansible/ansible/issues/74036)

View file

@ -50,6 +50,7 @@ from ansible.playbook.task_include import TaskInclude
from ansible.plugins import loader as plugin_loader from ansible.plugins import loader as plugin_loader
from ansible.template import Templar from ansible.template import Templar
from ansible.utils.display import Display from ansible.utils.display import Display
from ansible.utils.unsafe_proxy import wrap_var
from ansible.utils.vars import combine_vars from ansible.utils.vars import combine_vars
from ansible.vars.clean import strip_internal_keys, module_response_deepcopy from ansible.vars.clean import strip_internal_keys, module_response_deepcopy
@ -572,7 +573,7 @@ class StrategyBase:
self._variable_manager.set_nonpersistent_facts( self._variable_manager.set_nonpersistent_facts(
original_host.name, original_host.name,
dict( dict(
ansible_failed_task=original_task.serialize(), ansible_failed_task=wrap_var(original_task.serialize()),
ansible_failed_result=task_result._result, ansible_failed_result=task_result._result,
), ),
) )

View file

@ -103,3 +103,5 @@ rm -f role_complete_test.out
# test notify inheritance # test notify inheritance
ansible-playbook inherit_notify.yml "$@" ansible-playbook inherit_notify.yml "$@"
ansible-playbook unsafe_failed_task.yml "$@"

View file

@ -0,0 +1,17 @@
- hosts: localhost
gather_facts: false
vars:
- data: {}
tasks:
- block:
- name: template error
debug:
msg: "{{ data.value }}"
rescue:
- debug:
msg: "{{ ansible_failed_task.action }}"
- assert:
that:
- ansible_failed_task.name == "template error"
- ansible_failed_task.action == "debug"