def run(self, command, timeout=3600, ignore_status=False, stdout_tee=utils.TEE_TO_LOGS, stderr_tee=utils.TEE_TO_LOGS, connect_timeout=30, verbose=True): """ Run a command on the remote host. @see common_lib.hosts.host.run() @param connect_timeout: connection timeout (in seconds) @param options: string with additional ssh command options @param verbose: log the commands @raises AutoservRunError: if the command failed @raises AutoservSSHTimeout: ssh connection has timed out """ stdout = utils.get_stream_tee_file( stdout_tee, utils.DEFAULT_STDOUT_LEVEL) stderr = utils.get_stream_tee_file( stderr_tee, utils.get_stderr_level(ignore_status)) if verbose: logging.debug("Running (ssh-paramiko) '%s'" % command) # start up the command start_time = time.time() try: channel = self._open_channel(timeout) channel.exec_command(command) except (socket.error, paramiko.SSHException), e: # This has to match the string from paramiko *exactly*. if str(e) != 'Channel closed.': raise error.AutoservSSHTimeout("ssh failed: %s" % e)
def run(self, command, timeout=3600, ignore_status=False, stdout_tee=utils.TEE_TO_LOGS, stderr_tee=utils.TEE_TO_LOGS, connect_timeout=30, stdin=None, verbose=True, args=(), ignore_timeout=False): """ Run a command on the remote host. @see common_lib.hosts.host.run() @param connect_timeout: connection timeout (in seconds) @param options: string with additional ssh command options @param verbose: log the commands @param ignore_timeout: bool True command timeouts should be ignored. Will return None on command timeout. @raises AutoservRunError: if the command failed @raises AutoservSSHTimeout: ssh connection has timed out """ stdout = utils.get_stream_tee_file(stdout_tee, utils.DEFAULT_STDOUT_LEVEL, prefix=utils.STDOUT_PREFIX) stderr = utils.get_stream_tee_file( stderr_tee, utils.get_stderr_level(ignore_status), prefix=utils.STDERR_PREFIX) for arg in args: command += ' "%s"' % utils.sh_escape(arg) if verbose: logging.debug("Running (ssh-paramiko) '%s'", command) # start up the command start_time = time.time() try: channel = self._open_channel(timeout) channel.exec_command(command) except (socket.error, paramiko.SSHException, EOFError), e: # This has to match the string from paramiko *exactly*. if str(e) != 'Channel closed.': raise error.AutoservSSHTimeout("ssh failed: %s" % e)
def run(self, command, timeout=3600, ignore_status=False, stdout_tee=utils.TEE_TO_LOGS, stderr_tee=utils.TEE_TO_LOGS, connect_timeout=30, verbose=True): """ Run a command on the remote host. Args: command: the command line string timeout: time limit in seconds before attempting to kill the running process. The run() function will take a few seconds longer than 'timeout' to complete if it has to kill the process. ignore_status: do not raise an exception, no matter what the exit code of the command is. Returns: a utils.CmdResult object Raises: AutoservRunError: the exit code of the command execution was not 0 AutoservSSHTimeout: ssh connection has timed out """ stdout = utils.get_stream_tee_file( stdout_tee, utils.DEFAULT_STDOUT_LEVEL) stderr = utils.get_stream_tee_file( stderr_tee, utils.get_stderr_level(ignore_status)) if verbose: logging.debug("Running (ssh-paramiko) '%s'" % command) # start up the command start_time = time.time() try: channel = self._open_channel(timeout) channel.exec_command(command) except (socket.error, paramiko.SSHException), e: raise error.AutoservSSHTimeout("ssh failed: %s" % e)