Fix triggering parent's always with run_once set (#35464)

This commit is contained in:
Martin Krizek 2018-01-30 13:16:19 +01:00 committed by GitHub
parent 2293252e52
commit 7c83f006c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 1 deletions

View file

@ -389,9 +389,10 @@ class StrategyModule(StrategyBase):
# if any_errors_fatal and we had an error, mark all hosts as failed
if any_errors_fatal and (len(failed_hosts) > 0 or len(unreachable_hosts) > 0):
dont_fail_states = frozenset([iterator.ITERATING_RESCUE, iterator.ITERATING_ALWAYS])
for host in hosts_left:
(s, _) = iterator.get_next_task_for_host(host, peek=True)
if s.run_state != iterator.ITERATING_RESCUE or \
if s.run_state not in dont_fail_states or \
s.run_state == iterator.ITERATING_RESCUE and s.fail_state & iterator.FAILED_RESCUE != 0:
self._tqm._failed_hosts[host.name] = True
result |= self._tqm.RUN_FAILED_BREAK_PLAY

View file

@ -10,6 +10,7 @@
tasks_run_after_failure: false
rescue_run_after_failure: false
always_run_after_failure: false
nested_block_fail_always: false
tasks:
- block:
- name: set block tasks run flag
@ -46,6 +47,18 @@
# always_run_after_failure: true
- meta: clear_host_errors
# https://github.com/ansible/ansible/issues/35148
- block:
- block:
- name: EXPECTED FAILURE test triggering always by failing in nested block with run_once set
fail:
run_once: true
always:
- name: set block fail always run flag
set_fact:
nested_block_fail_always: true
- meta: clear_host_errors
post_tasks:
- assert:
that:
@ -56,6 +69,7 @@
- not tasks_run_after_failure
- not rescue_run_after_failure
- not always_run_after_failure
- nested_block_fail_always
- debug: msg="TEST COMPLETE"
- name: block with includes