diff --git a/changelogs/fragments/51136-fix-ansible-inventory-tracebacks.yml b/changelogs/fragments/51136-fix-ansible-inventory-tracebacks.yml new file mode 100644 index 00000000000..6a53b522edb --- /dev/null +++ b/changelogs/fragments/51136-fix-ansible-inventory-tracebacks.yml @@ -0,0 +1,2 @@ +bugfixes: + - Fix bug where some inventory parsing tracebacks were missing or reported under the wrong plugin. diff --git a/lib/ansible/inventory/manager.py b/lib/ansible/inventory/manager.py index de2041a68f4..abe4ced4381 100644 --- a/lib/ansible/inventory/manager.py +++ b/lib/ansible/inventory/manager.py @@ -21,8 +21,10 @@ __metaclass__ = type import fnmatch import os +import sys import re import itertools +import traceback from operator import attrgetter from random import shuffle @@ -273,6 +275,9 @@ class InventoryManager(object): break except AnsibleParserError as e: display.debug('%s was not parsable by %s' % (source, plugin_name)) + # Ansible error was created before the exception has been processed, + # so traceback can only be obtained within this context + e.tb = ''.join(traceback.format_tb(sys.exc_info()[2])) failures.append({'src': source, 'plugin': plugin_name, 'exc': e}) except Exception as e: display.debug('%s failed to parse %s' % (plugin_name, source))