summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Kontusz <tomasz.kontusz@gmail.com>2016-01-05 20:19:47 +0100
committerTomasz Kontusz <tomasz.kontusz@gmail.com>2016-01-05 21:49:08 +0100
commitec3b7b7de87f117bebd5c314ac2ca16bc6c56b55 (patch)
tree2d6b70f70b6823b5da98374f99c297c65884e836
parent7a4914aa9be8a371a8854800c657bb91b7b8e518 (diff)
downloadansible-ec3b7b7de87f117bebd5c314ac2ca16bc6c56b55.tar.gz
linear strategy: don't look at tasks from the next block
-rw-r--r--lib/ansible/plugins/strategy/linear.py33
1 files changed, 23 insertions, 10 deletions
diff --git a/lib/ansible/plugins/strategy/linear.py b/lib/ansible/plugins/strategy/linear.py
index 7bb227dbae..7b821af4e9 100644
--- a/lib/ansible/plugins/strategy/linear.py
+++ b/lib/ansible/plugins/strategy/linear.py
@@ -62,19 +62,32 @@ class StrategyModule(StrategyBase):
num_rescue = 0
num_always = 0
- lowest_cur_block = len(iterator._blocks)
-
display.debug("counting tasks in each state of execution")
- for (k, v) in iteritems(host_tasks):
- if v is None:
- continue
-
+ host_tasks_to_run = [(host, state_task)
+ for host, state_task in iteritems(host_tasks)
+ if state_task and state_task[1]]
+ # Drop noops
+ host_tasks_to_run = [
+ (host, (state, task))
+ for host, (state, task) in host_tasks_to_run
+ if task.action != 'meta' or task.args.get('_raw_params') != 'noop'
+ ]
+
+ if host_tasks_to_run:
+ lowest_cur_block = min(
+ (s.cur_block for h, (s, t) in host_tasks_to_run
+ if s.run_state != PlayIterator.ITERATING_COMPLETE))
+ else:
+ # empty host_tasks_to_run will just run till the end of the function
+ # without ever touching lowest_cur_block
+ lowest_cur_block = None
+
+ for (k, v) in host_tasks_to_run:
(s, t) = v
- if t is None:
- continue
- if s.cur_block < lowest_cur_block and s.run_state != PlayIterator.ITERATING_COMPLETE:
- lowest_cur_block = s.cur_block
+ if s.cur_block > lowest_cur_block:
+ # Not the current block, ignore it
+ continue
if s.run_state == PlayIterator.ITERATING_SETUP:
num_setups += 1