Fix some more handler issues

* Only notify handlers when the task is changed
* Don't run handlers on hosts which have failed
This commit is contained in:
James Cammarata 2015-06-30 14:44:41 -04:00
parent 2576f480fd
commit ec4d1b11df
2 changed files with 2 additions and 2 deletions

View file

@ -123,7 +123,7 @@ class ResultProcess(multiprocessing.Process):
self._send_result(('host_task_skipped', result)) self._send_result(('host_task_skipped', result))
else: else:
# if this task is notifying a handler, do it now # if this task is notifying a handler, do it now
if result._task.notify: if result._task.notify and result._result.get('changed', False):
# The shared dictionary for notified handlers is a proxy, which # The shared dictionary for notified handlers is a proxy, which
# does not detect when sub-objects within the proxy are modified. # does not detect when sub-objects within the proxy are modified.
# So, per the docs, we reassign the list so the proxy picks up and # So, per the docs, we reassign the list so the proxy picks up and

View file

@ -380,7 +380,7 @@ class StrategyBase:
break break
self._tqm.send_callback('v2_playbook_on_handler_task_start', handler) self._tqm.send_callback('v2_playbook_on_handler_task_start', handler)
for host in self._notified_handlers[handler_name]: for host in self._notified_handlers[handler_name]:
if not handler.has_triggered(host): if not handler.has_triggered(host) and host.name not in self._tqm._failed_hosts:
task_vars = self._variable_manager.get_vars(loader=self._loader, play=iterator._play, host=host, task=handler) task_vars = self._variable_manager.get_vars(loader=self._loader, play=iterator._play, host=host, task=handler)
task_vars = self.add_tqm_variables(task_vars, play=iterator._play) task_vars = self.add_tqm_variables(task_vars, play=iterator._play)
self._queue_task(host, handler, task_vars, connection_info) self._queue_task(host, handler, task_vars, connection_info)