1717handler .setFormatter (host_log_format )
1818host_logger .addHandler (handler )
1919host_logger .setLevel (logging .INFO )
20+ NUM_RETRIES = 3
2021
2122logger = logging .getLogger (__name__ )
2223
@@ -90,24 +91,29 @@ def __init__(self, host,
9091 self .host = resolved_address
9192 self ._connect ()
9293
93- def _connect (self ):
94+ def _connect (self , retries = 1 ):
9495 """Connect to host, throw UnknownHost exception on DNS errors"""
9596 try :
9697 self .client .connect (self .host , username = self .user ,
9798 password = self .password , port = self .port )
9899 except socket .gaierror , e :
99100 logger .error ("Could not resolve host '%s'" , self .host ,)
101+ while retries < NUM_RETRIES :
102+ gevent .sleep (5 )
103+ return self ._connect (retries = retries + 1 )
100104 raise UnknownHostException ("%s - %s" % (str (e .args [1 ]),
101105 self .host ,))
102106 except socket .error , e :
103107 logger .error ("Error connecting to host '%s:%s'" % (self .host ,
104108 self .port ,))
109+ while retries < NUM_RETRIES :
110+ gevent .sleep (5 )
111+ return self ._connect (retries = retries + 1 )
105112 raise ConnectionErrorException ("%s for host '%s:%s'" % (str (e .args [1 ]),
106113 self .host ,
107114 self .port ,))
108115 except paramiko .AuthenticationException , e :
109116 raise AuthenticationException (e )
110- gevent .sleep (0 )
111117
112118 def exec_command (self , command , sudo = False , ** kwargs ):
113119 """Wrapper to :mod:`paramiko.SSHClient.exec_command`
@@ -147,7 +153,6 @@ def _make_sftp(self):
147153 """Make SFTP client from open transport"""
148154 transport = self .client .get_transport ()
149155 channel = transport .open_session ()
150- gevent .sleep (0 )
151156 return paramiko .SFTPClient .from_transport (transport )
152157
153158 def mkdir (self , sftp , directory ):
@@ -164,7 +169,6 @@ def mkdir(self, sftp, directory):
164169 except IOError , error :
165170 logger .error ("Error occured creating directory on %s - %s" ,
166171 self .host , error )
167- gevent .sleep (0 )
168172
169173 def copy_file (self , local_file , remote_file ):
170174 """Copy local file to host via SFTP/SCP
@@ -195,7 +199,6 @@ def copy_file(self, local_file, remote_file):
195199 else :
196200 logger .info ("Copied local file %s to remote destination %s:%s" ,
197201 local_file , self .host , remote_file )
198- gevent .sleep (0 )
199202
200203class ParallelSSHClient (object ):
201204 """
0 commit comments