Make on_file_diff callback item-aware

This commit is contained in:
James Cammarata 2015-12-09 14:51:43 -05:00
parent 04d74fd680
commit 14e19c239d
4 changed files with 22 additions and 4 deletions

View file

@ -59,6 +59,10 @@ class CallbackBase:
version = getattr(self, 'CALLBACK_VERSION', '1.0') version = getattr(self, 'CALLBACK_VERSION', '1.0')
self._display.vvvv('Loaded callback %s of type %s, v%s' % (name, ctype, version)) self._display.vvvv('Loaded callback %s of type %s, v%s' % (name, ctype, version))
def _copy_result(self, result):
''' helper for callbacks, so they don't all have to include deepcopy '''
return deepcopy(result)
def _dump_results(self, result, indent=None, sort_keys=True, keep_invocation=False): def _dump_results(self, result, indent=None, sort_keys=True, keep_invocation=False):
if result.get('_ansible_no_log', False): if result.get('_ansible_no_log', False):
return json.dumps(dict(censored="the output has been hidden due to the fact that 'no_log: true' was specified for this result")) return json.dumps(dict(censored="the output has been hidden due to the fact that 'no_log: true' was specified for this result"))
@ -126,7 +130,7 @@ class CallbackBase:
def _process_items(self, result): def _process_items(self, result):
for res in result._result['results']: for res in result._result['results']:
newres = deepcopy(result) newres = self._copy_result(result)
res['item'] = self._get_item(res) res['item'] = self._get_item(res)
newres._result = res newres._result = res
if 'failed' in res and res['failed']: if 'failed' in res and res['failed']:

View file

@ -134,7 +134,14 @@ class CallbackModule(CallbackBase):
self._display.banner(msg) self._display.banner(msg)
def v2_on_file_diff(self, result): def v2_on_file_diff(self, result):
if 'diff' in result._result and result._result['diff']: if result._task.loop and 'results' in result._result:
for res in result._result['results']:
newres = self._copy_result(result)
res['item'] = self._get_item(res)
newres._result = res
self.v2_on_file_diff(newres)
elif 'diff' in result._result and result._result['diff']:
self._display.display(self._get_diff(result._result['diff'])) self._display.display(self._get_diff(result._result['diff']))
def v2_playbook_item_on_ok(self, result): def v2_playbook_item_on_ok(self, result):

View file

@ -123,7 +123,14 @@ class CallbackModule(CallbackBase):
self._display.banner(msg) self._display.banner(msg)
def v2_on_file_diff(self, result): def v2_on_file_diff(self, result):
if 'diff' in result._result and result._result['diff']: if result._task.loop and 'results' in result._result:
for res in result._result['results']:
newres = self._copy_result(result)
res['item'] = self._get_item(res)
newres._result = res
self.v2_on_file_diff(newres)
elif 'diff' in result._result and result._result['diff']:
self._display.display(self._get_diff(result._result['diff'])) self._display.display(self._get_diff(result._result['diff']))
def v2_playbook_item_on_ok(self, result): def v2_playbook_item_on_ok(self, result):

View file

@ -221,7 +221,7 @@ class StrategyBase:
self._tqm._stats.increment('changed', host.name) self._tqm._stats.increment('changed', host.name)
self._tqm.send_callback('v2_runner_on_ok', task_result) self._tqm.send_callback('v2_runner_on_ok', task_result)
if self._diff and 'diff' in task_result._result: if self._diff:
self._tqm.send_callback('v2_on_file_diff', task_result) self._tqm.send_callback('v2_on_file_diff', task_result)
self._pending_results -= 1 self._pending_results -= 1