From 8fd0fbe431573054e881bb51c9cb8f8902a42467 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Mon, 21 Jan 2019 12:47:02 -0500 Subject: [PATCH] remove usless tb initiator always pass proper tb --- lib/ansible/errors/__init__.py | 4 ---- lib/ansible/inventory/manager.py | 15 +++++++-------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/lib/ansible/errors/__init__.py b/lib/ansible/errors/__init__.py index 5abdb4c74b..35ceaf4949 100644 --- a/lib/ansible/errors/__init__.py +++ b/lib/ansible/errors/__init__.py @@ -20,8 +20,6 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import re -import sys -import traceback from ansible.errors.yaml_strings import ( YAML_COMMON_DICT_ERROR, @@ -72,8 +70,6 @@ class AnsibleError(Exception): if orig_exc: self.orig_exc = orig_exc - self.tb = ''.join(traceback.format_tb(sys.exc_info()[2])) - def __str__(self): return self.message diff --git a/lib/ansible/inventory/manager.py b/lib/ansible/inventory/manager.py index abe4ced438..66885da847 100644 --- a/lib/ansible/inventory/manager.py +++ b/lib/ansible/inventory/manager.py @@ -275,13 +275,12 @@ 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}) + tb = ''.join(traceback.format_tb(sys.exc_info()[2])) + failures.append({'src': source, 'plugin': plugin_name, 'exc': e, 'tb': tb}) except Exception as e: - display.debug('%s failed to parse %s' % (plugin_name, source)) - failures.append({'src': source, 'plugin': plugin_name, 'exc': AnsibleError(e)}) + display.debug('%s failed while attempting to parse %s' % (plugin_name, source)) + tb = ''.join(traceback.format_tb(sys.exc_info()[2])) + failures.append({'src': source, 'plugin': plugin_name, 'exc': AnsibleError(e), 'tb': tb}) else: display.vvv("%s declined parsing %s as it did not pass it's verify_file() method" % (plugin_name, source)) else: @@ -289,8 +288,8 @@ class InventoryManager(object): # only if no plugin processed files should we show errors. for fail in failures: display.warning(u'\n* Failed to parse %s with %s plugin: %s' % (to_text(fail['src']), fail['plugin'], to_text(fail['exc']))) - if hasattr(fail['exc'], 'tb'): - display.vvv(to_text(fail['exc'].tb)) + if 'tb' in fail: + display.vvv(to_text(fail['tb'])) if C.INVENTORY_ANY_UNPARSED_IS_FAILED: raise AnsibleError(u'Completely failed to parse inventory source %s' % (source)) if not parsed: