From 930f9d1bcd990052429f2191880e2d4cbb4054fe Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Mon, 2 Aug 2021 21:04:25 +0200 Subject: [PATCH] Improve error message on import errors. (#188) --- changelogs/fragments/188-improve-import-errors.yml | 2 ++ plugins/module_utils/common.py | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 changelogs/fragments/188-improve-import-errors.yml diff --git a/changelogs/fragments/188-improve-import-errors.yml b/changelogs/fragments/188-improve-import-errors.yml new file mode 100644 index 00000000..6abb3544 --- /dev/null +++ b/changelogs/fragments/188-improve-import-errors.yml @@ -0,0 +1,2 @@ +minor_changes: +- "docker_* modules - include ``ImportError`` traceback when reporting that Docker SDK for Python could not be found (https://github.com/ansible-collections/community.docker/pull/188)." diff --git a/plugins/module_utils/common.py b/plugins/module_utils/common.py index 99fb59c5..c9ab0a8e 100644 --- a/plugins/module_utils/common.py +++ b/plugins/module_utils/common.py @@ -10,6 +10,7 @@ import os import platform import re import sys +import traceback from datetime import timedelta from distutils.version import LooseVersion @@ -25,6 +26,7 @@ HAS_DOCKER_PY = True HAS_DOCKER_PY_2 = False HAS_DOCKER_PY_3 = False HAS_DOCKER_ERROR = None +HAS_DOCKER_TRACEBACK = None try: from requests.exceptions import SSLError @@ -44,10 +46,11 @@ try: except ImportError as exc: HAS_DOCKER_ERROR = str(exc) + HAS_DOCKER_TRACEBACK = traceback.format_exc() HAS_DOCKER_PY = False -# The next 2 imports ``docker.models`` and ``docker.ssladapter`` are used +# The next two imports ``docker.models`` and ``docker.ssladapter`` are used # to ensure the user does not have both ``docker`` and ``docker-py`` modules # installed, as they utilize the same namespace are are incompatible try: @@ -288,7 +291,7 @@ class AnsibleDockerClientBase(Client): "docker before 5.0.0 (Python 2.7) or docker-py (Python 2.6)") msg = msg + ", for example via `pip install docker` (Python >= 3.6) or `pip install docker==4.4.4` (Python 2.7) " \ + "or `pip install docker-py` (Python 2.6). The error was: %s" - self.fail(msg % HAS_DOCKER_ERROR) + self.fail(msg % HAS_DOCKER_ERROR, exception=HAS_DOCKER_TRACEBACK) if self.docker_py_version < LooseVersion(min_docker_version): msg = "Error: Docker SDK for Python version is %s (%s's Python %s). Minimum version required is %s."