From 505a1de605941b3399593798474556f5598002bc Mon Sep 17 00:00:00 2001 From: Connor Osborn Date: Wed, 20 Jul 2016 03:32:23 -0700 Subject: [PATCH] Fix exceptions thrown from cryptography import (#16723) A simple import of cryptography can throw several types of errors. For example, if `setuptools` is less than cryptography's minimum requirement of 11.3, then this import of cryptography will throw a VersionConflict here. An earlier case threw a DistributionNotFound exception. An optional dependency should not stop ansible. If the error is more than an ImportError, log a warning, so that errors can be fixed in ansible or elsewhere. --- lib/ansible/parsing/vault/__init__.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/ansible/parsing/vault/__init__.py b/lib/ansible/parsing/vault/__init__.py index b2c87f0663e..ad010a71648 100644 --- a/lib/ansible/parsing/vault/__init__.py +++ b/lib/ansible/parsing/vault/__init__.py @@ -30,6 +30,12 @@ from hashlib import sha256 from binascii import hexlify from binascii import unhexlify +try: + from __main__ import display +except ImportError: + from ansible.utils.display import Display + display = Display() + # Note: Only used for loading obsolete VaultAES files. All files are written # using the newer VaultAES256 which does not require md5 from hashlib import md5 @@ -71,10 +77,9 @@ try: except ImportError: pass except Exception as e: - if e.__module__ == 'pkg_resources' and e.__class__.__name__ == 'DistributionNotFound': - pass - else: - raise + display.warning("Optional dependency 'cryptography' raised an exception, falling back to 'Crypto'") + import traceback + traceback.print_exc() from ansible.compat.six import PY3 from ansible.utils.unicode import to_unicode, to_bytes