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:
Jordan Borean 2019-01-30 09:40:21 +10:00 committed by GitHub
parent ce8db479f0
commit 6d13acf1ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 6 deletions

View file

@ -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')

View file

@ -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),