summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2016-05-12 10:38:53 -0400
committerJames Cammarata <jimi@sngx.net>2016-05-12 10:42:51 -0400
commitd22898a27c82825f746247028150cd01607efa0b (patch)
treeb2eff9761be64edd5eb25a646d13926d0678404d
parent22b86bbb63033bddb6b1edd994d8f34cd8e4dafc (diff)
downloadansible-d22898a27c82825f746247028150cd01607efa0b.tar.gz
Clear blocked hosts when a role duplicate task is found in free strategy
In the free strategy, we mark a host as blocked when it has work to do (the PlayIterator returns a task) to prevent multiple tasks from being sent to the host. However, we check for role duplicates after setting the blocked flag, but were not clearing that when the task was skipped leading to an infinite loop. This patch corrects that by clearing the blocked flag when the task is skipped. Fixes #15681
-rw-r--r--lib/ansible/plugins/strategy/free.py1
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/ansible/plugins/strategy/free.py b/lib/ansible/plugins/strategy/free.py
index fb0ae7dfcc..ae8370d5fb 100644
--- a/lib/ansible/plugins/strategy/free.py
+++ b/lib/ansible/plugins/strategy/free.py
@@ -123,6 +123,7 @@ class StrategyModule(StrategyBase):
# if there is metadata, check to see if the allow_duplicates flag was set to true
if task._role._metadata is None or task._role._metadata and not task._role._metadata.allow_duplicates:
display.debug("'%s' skipped because role has already run" % task)
+ del self._blocked_hosts[host_name]
continue
if task.action == 'meta':