diff options
author | Jing Lu <lvjing5@huawei.com> | 2017-05-04 12:59:04 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@opnfv.org> | 2017-05-04 12:59:04 +0000 |
commit | 20f5b0a8580c0e8c659424bab434a0e30f3c88c1 (patch) | |
tree | f683654bf3247b4d5c8903ed01eb6415105e9248 /yardstick/ssh.py | |
parent | 058f0a93fd37694b74c5f1414bdfa6b35114690a (diff) | |
parent | 150481286dcf3c3c1fedd8213070cff48e5ad61d (diff) |
Merge "standardize ssh auth" into stable/danube
Diffstat (limited to 'yardstick/ssh.py')
-rw-r--r-- | yardstick/ssh.py | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/yardstick/ssh.py b/yardstick/ssh.py index cfbc3ca96..cf9adf0dc 100644 --- a/yardstick/ssh.py +++ b/yardstick/ssh.py @@ -70,13 +70,15 @@ import time import re import logging + import paramiko +from chainmap import ChainMap from oslo_utils import encodeutils from scp import SCPClient import six -DEFAULT_PORT = 22 +SSH_PORT = paramiko.config.SSH_PORT class SSHError(Exception): @@ -90,7 +92,7 @@ class SSHTimeout(SSHError): class SSH(object): """Represent ssh connection.""" - def __init__(self, user, host, port=DEFAULT_PORT, pkey=None, + def __init__(self, user, host, port=SSH_PORT, pkey=None, key_filename=None, password=None, name=None): """Initialize SSH client. @@ -109,6 +111,9 @@ class SSH(object): self.user = user self.host = host + # everybody wants to debug this in the caller, do it here instead + self.log.debug("user:%s host:%s", user, host) + # we may get text port from YAML, convert to int self.port = int(port) self.pkey = self._get_pkey(pkey) if pkey else None @@ -123,6 +128,23 @@ class SSH(object): else: logging.getLogger("paramiko").setLevel(logging.WARN) + @classmethod + def from_node(cls, node, overrides=None, defaults=None): + if overrides is None: + overrides = {} + if defaults is None: + defaults = {} + params = ChainMap(overrides, node, defaults) + return cls( + user=params['user'], + host=params['ip'], + # paramiko doesn't like None default, requires SSH_PORT default + port=params.get('ssh_port', SSH_PORT), + pkey=params.get('pkey'), + key_filename=params.get('key_filename'), + password=params.get('password'), + name=params.get('name')) + def _get_pkey(self, key): if isinstance(key, six.string_types): key = six.moves.StringIO(key) |