From f018b9d07dac91cba2961f8dd2bce900f651c781 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Mon, 21 Jan 2019 11:21:12 -0500 Subject: [PATCH] Fix missing tracebacks in ansible-inventory (cherry picked from commit b62693299b3d561c9a0a78c6c8e440f3c623b5d1) --- .../fragments/51136-fix-ansible-inventory-tracebacks.yml | 2 ++ lib/ansible/inventory/manager.py | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 changelogs/fragments/51136-fix-ansible-inventory-tracebacks.yml 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 0000000000..6a53b522ed --- /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 de2041a68f..abe4ced438 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))