Handle post_validate templating errors and fix tests (#70240)
* Handle unexpected templating errors * Fixes #70050 Fix up tests that weren't running and add tests for graceful templating error handling
This commit is contained in:
parent
cc2cee6980
commit
30e70f4b63
5 changed files with 41 additions and 3 deletions
|
@ -484,7 +484,12 @@ class TaskExecutor:
|
||||||
return dict(include_args=include_args)
|
return dict(include_args=include_args)
|
||||||
|
|
||||||
# Now we do final validation on the task, which sets all fields to their final values.
|
# Now we do final validation on the task, which sets all fields to their final values.
|
||||||
self._task.post_validate(templar=templar)
|
try:
|
||||||
|
self._task.post_validate(templar=templar)
|
||||||
|
except AnsibleError:
|
||||||
|
raise
|
||||||
|
except Exception:
|
||||||
|
return dict(changed=False, failed=True, _ansible_no_log=self._play_context.no_log, exception=to_text(traceback.format_exc()))
|
||||||
if '_variable_params' in self._task.args:
|
if '_variable_params' in self._task.args:
|
||||||
variable_params = self._task.args.pop('_variable_params')
|
variable_params = self._task.args.pop('_variable_params')
|
||||||
if isinstance(variable_params, dict):
|
if isinstance(variable_params, dict):
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
set -eux
|
set -eux
|
||||||
|
|
||||||
ANSIBLE_ROLES_PATH=../ UNICODE_VAR=café ansible-playbook runme.yml "$@"
|
ANSIBLE_ROLES_PATH=./ UNICODE_VAR=café ansible-playbook runme.yml "$@"
|
||||||
|
|
||||||
ansible-playbook template_lookup_vaulted/playbook.yml --vault-password-file template_lookup_vaulted/test_vault_pass "$@"
|
ansible-playbook template_lookup_vaulted/playbook.yml --vault-password-file template_lookup_vaulted/test_vault_pass "$@"
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
- hosts: localhost
|
- hosts: localhost
|
||||||
gather_facts: no
|
gather_facts: no
|
||||||
roles:
|
roles:
|
||||||
- { role: templating_lookups }
|
- { role: template_lookups }
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
- name: Task that fails due to templating error for plugin option
|
||||||
|
debug: msg="{{ 5 / 0 | int }}"
|
||||||
|
ignore_errors: true
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- result.failed
|
||||||
|
- result.exception
|
||||||
|
|
||||||
|
- name: Loop that fails due to templating error in first entry and ignores errors
|
||||||
|
debug: msg="{{ 5 / item }}"
|
||||||
|
ignore_errors: true
|
||||||
|
register: result
|
||||||
|
loop: [0, 0, 1]
|
||||||
|
|
||||||
|
- debug: var=result
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- result.results[0].failed
|
||||||
|
- result.results[0].exception
|
||||||
|
- result.results[0].item == 0
|
||||||
|
|
||||||
|
- result.results[1].failed
|
||||||
|
- result.results[1].exception
|
||||||
|
- result.results[1].item == 0
|
||||||
|
|
||||||
|
- not result.results[2].failed
|
||||||
|
- result.results[2].exception is undefined
|
||||||
|
- result.results[2].item == 1
|
|
@ -86,3 +86,5 @@
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- password1 != password2
|
- password1 != password2
|
||||||
|
|
||||||
|
- include_tasks: ./errors.yml
|
||||||
|
|
Loading…
Reference in a new issue