diff --git a/lib/ansible/executor/playbook_executor.py b/lib/ansible/executor/playbook_executor.py index 71796921237..501e90ee2c8 100644 --- a/lib/ansible/executor/playbook_executor.py +++ b/lib/ansible/executor/playbook_executor.py @@ -151,9 +151,8 @@ class PlaybookExecutor: elif len(batch) == failed_hosts_count: break - # clear the failed hosts dictionaires in the TQM for the next batch + # save the unreachable hosts from this batch self._unreachable_hosts.update(self._tqm._unreachable_hosts) - self._tqm.clear_failed_hosts() # if the last result wasn't zero or 3 (some hosts were unreachable), # break out of the serial batch loop diff --git a/lib/ansible/plugins/strategy/linear.py b/lib/ansible/plugins/strategy/linear.py index 9ab302e0da1..c386df7fe10 100644 --- a/lib/ansible/plugins/strategy/linear.py +++ b/lib/ansible/plugins/strategy/linear.py @@ -163,7 +163,7 @@ class StrategyModule(StrategyBase): try: display.debug("getting the remaining hosts for this loop") - hosts_left = [host for host in self._inventory.get_hosts(iterator._play.hosts) if host.name not in self._tqm._unreachable_hosts] + hosts_left = [host for host in self._inventory.get_hosts(iterator._play.hosts) if host.name not in self._tqm._unreachable_hosts and not iterator.is_failed(host)] display.debug("done getting the remaining hosts for this loop") # queue up this task for each host in the inventory @@ -350,7 +350,7 @@ class StrategyModule(StrategyBase): display.debug("checking for any_errors_fatal") failed_hosts = [] for res in results: - if res.is_failed() or res.is_unreachable(): + if res.is_failed(): failed_hosts.append(res._host.name) # if any_errors_fatal and we had an error, mark all hosts as failed