diff --git a/lib/ansible/plugins/callback/skippy.py b/lib/ansible/plugins/callback/skippy.py index db742a46ac5..4307298b495 100644 --- a/lib/ansible/plugins/callback/skippy.py +++ b/lib/ansible/plugins/callback/skippy.py @@ -46,7 +46,10 @@ class CallbackModule(CallbackBase): # finally, remove the exception from the result so it's not shown every time del result._result['exception'] - self._display.display("fatal: [%s]: FAILED! => %s" % (result._host.get_name(), self._dump_results(result._result)), color='red') + if result._task.loop and 'results' in result._result: + self._process_items(result) + else: + self._display.display("fatal: [%s]: FAILED! => %s" % (result._host.get_name(), self._dump_results(result._result)), color='red') if result._task.ignore_errors: self._display.display("...ignoring", color='cyan') @@ -63,10 +66,13 @@ class CallbackModule(CallbackBase): msg = "ok: [%s]" % result._host.get_name() color = 'green' - if (self._display.verbosity > 0 or '_ansible_verbose_always' in result._result) and not '_ansible_verbose_override' in result._result and result._task.action != 'include': - msg += " => %s" % self._dump_results(result._result) + if result._task.loop and 'results' in result._result: + self._process_items(result) + if (self._display.verbosity > 0 or '_ansible_verbose_always' in result._result) and not '_ansible_verbose_override' in result._result and result._task.action != 'include': + msg += " => %s" % self._dump_results(result._result) self._display.display(msg, color=color) + self._handle_warnings(result._result) def v2_runner_on_unreachable(self, result): @@ -94,4 +100,50 @@ class CallbackModule(CallbackBase): else: msg = "PLAY [%s]" % name - self._display.banner(name) + self._display.banner(msg) + + def v2_on_file_diff(self, result): + if 'diff' in result._result and result._result['diff'] != {}: + self._display.display(self._get_diff(result._result['diff'])) + + def v2_playbook_item_on_ok(self, result): + + if result._task.action == 'include': + msg = 'included: %s for %s' % (result._task.args.get('_raw_params'), result._host.name) + color = 'cyan' + elif result._result.get('changed', False): + msg = "changed: [%s]" % result._host.get_name() + color = 'yellow' + else: + msg = "ok: [%s]" % result._host.get_name() + color = 'green' + + msg += " => (item=%s)" % result._result['item'] + + if (self._display.verbosity > 0 or '_ansible_verbose_always' in result._result) and not '_ansible_verbose_override' in result._result and result._task.action != 'include': + msg += " => %s" % self._dump_results(result._result) + self._display.display(msg, color=color) + + def v2_playbook_item_on_failed(self, result): + if 'exception' in result._result: + if self._display.verbosity < 3: + # extract just the actual error message from the exception text + error = result._result['exception'].strip().split('\n')[-1] + msg = "An exception occurred during task execution. To see the full traceback, use -vvv. The error was: %s" % error + else: + msg = "An exception occurred during task execution. The full traceback is:\n" + result._result['exception'] + + self._display.display(msg, color='red') + + # finally, remove the exception from the result so it's not shown every time + del result._result['exception'] + + self._display.display("failed: [%s] => (item=%s) => %s" % (result._host.get_name(), result._result['item'], self._dump_results(result._result)), color='red') + self._handle_warnings(result._result) + + def v2_playbook_item_on_skipped(self, result): + msg = "skipping: [%s] => (item=%s) " % (result._host.get_name(), result._result['item']) + if (self._display.verbosity > 0 or '_ansible_verbose_always' in result._result) and not '_ansible_verbose_override' in result._result: + msg += " => %s" % self._dump_results(result._result) + self._display.display(msg, color='cyan') +