diff --git a/ansible_mitogen/runner.py b/ansible_mitogen/runner.py index 56d29487..608a707f 100644 --- a/ansible_mitogen/runner.py +++ b/ansible_mitogen/runner.py @@ -42,6 +42,7 @@ import shlex import shutil import sys import tempfile +import traceback import types import mitogen.core @@ -871,6 +872,11 @@ class NewStyleRunner(ScriptRunner): except SystemExit: exc = sys.exc_info()[1] rc = exc.args[0] + except Exception: + # This writes to stderr by default. + traceback.print_exc() + rc = 1 + finally: self.atexit_wrapper.run_callbacks() diff --git a/tests/ansible/integration/runner/all.yml b/tests/ansible/integration/runner/all.yml index 32229fe9..dc23901f 100644 --- a/tests/ansible/integration/runner/all.yml +++ b/tests/ansible/integration/runner/all.yml @@ -1,5 +1,6 @@ - include: atexit.yml - include: builtin_command_module.yml +- include: crashy_new_style_module.yml - include: custom_bash_hashbang_argument.yml - include: custom_bash_old_style_module.yml - include: custom_bash_want_json_module.yml diff --git a/tests/ansible/integration/runner/crashy_new_style_module.yml b/tests/ansible/integration/runner/crashy_new_style_module.yml new file mode 100644 index 00000000..40ee7f88 --- /dev/null +++ b/tests/ansible/integration/runner/crashy_new_style_module.yml @@ -0,0 +1,18 @@ +# issue #527: catch exceptions from crashy modules. + +- name: integration/runner/crashy_new_style_module.yml + hosts: test-targets + tasks: + - custom_python_run_script: + script: kaboom + register: out + ignore_errors: true + + - assert: + that: + - not out.changed + - out.rc == 1 + - out.msg == "MODULE FAILURE" + - out.module_stdout == "" + - "'Traceback (most recent call last)' in out.module_stderr" + - "\"NameError: name 'kaboom' is not defined\" in out.module_stderr"