Merge pull request #13394 from Christoph-D/issue-13370

Fix #13370
This commit is contained in:
James Cammarata 2015-12-02 08:57:09 -05:00
commit f1d53a87e5
2 changed files with 8 additions and 5 deletions

View file

@ -399,6 +399,9 @@ class PlayIterator:
if state.fail_state != self.FAILED_NONE: if state.fail_state != self.FAILED_NONE:
return state return state
if not task_list:
return state
if state.run_state == self.ITERATING_TASKS: if state.run_state == self.ITERATING_TASKS:
if state.tasks_child_state: if state.tasks_child_state:
state.tasks_child_state = self._insert_tasks_into_state(state.tasks_child_state, task_list) state.tasks_child_state = self._insert_tasks_into_state(state.tasks_child_state, task_list)

View file

@ -145,9 +145,9 @@ class StrategyModule(StrategyBase):
return False return False
if len(included_files) > 0: if len(included_files) > 0:
all_blocks = dict((host, []) for host in hosts_left)
for included_file in included_files: for included_file in included_files:
# included hosts get the task list while those excluded get an equal-length display.debug("collecting new blocks for %s" % included_file)
# list of noop tasks, to make sure that they continue running in lock-step
try: try:
new_blocks = self._load_included_file(included_file, iterator=iterator) new_blocks = self._load_included_file(included_file, iterator=iterator)
except AnsibleError as e: except AnsibleError as e:
@ -156,18 +156,18 @@ class StrategyModule(StrategyBase):
display.warning(str(e)) display.warning(str(e))
continue continue
display.debug("generating all_blocks data")
all_blocks = dict((host, []) for host in hosts_left)
display.debug("done generating all_blocks data")
for new_block in new_blocks: for new_block in new_blocks:
task_vars = self._variable_manager.get_vars(loader=self._loader, play=iterator._play, task=included_file._task) task_vars = self._variable_manager.get_vars(loader=self._loader, play=iterator._play, task=included_file._task)
final_block = new_block.filter_tagged_tasks(play_context, task_vars) final_block = new_block.filter_tagged_tasks(play_context, task_vars)
for host in hosts_left: for host in hosts_left:
if host in included_file._hosts: if host in included_file._hosts:
all_blocks[host].append(final_block) all_blocks[host].append(final_block)
display.debug("done collecting new blocks for %s" % included_file)
display.debug("adding all collected blocks from %d included file(s) to iterator" % len(included_files))
for host in hosts_left: for host in hosts_left:
iterator.add_tasks(host, all_blocks[host]) iterator.add_tasks(host, all_blocks[host])
display.debug("done adding collected blocks to iterator")
# pause briefly so we don't spin lock # pause briefly so we don't spin lock
time.sleep(0.05) time.sleep(0.05)