diff --git a/lib/ansible/executor/process/result.py b/lib/ansible/executor/process/result.py index 68a458bd869..8961b43ce44 100644 --- a/lib/ansible/executor/process/result.py +++ b/lib/ansible/executor/process/result.py @@ -131,16 +131,17 @@ class ResultProcess(multiprocessing.Process): for result_item in result_items: # if this task is notifying a handler, do it now - if 'ansible_notify' in result_item and result.is_changed(): - # The shared dictionary for notified handlers is a proxy, which - # 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 - # notifies all other threads - for notify in result_item['ansible_notify']: - if result._task._role: - role_name = result._task._role.get_name() - notify = "%s : %s" % (role_name, notify) - self._send_result(('notify_handler', result._host, notify)) + if 'ansible_notify' in result_item: + if result.is_changed(): + # The shared dictionary for notified handlers is a proxy, which + # 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 + # notifies all other threads + for notify in result_item['ansible_notify']: + if result._task._role: + role_name = result._task._role.get_name() + notify = "%s : %s" % (role_name, notify) + self._send_result(('notify_handler', result._host, notify)) # now remove the notify field from the results, as its no longer needed result_item.pop('ansible_notify') diff --git a/lib/ansible/executor/task_executor.py b/lib/ansible/executor/task_executor.py index 4322310603f..8393b614597 100644 --- a/lib/ansible/executor/task_executor.py +++ b/lib/ansible/executor/task_executor.py @@ -333,7 +333,7 @@ class TaskExecutor: # save the notification target in the result, if it was specified, as # this task may be running in a loop in which case the notification # may be item-specific, ie. "notify: service {{item}}" - if self._task.notify: + if self._task.notify is not None: result['ansible_notify'] = self._task.notify # and return diff --git a/lib/ansible/plugins/action/normal.py b/lib/ansible/plugins/action/normal.py index 8e2f5c84cdf..763b1d5ea77 100644 --- a/lib/ansible/plugins/action/normal.py +++ b/lib/ansible/plugins/action/normal.py @@ -28,7 +28,7 @@ class ActionModule(ActionBase): # Remove special fields from the result, which can only be set # internally by the executor engine. We do this only here in # the 'normal' action, as other action plugins may set this. - for field in ('ansible_facts', 'ansible_notify'): + for field in ('ansible_notify',): if field in results: results.pop(field) diff --git a/lib/ansible/plugins/strategies/__init__.py b/lib/ansible/plugins/strategies/__init__.py index 1b4c1a2c1d6..c9154556bfa 100644 --- a/lib/ansible/plugins/strategies/__init__.py +++ b/lib/ansible/plugins/strategies/__init__.py @@ -213,7 +213,6 @@ class StrategyBase: elif result[0] == 'notify_handler': host = result[1] handler_name = result[2] - if handler_name not in self._notified_handlers: self._notified_handlers[handler_name] = [] @@ -425,7 +424,7 @@ class StrategyBase: 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) self._queue_task(host, handler, task_vars, connection_info) - handler.flag_for_host(host) + #handler.flag_for_host(host) self._process_pending_results(iterator) self._wait_on_pending_results(iterator) # wipe the notification list