Ignore AttributeError when trying to import p paramiko (#51243)
* Ignore AttributeError when trying to import p paramiko * preserve import error
This commit is contained in:
parent
ce8db479f0
commit
6d13acf1ff
2 changed files with 9 additions and 6 deletions
|
@ -206,8 +206,10 @@ try:
|
||||||
from ncclient.transport.errors import SSHUnknownHostError
|
from ncclient.transport.errors import SSHUnknownHostError
|
||||||
from ncclient.xml_ import to_ele, to_xml
|
from ncclient.xml_ import to_ele, to_xml
|
||||||
HAS_NCCLIENT = True
|
HAS_NCCLIENT = True
|
||||||
except ImportError:
|
NCCLIENT_IMP_ERR = None
|
||||||
|
except (ImportError, AttributeError) as err: # paramiko and gssapi are incompatible and raise AttributeError not ImportError
|
||||||
HAS_NCCLIENT = False
|
HAS_NCCLIENT = False
|
||||||
|
NCCLIENT_IMP_ERR = err
|
||||||
|
|
||||||
logging.getLogger('ncclient').setLevel(logging.INFO)
|
logging.getLogger('ncclient').setLevel(logging.INFO)
|
||||||
|
|
||||||
|
@ -270,8 +272,8 @@ class Connection(NetworkConnectionBase):
|
||||||
def _connect(self):
|
def _connect(self):
|
||||||
if not HAS_NCCLIENT:
|
if not HAS_NCCLIENT:
|
||||||
raise AnsibleError(
|
raise AnsibleError(
|
||||||
'ncclient is required to use the netconf connection type.\n'
|
'ncclient is required to use the netconf connection type: %s.\n'
|
||||||
'Please run pip install ncclient'
|
'Please run pip install ncclient' % to_native(NCCLIENT_IMP_ERR)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.queue_message('log', 'ssh connection done, starting ncclient')
|
self.queue_message('log', 'ssh connection done, starting ncclient')
|
||||||
|
|
|
@ -168,13 +168,14 @@ SETTINGS_REGEX = re.compile(r'(\w+)(?:\s*=\s*|\s+)(.+)')
|
||||||
|
|
||||||
# prevent paramiko warning noise -- see http://stackoverflow.com/questions/3920502/
|
# prevent paramiko warning noise -- see http://stackoverflow.com/questions/3920502/
|
||||||
HAVE_PARAMIKO = False
|
HAVE_PARAMIKO = False
|
||||||
|
PARAMIKO_IMP_ERR = None
|
||||||
with warnings.catch_warnings():
|
with warnings.catch_warnings():
|
||||||
warnings.simplefilter("ignore")
|
warnings.simplefilter("ignore")
|
||||||
try:
|
try:
|
||||||
import paramiko
|
import paramiko
|
||||||
HAVE_PARAMIKO = True
|
HAVE_PARAMIKO = True
|
||||||
except ImportError:
|
except (ImportError, AttributeError) as err: # paramiko and gssapi are incompatible and raise AttributeError not ImportError
|
||||||
pass
|
PARAMIKO_IMP_ERR = err
|
||||||
|
|
||||||
|
|
||||||
class MyAddPolicy(object):
|
class MyAddPolicy(object):
|
||||||
|
@ -305,7 +306,7 @@ class Connection(ConnectionBase):
|
||||||
''' activates the connection object '''
|
''' activates the connection object '''
|
||||||
|
|
||||||
if not HAVE_PARAMIKO:
|
if not HAVE_PARAMIKO:
|
||||||
raise AnsibleError("paramiko is not installed")
|
raise AnsibleError("paramiko is not installed: %s" % to_native(PARAMIKO_IMP_ERR))
|
||||||
|
|
||||||
port = self._play_context.port or 22
|
port = self._play_context.port or 22
|
||||||
display.vvv("ESTABLISH PARAMIKO SSH CONNECTION FOR USER: %s on PORT %s TO %s" % (self._play_context.remote_user, port, self._play_context.remote_addr),
|
display.vvv("ESTABLISH PARAMIKO SSH CONNECTION FOR USER: %s on PORT %s TO %s" % (self._play_context.remote_user, port, self._play_context.remote_addr),
|
||||||
|
|
Loading…
Reference in a new issue