From a6365628181179e817f2a8d12c36115986d55238 Mon Sep 17 00:00:00 2001 From: Jordan Borean Date: Fri, 19 Oct 2018 16:56:16 +1000 Subject: [PATCH] psexec: better error on import failure (#47327) (cherry picked from commit 013c44484ac662fa1ab5a6f5e61630246ecb6118) --- changelogs/fragments/psexec-imp-error.yaml | 2 ++ lib/ansible/modules/commands/psexec.py | 21 ++++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 changelogs/fragments/psexec-imp-error.yaml diff --git a/changelogs/fragments/psexec-imp-error.yaml b/changelogs/fragments/psexec-imp-error.yaml new file mode 100644 index 00000000000..87ef33b2040 --- /dev/null +++ b/changelogs/fragments/psexec-imp-error.yaml @@ -0,0 +1,2 @@ +bugfixes: +- psexec - give proper error message when the psexec requirements are not installed diff --git a/lib/ansible/modules/commands/psexec.py b/lib/ansible/modules/commands/psexec.py index b03b44d584c..d59cd964fac 100644 --- a/lib/ansible/modules/commands/psexec.py +++ b/lib/ansible/modules/commands/psexec.py @@ -305,6 +305,9 @@ rc: sample: 0 ''' +import sys +import traceback + from ansible.module_utils.basic import AnsibleModule from ansible.module_utils._text import to_bytes, to_text @@ -317,8 +320,8 @@ try: from smbprotocol.exceptions import SMBException, SMBAuthenticationError, \ SMBResponseException HAS_PYPSEXEC = True -except ImportError as exc: - PYPSEXEC_IMP_ERR = exc +except ImportError: + PYPSEXEC_IMP_ERR = traceback.format_exc() HAS_PYPSEXEC = False KERBEROS_IMP_ERR = None @@ -327,8 +330,8 @@ try: # GSSAPI extension required for Kerberos Auth in SMB from gssapi.raw import inquire_sec_context_by_oid HAS_KERBEROS = True -except ImportError as exc: - KERBEROS_IMP_ERR = exc +except ImportError: + KERBEROS_IMP_ERR = traceback.format_exc() HAS_KERBEROS = False @@ -387,7 +390,9 @@ def main(): 'running as System: process_username, ' 'process_password') if not HAS_PYPSEXEC: - module.fail_json(msg='The pypsexec python module is required', + module.fail_json(msg="The pypsexec Python module is required to be " + "installed for the Python environment at '%s'" + % sys.executable, exception=PYPSEXEC_IMP_ERR) hostname = module.params['hostname'] @@ -421,8 +426,10 @@ def main(): if connection_username is None or connection_password is None and \ not HAS_KERBEROS: - module.fail_json(msg='The gssapi python module with the GGF extension ' - 'is required for Kerberos authentication', + module.fail_json(msg="The gssapi Python module with the GGF extension " + "used for kerberos auth is required to be " + "installed for the Python environment at '%s'" + % sys.executable, exception=KERBEROS_IMP_ERR) win_client = client.Client(server=hostname, username=connection_username,