diff --git a/lib/ansible/plugins/strategy/__init__.py b/lib/ansible/plugins/strategy/__init__.py index 09a1e0355fe..5f6974cea09 100644 --- a/lib/ansible/plugins/strategy/__init__.py +++ b/lib/ansible/plugins/strategy/__init__.py @@ -385,12 +385,6 @@ class StrategyBase: host_name = result.get('_ansible_delegated_vars', {}).get('ansible_delegated_host', None) return [host_name or task.delegate_to] - def get_handler_templar(self, handler_task, iterator): - handler_vars = self._variable_manager.get_vars(play=iterator._play, task=handler_task, - _hosts=self._hosts_cache, - _hosts_all=self._hosts_cache_all) - return Templar(loader=self._loader, variables=handler_vars) - @debug_closure def _process_pending_results(self, iterator, one_pass=False, max_passes=None): ''' @@ -399,6 +393,7 @@ class StrategyBase: ''' ret_results = [] + handler_templar = Templar(self._loader) def get_original_host(host_name): # FIXME: this should not need x2 _inventory @@ -414,8 +409,12 @@ class StrategyBase: for handler_task in handler_block.block: if handler_task.name: if not handler_task.cached_name: - templar = self.get_handler_templar(handler_task, iterator) - handler_task.name = templar.template(handler_task.name) + if handler_templar.is_template(handler_task.name): + handler_templar.available_variables = self._variable_manager.get_vars(play=iterator._play, + task=handler_task, + _hosts=self._hosts_cache, + _hosts_all=self._hosts_cache_all) + handler_task.name = handler_templar.template(handler_task.name) handler_task.cached_name = True try: @@ -570,9 +569,11 @@ class StrategyBase: for listening_handler_block in iterator._play.handlers: for listening_handler in listening_handler_block.block: listeners = getattr(listening_handler, 'listen', []) or [] - templar = self.get_handler_templar(listening_handler, iterator) + if not listeners: + continue + listeners = listening_handler.get_validated_value( - 'listen', listening_handler._valid_attrs['listen'], listeners, templar + 'listen', listening_handler._valid_attrs['listen'], listeners, handler_templar ) if handler_name not in listeners: continue