summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJordan Borean <jborean93@gmail.com>2018-09-25 09:21:22 +1000
committerGitHub <noreply@github.com>2018-09-25 09:21:22 +1000
commitd6251e5b2780932c5954db73beb9bcbd45ad16f0 (patch)
treeafd526f7c7dfa3d68c8cb021c9541b3e7f1f6d6c /lib
parent1e68881c40a7395c9e2f88bdbb1f9dabbd7524b1 (diff)
downloadansible-d6251e5b2780932c5954db73beb9bcbd45ad16f0.tar.gz
winrm: add further conditional to using pexect for kerb auth (#45952)
Diffstat (limited to 'lib')
-rw-r--r--lib/ansible/plugins/connection/winrm.py23
1 files changed, 18 insertions, 5 deletions
diff --git a/lib/ansible/plugins/connection/winrm.py b/lib/ansible/plugins/connection/winrm.py
index e6216e90e6..e316f8ecb5 100644
--- a/lib/ansible/plugins/connection/winrm.py
+++ b/lib/ansible/plugins/connection/winrm.py
@@ -97,7 +97,6 @@ DOCUMENTATION = """
"""
import base64
-import inspect
import os
import re
import traceback
@@ -117,11 +116,18 @@ from ansible.errors import AnsibleFileNotFound
from ansible.module_utils.parsing.convert_bool import boolean
from ansible.module_utils.six.moves.urllib.parse import urlunsplit
from ansible.module_utils._text import to_bytes, to_native, to_text
-from ansible.module_utils.six import binary_type
+from ansible.module_utils.six import binary_type, PY3
from ansible.plugins.connection import ConnectionBase
from ansible.utils.hashing import secure_hash
from ansible.utils.path import makedirs_safe
+# getargspec is deprecated in favour of getfullargspec in Python 3 but
+# getfullargspec is not available in Python 2
+if PY3:
+ from inspect import getfullargspec as getargspec
+else:
+ from inspect import getargspec
+
try:
import winrm
from winrm import Response
@@ -138,11 +144,18 @@ except ImportError as e:
HAS_XMLTODICT = False
XMLTODICT_IMPORT_ERR = e
+HAS_PEXPECT = False
try:
import pexpect
- HAS_PEXPECT = True
+ # echo was added in pexpect 3.3+ which is newer than the RHEL package
+ # we can only use pexpect for kerb auth if echo is a valid kwarg
+ # https://github.com/ansible/ansible/issues/43462
+ if hasattr(pexpect, 'spawn'):
+ argspec = getargspec(pexpect.spawn.__init__)
+ if 'echo' in argspec.args:
+ HAS_PEXPECT = True
except ImportError as e:
- HAS_PEXPECT = False
+ pass
# used to try and parse the hostname and detect if IPv6 is being used
try:
@@ -242,7 +255,7 @@ class Connection(ConnectionBase):
internal_kwarg_mask = set(['self', 'endpoint', 'transport', 'username', 'password', 'scheme', 'path', 'kinit_mode', 'kinit_cmd'])
self._winrm_kwargs = dict(username=self._winrm_user, password=self._winrm_pass)
- argspec = inspect.getargspec(Protocol.__init__)
+ argspec = getargspec(Protocol.__init__)
supported_winrm_args = set(argspec.args)
supported_winrm_args.update(internal_kwarg_mask)
passed_winrm_args = set([v.replace('ansible_winrm_', '') for v in self.get_option('_extras')])