mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
avoid winrm errors when not connecting to winrm (#25921)
This commit is contained in:
parent
04e93e22cb
commit
d79315e19e
1 changed files with 14 additions and 3 deletions
|
@ -51,13 +51,15 @@ try:
|
||||||
import winrm
|
import winrm
|
||||||
from winrm import Response
|
from winrm import Response
|
||||||
from winrm.protocol import Protocol
|
from winrm.protocol import Protocol
|
||||||
|
HAS_WINRM = True
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise AnsibleError("winrm or requests is not installed: %s" % str(e))
|
HAS_WINRM = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import xmltodict
|
import xmltodict
|
||||||
|
HAS_XMLTODICT = True
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise AnsibleError("xmltodict is not installed: %s" % str(e))
|
HAS_XMLTODICT = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from __main__ import display
|
from __main__ import display
|
||||||
|
@ -99,6 +101,9 @@ class Connection(ConnectionBase):
|
||||||
'''
|
'''
|
||||||
Override WinRM-specific options from host variables.
|
Override WinRM-specific options from host variables.
|
||||||
'''
|
'''
|
||||||
|
if not HAS_WINRM:
|
||||||
|
return
|
||||||
|
|
||||||
self._winrm_host = self._play_context.remote_addr
|
self._winrm_host = self._play_context.remote_addr
|
||||||
self._winrm_port = int(self._play_context.port or 5986)
|
self._winrm_port = int(self._play_context.port or 5986)
|
||||||
self._winrm_scheme = hostvars.get('ansible_winrm_scheme', 'http' if self._winrm_port == 5985 else 'https')
|
self._winrm_scheme = hostvars.get('ansible_winrm_scheme', 'http' if self._winrm_port == 5985 else 'https')
|
||||||
|
@ -134,7 +139,7 @@ class Connection(ConnectionBase):
|
||||||
raise AnsibleError('The installed version of WinRM does not support transport(s) %s' % list(unsupported_transports))
|
raise AnsibleError('The installed version of WinRM does not support transport(s) %s' % list(unsupported_transports))
|
||||||
|
|
||||||
# if kerberos is among our transports and there's a password specified, we're managing the tickets
|
# if kerberos is among our transports and there's a password specified, we're managing the tickets
|
||||||
kinit_mode = str(hostvars.get('ansible_winrm_kinit_mode', '')).strip()
|
kinit_mode = to_text(hostvars.get('ansible_winrm_kinit_mode', '')).strip()
|
||||||
if kinit_mode == "":
|
if kinit_mode == "":
|
||||||
# HACK: ideally, remove multi-transport stuff
|
# HACK: ideally, remove multi-transport stuff
|
||||||
self._kerb_managed = "kerberos" in self._winrm_transport and self._winrm_pass
|
self._kerb_managed = "kerberos" in self._winrm_transport and self._winrm_pass
|
||||||
|
@ -294,6 +299,12 @@ class Connection(ConnectionBase):
|
||||||
self.protocol.cleanup_command(self.shell_id, command_id)
|
self.protocol.cleanup_command(self.shell_id, command_id)
|
||||||
|
|
||||||
def _connect(self):
|
def _connect(self):
|
||||||
|
|
||||||
|
if not HAS_WINRM:
|
||||||
|
raise AnsibleError("winrm or requests is not installed: %s" % to_text(e))
|
||||||
|
elif not HAS_XMLTODICT:
|
||||||
|
raise AnsibleError("xmltodict is not installed: %s" % to_text(e))
|
||||||
|
|
||||||
super(Connection, self)._connect()
|
super(Connection, self)._connect()
|
||||||
if not self.protocol:
|
if not self.protocol:
|
||||||
self.protocol = self._winrm_connect()
|
self.protocol = self._winrm_connect()
|
||||||
|
|
Loading…
Reference in a new issue