Fix bug introduced into paramiko_host by recent changes to selectively disable rsync support (SVN rev 4077). The new code makes SSH calls within _initialize(), but paramiko_host wasn't sufficiently initialized when the call was being made. In general, executing remote commands within _initialize() is dangerous. This change removes the new code from _initialize() and instead makes AbstractSSHHost compute the new information lazily.
Signed-off-by: Steve Howard <[email protected]> --- autotest/server/hosts/abstract_ssh.py 2010-01-11 15:32:34.000000000 -0800 +++ autotest/server/hosts/abstract_ssh.py 2010-01-11 16:37:28.000000000 -0800 @@ -35,20 +35,26 @@ self.user = user self.port = port self.password = password + self._use_rsync = None """ Master SSH connection background job, socket temp directory and socket control path option. If master-SSH is enabled, these fields will be initialized by start_master_ssh when a new SSH connection is initiated. """ self.master_ssh_job = None self.master_ssh_tempdir = None self.master_ssh_option = '' + + def use_rsync(self): + if self._use_rsync is not None: + return self._use_rsync + # Check if rsync is available on the remote host. If it's not, # don't try to use it for any future file transfers. - self.use_rsync = self._check_rsync() - if not self.use_rsync: + self._use_rsync = self._check_rsync() + if not self._use_rsync: logging.warn("rsync not available on remote host %s -- disabled", self.hostname) @@ -223,17 +229,17 @@ dest = os.path.abspath(dest) # If rsync is disabled or fails, try scp. - try_scp = not self.use_rsync - if self.use_rsync: + try_scp = True + if self.use_rsync(): try: remote_source = self._encode_remote_paths(source) local_dest = utils.sh_escape(dest) rsync = self._make_rsync_cmd([remote_source], local_dest, delete_dest, preserve_symlinks) utils.run(rsync) + try_scp = False except error.CmdError, e: logging.warn("trying scp, rsync failed: %s" % e) - try_scp = True if try_scp: # scp has no equivalent to --delete, just drop the entire dest dir @@ -295,16 +301,16 @@ remote_dest = self._encode_remote_paths([dest]) # If rsync is disabled or fails, try scp. - try_scp = not self.use_rsync - if self.use_rsync: + try_scp = True + if self.use_rsync(): try: local_sources = [utils.sh_escape(path) for path in source] rsync = self._make_rsync_cmd(local_sources, remote_dest, delete_dest, preserve_symlinks) utils.run(rsync) + try_scp = False except error.CmdError, e: logging.warn("trying scp, rsync failed: %s" % e) - try_scp = True if try_scp: # scp has no equivalent to --delete, just drop the entire dest dir _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
