Take previously failed/unreachable hosts into account when checking the batch

Again, as we're carrying failed/unreachable hosts forward from play to play via
internal structures, we need to remember which ones had previously failed so that
unrelated host failures don't inflate the numbers for a given serial batch in the
PlaybookExecutor causing a premature exit.

Fixes #16364

(cherry picked from commit 4c1601e9f2)
pull/16416/head
James Cammarata 9 years ago
parent a7f93be2b6
commit a7199abb74

@ -129,6 +129,9 @@ class PlaybookExecutor:
else: else:
self._tqm._unreachable_hosts.update(self._unreachable_hosts) self._tqm._unreachable_hosts.update(self._unreachable_hosts)
previously_failed = len(self._tqm._failed_hosts)
previously_unreachable = len(self._tqm._unreachable_hosts)
break_play = False break_play = False
# we are actually running plays # we are actually running plays
for batch in self._get_serialized_batches(new_play): for batch in self._get_serialized_batches(new_play):
@ -151,7 +154,8 @@ class PlaybookExecutor:
# failure percentage allowed, or if any errors are fatal. If either of those # failure percentage allowed, or if any errors are fatal. If either of those
# conditions are met, we break out, otherwise we only break out if the entire # conditions are met, we break out, otherwise we only break out if the entire
# batch failed # batch failed
failed_hosts_count = len(self._tqm._failed_hosts) + len(self._tqm._unreachable_hosts) failed_hosts_count = len(self._tqm._failed_hosts) + len(self._tqm._unreachable_hosts) - \
(previously_failed + previously_unreachable)
if new_play.max_fail_percentage is not None and \ if new_play.max_fail_percentage is not None and \
int((new_play.max_fail_percentage)/100.0 * len(batch)) > int((len(batch) - failed_hosts_count) / len(batch) * 100.0): int((new_play.max_fail_percentage)/100.0 * len(batch)) > int((len(batch) - failed_hosts_count) / len(batch) * 100.0):
break_play = True break_play = True

Loading…
Cancel
Save