diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index e01b6141f8e01a..dd3698f85bb5ad 100644 --- a/lib/ansible/playbook/play.py +++ b/lib/ansible/playbook/play.py @@ -227,6 +227,16 @@ def _compile_roles(self): block_list = [] + # create a block containing a single flush handlers meta + # task, so we can be sure to run handlers at certain points + # of the playbook execution + flush_block = Block.load( + data={'meta': 'flush_handlers'}, + play=self, + variable_manager=self._variable_manager, + loader=self._loader + ) + if len(self.roles) > 0: for r in self.roles: # Don't insert tasks from ``import/include_role``, preventing @@ -234,6 +244,7 @@ def _compile_roles(self): if r.from_include: continue block_list.extend(r.compile(play=self)) + block_list.append(flush_block) return block_list