X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2Fssh.py;h=87fc02d3dd763d679b213f385f168a3ae6d824e2;hb=56dd61dee872da788e578129eed48a3158a5b566;hp=db39a0701c8599e62474afe4c0e75345b0f1e887;hpb=1ce01dad25e40fbf4144efc5dcc6771c9bf14d20;p=csit.git diff --git a/resources/libraries/python/ssh.py b/resources/libraries/python/ssh.py index db39a0701c..87fc02d3dd 100644 --- a/resources/libraries/python/ssh.py +++ b/resources/libraries/python/ssh.py @@ -157,10 +157,10 @@ class SSH(object): if time() - start > timeout: raise SSHTimeout( - 'Timeout exception.\n' - 'Current contents of stdout buffer: {0}\n' - 'Current contents of stderr buffer: {1}\n' - .format(stdout.getvalue(), stderr.getvalue()) + 'Timeout exception during execution of command: {0}\n' + 'Current contents of stdout buffer: {1}\n' + 'Current contents of stderr buffer: {2}\n' + .format(cmd, stdout.getvalue(), stderr.getvalue()) ) sleep(0.1) @@ -260,6 +260,7 @@ class SSH(object): logger.error('Channel exit status ready') break except socket.timeout: + logger.error('Socket timeout: {0}'.format(buf)) raise Exception('Socket timeout: {0}'.format(buf)) return chan @@ -293,7 +294,10 @@ class SSH(object): logger.error('Channel exit status ready') break except socket.timeout: - raise Exception('Socket timeout: {0}'.format(buf)) + logger.error('Socket timeout during execution of command: ' + '{0}\nBuffer content:\n{1}'.format(cmd, buf)) + raise Exception('Socket timeout during execution of command: ' + '{0}\nBuffer content:\n{1}'.format(cmd, buf)) tmp = buf.replace(cmd.replace('\n', ''), '') for item in prompt: tmp.replace(item, '') @@ -307,17 +311,37 @@ class SSH(object): """ chan.close() - def scp(self, local_path, remote_path): - """Copy files from local_path to remote_path. + def scp(self, local_path, remote_path, get=False, timeout=10): + """Copy files from local_path to remote_path or vice versa. connect() method has to be called first! + + :param local_path: Path to local file that should be uploaded; or + path where to save remote file. + :param remote_path: Remote path where to place uploaded file; or + path to remote file which should be downloaded. + :param get: scp operation to perform. Default is put. + :param timeout: Timeout value in seconds. + :type local_path: str + :type remote_path: str + :type get: bool + :type timeout: int """ - logger.trace('SCP {0} to {1}:{2}'.format( - local_path, self._ssh.get_transport().getpeername(), remote_path)) + if not get: + logger.trace('SCP {0} to {1}:{2}'.format( + local_path, self._ssh.get_transport().getpeername(), + remote_path)) + else: + logger.trace('SCP {0}:{1} to {2}'.format( + self._ssh.get_transport().getpeername(), remote_path, + local_path)) # SCPCLient takes a paramiko transport as its only argument - scp = SCPClient(self._ssh.get_transport(), socket_timeout=10) + scp = SCPClient(self._ssh.get_transport(), socket_timeout=timeout) start = time() - scp.put(local_path, remote_path) + if not get: + scp.put(local_path, remote_path) + else: + scp.get(remote_path, local_path) scp.close() end = time() logger.trace('SCP took {0} seconds'.format(end-start))