[Erp5-report] r35123 rafael - in /erp5/trunk/utils/erp5.recipe.kvm: ./ src/erp5/recipe/kvm/
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon May 10 07:13:24 CEST 2010
Author: rafael
Date: Mon May 10 07:13:23 2010
New Revision: 35123
URL: http://svn.erp5.org?rev=35123&view=rev
Log:
Reimplement SSH to use paramiko.SSHClient.
This is more appropriate to get the output of commands into the remote image.
Modified:
erp5/trunk/utils/erp5.recipe.kvm/CHANGES.txt
erp5/trunk/utils/erp5.recipe.kvm/setup.py
erp5/trunk/utils/erp5.recipe.kvm/src/erp5/recipe/kvm/ssh.py
Modified: erp5/trunk/utils/erp5.recipe.kvm/CHANGES.txt
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.kvm/CHANGES.txt?rev=35123&r1=35122&r2=35123&view=diff
==============================================================================
--- erp5/trunk/utils/erp5.recipe.kvm/CHANGES.txt [utf8] (original)
+++ erp5/trunk/utils/erp5.recipe.kvm/CHANGES.txt [utf8] Mon May 10 07:13:23 2010
@@ -1,5 +1,11 @@
Changelog
=========
+
+1.0.1 (2010-05-10)
+-------------------
+
+- Reimplemented ssh.py to use SSHClient.
+ [Rafael Monnerat]
1.0 (2010-05-04)
----------------
Modified: erp5/trunk/utils/erp5.recipe.kvm/setup.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.kvm/setup.py?rev=35123&r1=35122&r2=35123&view=diff
==============================================================================
--- erp5/trunk/utils/erp5.recipe.kvm/setup.py [utf8] (original)
+++ erp5/trunk/utils/erp5.recipe.kvm/setup.py [utf8] Mon May 10 07:13:23 2010
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
name = "erp5.recipe.kvm"
-version = '1.0'
+version = '1.0.1'
def read(name):
return open(name).read()
Modified: erp5/trunk/utils/erp5.recipe.kvm/src/erp5/recipe/kvm/ssh.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.kvm/src/erp5/recipe/kvm/ssh.py?rev=35123&r1=35122&r2=35123&view=diff
==============================================================================
--- erp5/trunk/utils/erp5.recipe.kvm/src/erp5/recipe/kvm/ssh.py [utf8] (original)
+++ erp5/trunk/utils/erp5.recipe.kvm/src/erp5/recipe/kvm/ssh.py [utf8] Mon May 10 07:13:23 2010
@@ -2,8 +2,6 @@
import paramiko
from paramiko.ssh_exception import SSHException
import os
-
-CHANNEL_RECV = 8000
class connection(object):
"""Holds an SSH connection to a remote SSH server.
@@ -26,25 +24,28 @@
XXX It could be supported Password if key is not
defined.
"""
- self.transport = paramiko.Transport((self.host, int(self.port)))
+ self.transport = paramiko.SSHClient()
+ self.transport.load_system_host_keys()
+ self.transport.set_missing_host_key_policy(
+ paramiko.AutoAddPolicy())
try:
key = paramiko.RSAKey.from_private_key_file(self.key_path)
except SSHException, e:
key = paramiko.DSSKey.from_private_key_file(self.key_path)
try:
- self.transport.connect(username=self.username,
- pkey=key)
+ self.transport.connect(hostname=str(self.host),
+ port=int(self.port),
+ username=self.username,
+ timeout=180,
+ pkey=key, look_for_keys=False)
except SSHException, e:
self.transport.close()
raise SSHException(str(e))
- else:
- self.sftp = paramiko.SFTPClient.from_transport(self.transport)
def close(self):
"""Close the sftp and transport connection.
"""
- self.sftp.close()
self.transport.close()
def test(self):
@@ -64,7 +65,7 @@
"""
try:
self.connect()
- self.sftp.get(remote_path, local_path)
+ self.transport.open_sftp().get(remote_path, local_path)
finally:
self.close()
@@ -73,7 +74,7 @@
"""
try:
self.connect()
- self.sftp.put(local_path, remote_path)
+ self.transport.open_sftp().put(local_path, remote_path)
finally:
self.close()
@@ -83,13 +84,12 @@
response = ""
try:
self.connect()
- channel = self.transport.open_channel(kind='session')
- channel.exec_command(command + " 2>&1")
- if (channel.recv_ready):
- response += channel.recv(CHANNEL_RECV)
+ stdin, stdout, stderr = self.transport.exec_command(command + " 2>&1 ")
+ out = stdout.read()
+ err = stderr.read()
finally:
self.close()
- return response
+ return out, err
def put(username, host, port, key_path, remote_path, local_path):
""" Send file using paramiko
@@ -102,10 +102,14 @@
""" Connect into a remote instance and run a script
"""
handler = connection(username, host, port, key_path)
- output = handler.run(command)
+ output , error = handler.run(command)
if use_stdout:
print output
- return output
+ if len(error) > 0:
+ print "="*79
+ print error
+ print "="*79
+ return output, error
def get(username, host, port, key_path, remote_path, local_path):
""" Get file by ssh
More information about the Erp5-report
mailing list