You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by gi...@apache.org on 2014/02/04 11:17:46 UTC
git commit: updated refs/heads/marvin to 286afda
Updated Branches:
refs/heads/marvin bf72441d1 -> 286afda5d
CLOUDSTACK-5980: Fix test case failing with "Error reading SSH protocol banner" ssh error
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/286afda5
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/286afda5
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/286afda5
Branch: refs/heads/marvin
Commit: 286afda5d687b167691c17bf15aaf55738953383
Parents: bf72441
Author: Santhosh Edukulla <Sa...@citrix.com>
Authored: Tue Feb 4 15:45:45 2014 +0530
Committer: Girish Shilamkar <gi...@clogeny.com>
Committed: Tue Feb 4 15:45:45 2014 +0530
----------------------------------------------------------------------
tools/marvin/marvin/cloudstackConnection.py | 2 +-
tools/marvin/marvin/sshClient.py | 72 ++++++++++++------------
2 files changed, 38 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/286afda5/tools/marvin/marvin/cloudstackConnection.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/cloudstackConnection.py b/tools/marvin/marvin/cloudstackConnection.py
index 04e5afb..b8d9a38 100644
--- a/tools/marvin/marvin/cloudstackConnection.py
+++ b/tools/marvin/marvin/cloudstackConnection.py
@@ -214,7 +214,7 @@ class CSConnection(object):
payload["signature"] = self.__sign(payload)
#Verify whether protocol is "http", then call the request over http
- if self.protocol == "http":
+ if self.protocol == "http" or self.protocol == "https":
self.logger.debug("Payload: %s" % str(payload))
if method == 'POST':
self.logger.debug("=======Sending POST Cmd : %s======="
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/286afda5/tools/marvin/marvin/sshClient.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/sshClient.py b/tools/marvin/marvin/sshClient.py
index 09dc6f3..9b5bca2 100644
--- a/tools/marvin/marvin/sshClient.py
+++ b/tools/marvin/marvin/sshClient.py
@@ -32,7 +32,7 @@ from cloudstackException import (
import contextlib
import logging
from marvin.codes import (
- SUCCESS, FAIL, INVALID_INPUT, EXCEPTION_OCCURRED
+ SUCCESS, FAILED, INVALID_INPUT, EXCEPTION_OCCURRED
)
from contextlib import closing
@@ -42,7 +42,7 @@ class SshClient(object):
Added timeout flag for ssh connect calls.Default to 3.0 seconds
'''
def __init__(self, host, port, user, passwd, retries=20, delay=30,
- log_lvl=logging.INFO, keyPairFiles=None, timeout=10.0):
+ log_lvl=logging.DEBUG, keyPairFiles=None, timeout=10.0):
self.host = None
self.port = 22
self.user = user
@@ -70,7 +70,7 @@ class SshClient(object):
self.timeout = timeout
if port is not None and port >= 0:
self.port = port
- if self.createConnection() == FAIL:
+ if self.createConnection() == FAILED:
raise internalError("Connection Failed")
def execute(self, command):
@@ -96,16 +96,16 @@ class SshClient(object):
@Desc: Creates an ssh connection for
retries mentioned,along with sleep mentioned
@Output: SUCCESS on successful connection
- FAIL If connection through ssh failed
+ FAILED If connection through ssh failed
'''
- ret = FAIL
+ ret = FAILED
except_msg = ''
while self.retryCnt >= 0:
try:
- self.logger.debug("SSH Connection: Host:%s User:%s\
- Port:%s" %
- (self.host, self.user, str(self.port)
- ))
+ self.logger.debug("====Trying SSH Connection: Host:%s User:%s\
+ Port:%s RetryCnt:%s===" %
+ (self.host, self.user, str(self.port),
+ str(self.retryCnt)))
if self.keyPairFiles is None:
self.ssh.connect(hostname=self.host,
port=self.port,
@@ -113,14 +113,17 @@ class SshClient(object):
password=self.passwd,
timeout=self.timeout)
else:
+ self.ssh.load_host_keys(self.keyPairFiles)
self.ssh.connect(hostname=self.host,
port=self.port,
username=self.user,
password=self.passwd,
key_filename=self.keyPairFiles,
timeout=self.timeout,
- look_for_keys=False
+ look_for_keys=True
)
+ self.logger.debug("===SSH to Host %s port : %s SUCCESSFUL==="
+ % (str(self.host), str(self.port)))
ret = SUCCESS
break
except BadHostKeyException, e:
@@ -134,12 +137,13 @@ class SshClient(object):
except Exception, e:
except_msg = GetDetailExceptionInfo(e)
finally:
- self.logger.exception("SshClient: "
- "Exception under createConnection: %s"
- % except_msg)
- self.retryCnt = self.retryCnt - 1
- if self.retryCnt == 0:
+ if self.retryCnt == 0 or ret == SUCCESS:
break
+ if except_msg != '':
+ self.logger.\
+ exception("SshClient: Exception under "
+ "createConnection: %s" % except_msg)
+ self.retryCnt = self.retryCnt - 1
time.sleep(self.delay)
return ret
@@ -150,33 +154,26 @@ class SshClient(object):
returns the result along with status code
@Input: command to execute
@Output: 1: status of command executed.
- Default to None
SUCCESS : If command execution is successful
- FAIL : If command execution has failed
- EXCEPTION_OCCURRED: Exception occurred while executing
- command
- INVALID_INPUT : If invalid value for command is passed
+ FAILED : If command execution has failed
2: stdin,stdout,stderr values of command output
'''
- ret = {"status": FAIL, "stdin": None, "stdout": None, "stderr": ''}
+ ret = {"status": FAILED, "stdin": None, "stdout": None,
+ "stderr": INVALID_INPUT}
if command is None or command == '':
- ret["status"] = INVALID_INPUT
return ret
try:
status_check = 1
- stdin, stdout, stderr = self.ssh.exec_command(command)
- output = stdout.readlines()
- errors = stderr.readlines()
- inp = stdin.readlines()
- ret["stdin"] = inp
- ret["stdout"] = output
- ret["stderr"] = errors
+ stdin, stdout, stderr = self.ssh.\
+ exec_command(command, timeout=self.timeout)
if stdout is not None:
status_check = stdout.channel.recv_exit_status()
- if status_check == 0:
- ret["status"] = SUCCESS
+ if status_check == 0:
+ ret["status"] = SUCCESS
+ ret["stdout"] = stdout.readlines()
+ if stderr is not None:
+ ret["stderr"] = stderr.readlines()
except Exception as e:
- ret["status"] = EXCEPTION_OCCURRED
ret["stderr"] = GetDetailExceptionInfo(e)
self.logger.exception("SshClient: Exception under runCommand :%s" %
GetDetailExceptionInfo(e))
@@ -194,12 +191,17 @@ class SshClient(object):
except IOError, e:
raise e
+ def __del__(self):
+ self.close()
+
def close(self):
if self.ssh is not None:
self.ssh.close()
+ self.ssh = None
if __name__ == "__main__":
- with contextlib.closing(SshClient("10.223.75.10", 22, "root",
- "password")) as ssh:
- print ssh.execute("ls -l")
+ with contextlib.closing(SshClient("127.0.0.1", 22, "root",
+ "asdf!@34")) as ssh:
+ ret = ssh.runCommand("ls -l")
+ print ret