From b06c61c49b8645e807a4d982f4562e39f296c840 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 1e85813df68..9b16be0a7a3 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