From a7199abb74b33effe94f421ba9c47bcc2cdef941 Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Tue, 21 Jun 2016 16:42:15 -0500 Subject: [PATCH] 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 4c1601e9f245cda42e5c41237189d2a039e2f525) --- lib/ansible/executor/playbook_executor.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/ansible/executor/playbook_executor.py b/lib/ansible/executor/playbook_executor.py index fed9ba5d52d..826fc9146db 100644 --- a/lib/ansible/executor/playbook_executor.py +++ b/lib/ansible/executor/playbook_executor.py @@ -129,6 +129,9 @@ class PlaybookExecutor: else: 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 # we are actually running plays 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 # conditions are met, we break out, otherwise we only break out if the entire # 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 \ int((new_play.max_fail_percentage)/100.0 * len(batch)) > int((len(batch) - failed_hosts_count) / len(batch) * 100.0): break_play = True