From 994e57fa2b45a486830cc00654a8f840016e0007 Mon Sep 17 00:00:00 2001 From: Vincent Roy Date: Wed, 13 Apr 2016 15:12:54 -0300 Subject: [PATCH] Handle max_fail_percentage per task. --- lib/ansible/plugins/strategy/linear.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/ansible/plugins/strategy/linear.py b/lib/ansible/plugins/strategy/linear.py index c386df7fe10..871642daffd 100644 --- a/lib/ansible/plugins/strategy/linear.py +++ b/lib/ansible/plugins/strategy/linear.py @@ -363,6 +363,19 @@ class StrategyModule(StrategyBase): iterator.mark_host_failed(host) display.debug("done checking for any_errors_fatal") + display.debug("checking for max_fail_percentage") + if iterator._play.max_fail_percentage is not None and len(results) > 0: + percentage = iterator._play.max_fail_percentage / 100.0 + + if (len(failed_hosts) / len(results)) > percentage: + for host in hosts_left: + # don't double-mark hosts, or the iterator will potentially + # fail them out of the rescue/always states + if host.name not in failed_hosts: + self._tqm._failed_hosts[host.name] = True + iterator.mark_host_failed(host) + display.debug("done checking for max_fail_percentage") + except (IOError, EOFError) as e: display.debug("got IOError/EOFError in task loop: %s" % e) # most likely an abort, return failed