diff --git a/lib/ansible/executor/play_iterator.py b/lib/ansible/executor/play_iterator.py index fd59478ead..23ba52edf9 100644 --- a/lib/ansible/executor/play_iterator.py +++ b/lib/ansible/executor/play_iterator.py @@ -399,6 +399,9 @@ class PlayIterator: if state.fail_state != self.FAILED_NONE: return state + if not task_list: + return state + if state.run_state == self.ITERATING_TASKS: if state.tasks_child_state: state.tasks_child_state = self._insert_tasks_into_state(state.tasks_child_state, task_list) diff --git a/lib/ansible/plugins/strategy/free.py b/lib/ansible/plugins/strategy/free.py index e83184891d..11eeaa9249 100644 --- a/lib/ansible/plugins/strategy/free.py +++ b/lib/ansible/plugins/strategy/free.py @@ -145,9 +145,9 @@ class StrategyModule(StrategyBase): return False if len(included_files) > 0: + all_blocks = dict((host, []) for host in hosts_left) for included_file in included_files: - # included hosts get the task list while those excluded get an equal-length - # list of noop tasks, to make sure that they continue running in lock-step + display.debug("collecting new blocks for %s" % included_file) try: new_blocks = self._load_included_file(included_file, iterator=iterator) except AnsibleError as e: @@ -156,18 +156,18 @@ class StrategyModule(StrategyBase): display.warning(str(e)) 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: 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) for host in hosts_left: if host in included_file._hosts: 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: iterator.add_tasks(host, all_blocks[host]) + display.debug("done adding collected blocks to iterator") # pause briefly so we don't spin lock time.sleep(0.05)