diff options
Diffstat (limited to 'lib/ansible/playbook')
-rw-r--r-- | lib/ansible/playbook/play.py | 2 | ||||
-rw-r--r-- | lib/ansible/playbook/role/__init__.py | 18 |
2 files changed, 16 insertions, 4 deletions
diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index a85ab7fe64..2031465eef 100644 --- a/lib/ansible/playbook/play.py +++ b/lib/ansible/playbook/play.py @@ -265,7 +265,7 @@ class Play(Base, Taggable, Become): if len(self.roles) > 0: for r in self.roles: - block_list.extend(r.get_handler_blocks()) + block_list.extend(r.get_handler_blocks(play=self)) return block_list diff --git a/lib/ansible/playbook/role/__init__.py b/lib/ansible/playbook/role/__init__.py index 6793feb343..3f1908c754 100644 --- a/lib/ansible/playbook/role/__init__.py +++ b/lib/ansible/playbook/role/__init__.py @@ -301,12 +301,24 @@ class Role(Base, Become, Conditional, Taggable): def get_task_blocks(self): return self._task_blocks[:] - def get_handler_blocks(self): + def get_handler_blocks(self, play, dep_chain=None): block_list = [] + + # update the dependency chain here + if dep_chain is None: + dep_chain = [] + new_dep_chain = dep_chain + [self] + for dep in self.get_direct_dependencies(): - dep_blocks = dep.get_handler_blocks() + dep_blocks = dep.get_handler_blocks(play=play, dep_chain=new_dep_chain) block_list.extend(dep_blocks) - block_list.extend(self._handler_blocks) + + for task_block in self._handler_blocks: + new_task_block = task_block.copy() + new_task_block._dep_chain = new_dep_chain + new_task_block._play = play + block_list.append(new_task_block) + return block_list def has_run(self, host): |