[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