Cleaning up some of the notify/facts logic added earlier to fix problems

This commit is contained in:
James Cammarata 2015-07-17 14:44:05 -04:00
parent 1aa4155266
commit 271a7f3281
4 changed files with 14 additions and 14 deletions

View file

@ -131,16 +131,17 @@ class ResultProcess(multiprocessing.Process):
for result_item in result_items: for result_item in result_items:
# if this task is notifying a handler, do it now # if this task is notifying a handler, do it now
if 'ansible_notify' in result_item and result.is_changed(): if 'ansible_notify' in result_item:
# The shared dictionary for notified handlers is a proxy, which if result.is_changed():
# does not detect when sub-objects within the proxy are modified. # The shared dictionary for notified handlers is a proxy, which
# So, per the docs, we reassign the list so the proxy picks up and # does not detect when sub-objects within the proxy are modified.
# notifies all other threads # So, per the docs, we reassign the list so the proxy picks up and
for notify in result_item['ansible_notify']: # notifies all other threads
if result._task._role: for notify in result_item['ansible_notify']:
role_name = result._task._role.get_name() if result._task._role:
notify = "%s : %s" % (role_name, notify) role_name = result._task._role.get_name()
self._send_result(('notify_handler', result._host, notify)) 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 # now remove the notify field from the results, as its no longer needed
result_item.pop('ansible_notify') result_item.pop('ansible_notify')

View file

@ -333,7 +333,7 @@ class TaskExecutor:
# save the notification target in the result, if it was specified, as # 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 # this task may be running in a loop in which case the notification
# may be item-specific, ie. "notify: service {{item}}" # 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 result['ansible_notify'] = self._task.notify
# and return # and return

View file

@ -28,7 +28,7 @@ class ActionModule(ActionBase):
# Remove special fields from the result, which can only be set # Remove special fields from the result, which can only be set
# internally by the executor engine. We do this only here in # internally by the executor engine. We do this only here in
# the 'normal' action, as other action plugins may set this. # 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: if field in results:
results.pop(field) results.pop(field)

View file

@ -213,7 +213,6 @@ class StrategyBase:
elif result[0] == 'notify_handler': elif result[0] == 'notify_handler':
host = result[1] host = result[1]
handler_name = result[2] handler_name = result[2]
if handler_name not in self._notified_handlers: if handler_name not in self._notified_handlers:
self._notified_handlers[handler_name] = [] 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._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)
handler.flag_for_host(host) #handler.flag_for_host(host)
self._process_pending_results(iterator) self._process_pending_results(iterator)
self._wait_on_pending_results(iterator) self._wait_on_pending_results(iterator)
# wipe the notification list # wipe the notification list