* more centralized exception handling

* only remove when verboxse
This commit is contained in:
Brian Coca 2017-02-27 13:29:40 -05:00 committed by GitHub
parent 89bf14e467
commit b3251c9585
3 changed files with 19 additions and 28 deletions

View file

@ -109,6 +109,20 @@ class CallbackBase:
self._display.deprecated(**warning) self._display.deprecated(**warning)
del res['deprecations'] del res['deprecations']
def _handle_exception(self, result):
if 'exception' in result:
msg = "An exception occurred during task execution. "
if self._display.verbosity < 3:
# extract just the actual error message from the exception text
error = result['exception'].strip().split('\n')[-1]
msg += "To see the full traceback, use -vvv. The error was: %s" % error
else:
msg = "The full traceback is:\n" + result['exception']
del result['exception']
self._display.display(msg, color=C.COLOR_ERROR)
def _get_diff(self, difflist): def _get_diff(self, difflist):
if not isinstance(difflist, list): if not isinstance(difflist, list):
@ -197,6 +211,7 @@ class CallbackBase:
if 'invocation' in result and task_name in ['debug']: if 'invocation' in result and task_name in ['debug']:
del result['invocation'] del result['invocation']
def set_play_context(self, play_context): def set_play_context(self, play_context):
pass pass

View file

@ -46,16 +46,7 @@ class CallbackModule(CallbackBase):
self._print_task_banner(result._task) self._print_task_banner(result._task)
delegated_vars = result._result.get('_ansible_delegated_vars', None) delegated_vars = result._result.get('_ansible_delegated_vars', None)
if 'exception' in result._result: self._handle_exception(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=C.COLOR_ERROR)
self._handle_warnings(result._result) self._handle_warnings(result._result)
if result._task.loop and 'results' in result._result: if result._task.loop and 'results' in result._result:
@ -212,16 +203,9 @@ class CallbackModule(CallbackBase):
self._display.display(msg, color=color) self._display.display(msg, color=color)
def v2_runner_item_on_failed(self, result): def v2_runner_item_on_failed(self, result):
delegated_vars = result._result.get('_ansible_delegated_vars', None)
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=C.COLOR_ERROR) delegated_vars = result._result.get('_ansible_delegated_vars', None)
self._handle_exception(result._result)
msg = "failed: " msg = "failed: "
if delegated_vars: if delegated_vars:

View file

@ -45,16 +45,8 @@ class CallbackModule(CallbackBase):
return buf + "\n" return buf + "\n"
def v2_runner_on_failed(self, result, ignore_errors=False): def v2_runner_on_failed(self, result, ignore_errors=False):
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=C.COLOR_ERROR)
self._handle_exception(result._result)
self._handle_warnings(result._result) self._handle_warnings(result._result)
if result._task.action in C.MODULE_NO_JSON and 'module_stderr' not in result._result: if result._task.action in C.MODULE_NO_JSON and 'module_stderr' not in result._result: