Skip to content

Commit

Permalink
Handle post_validate templating errors and fix tests (ansible#70240)
Browse files Browse the repository at this point in the history
* Handle unexpected templating errors

* Fixes ansible#70050

Fix up tests that weren't running and add tests for graceful templating error handling
  • Loading branch information
s-hertel authored Jun 30, 2020
1 parent cc2cee6 commit 30e70f4
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 3 deletions.
7 changes: 6 additions & 1 deletion lib/ansible/executor/task_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,12 @@ def _execute(self, variables=None):
return dict(include_args=include_args)

# 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:
variable_params = self._task.args.pop('_variable_params')
if isinstance(variable_params, dict):
Expand Down
2 changes: 1 addition & 1 deletion test/integration/targets/templating_lookups/runme.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

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 "$@"

Expand Down
2 changes: 1 addition & 1 deletion test/integration/targets/templating_lookups/runme.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
- hosts: localhost
gather_facts: no
roles:
- { role: templating_lookups }
- { role: template_lookups }
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,5 @@
assert:
that:
- password1 != password2

- include_tasks: ./errors.yml

0 comments on commit 30e70f4

Please sign in to comment.