diff options
author | James Cammarata <jimi@sngx.net> | 2016-10-04 01:21:07 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2016-10-04 01:43:38 -0500 |
commit | 2a234c1ff97406692968f1aa4e22b27fbdf9d574 (patch) | |
tree | b694afb6d7b1d471f6556e32d0be49cb4fb702b9 | |
parent | 751865d68cbdb0658113893956cece11dcd4914e (diff) | |
download | ansible-2a234c1ff97406692968f1aa4e22b27fbdf9d574.tar.gz |
Check for substates in is_failed before checking main state failure
Fixes #17882
(cherry picked from commit d09f57fb3a65b35e22378bf5e40db0c197b71591)
-rw-r--r-- | lib/ansible/executor/play_iterator.py | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/ansible/executor/play_iterator.py b/lib/ansible/executor/play_iterator.py index 52b7cfc1b0..2c88a8b427 100644 --- a/lib/ansible/executor/play_iterator.py +++ b/lib/ansible/executor/play_iterator.py @@ -80,7 +80,7 @@ class HostState: ret.append(states[i]) return "|".join(ret) - return "HOST STATE: block=%d, task=%d, rescue=%d, always=%d, role=%s, run_state=%s, fail_state=%s, pending_setup=%s, tasks child state? %s, rescue child state? %s, always child state? %s, did start at task? %s" % ( + return "HOST STATE: block=%d, task=%d, rescue=%d, always=%d, role=%s, run_state=%s, fail_state=%s, pending_setup=%s, tasks child state? (%s), rescue child state? (%s), always child state? (%s), did start at task? %s" % ( self.cur_block, self.cur_regular_task, self.cur_rescue_task, @@ -477,6 +477,10 @@ class PlayIterator: def _check_failed_state(self, state): if state is None: return False + elif state.run_state == self.ITERATING_RESCUE and self._check_failed_state(state.rescue_child_state): + return True + elif state.run_state == self.ITERATING_ALWAYS and self._check_failed_state(state.always_child_state): + return True elif state.fail_state != self.FAILED_NONE: if state.run_state == self.ITERATING_RESCUE and state.fail_state&self.FAILED_RESCUE == 0: return False @@ -490,10 +494,6 @@ class PlayIterator: return False else: return True - elif state.run_state == self.ITERATING_RESCUE and self._check_failed_state(state.rescue_child_state): - return True - elif state.run_state == self.ITERATING_ALWAYS and self._check_failed_state(state.always_child_state): - return True return False def is_failed(self, host): |