def run(self, cmd, sudo=False, ignore_error=False, success_status=(0,),
            error_callback=None, custom_log=None, retry=0):
        """Run a command on the remote host.

        The command is run on the remote host, if there is a redirected host
        then the command will be run on that redirected host. See __init__.

        :param cmd: the command to run
        :type cmd: str
        :param sudo: True if the command should be run with sudo, this parameter
        disable the use of environment files.
        :type sudo: str
        :param success_status: the list of the possible success status
        :type success_status: list
        :param error_callback: if provided, the callback to call in case of
        a failure. it will be called with two args, the output of the command
        and the returned error code.
        :return: the tuple (output of the command, returned code)
        :rtype: tuple
        :param custom_log: a optional string to record in the log instead of the command.
        This is useful for example if you want to hide a password.
        :type custom_log: str
        """
        self._check_started()
        cmd_output = io.StringIO()
        channel = self._get_channel()
        cmd = self._prepare_cmd(cmd, sudo=sudo)

        if not custom_log:
            custom_log = cmd
        LOG.info("%s run '%s'" % (self.description, custom_log))
        channel.exec_command(cmd)

        while True:
            received = None
            rl, _, _ = select.select([channel], [], [], 30)
            if rl:
                received = channel.recv(1024).decode('UTF-8', 'ignore').strip()
                if received:
                    LOG.debug(received)
                    cmd_output.write(received)
            if channel.exit_status_ready() and not received:
                break
        cmd_output = cmd_output.getvalue()
        exit_status = channel.exit_status
        try:
            return self._evaluate_run_result(
                exit_status, cmd_output, ignore_error=ignore_error,
                success_status=success_status, error_callback=error_callback,
                custom_log=custom_log)
        except (paramiko.ssh_exception.SSHException, socket.error) as e:
            if not retry:
                raise e
            else:
                return self.run(
                    cmd, sudo=sudo, ignore_error=ignore_error,
                    success_status=success_status,
                    error_callback=error_callback, custom_log=custom_log,
                    retry=(retry - 1))
def run ( self , cmd , sudo = False , ignore_error = False , success_status = ( 0 , ) , error_callback = None , custom_log = None , retry = 0 ) : self . _check_started ( ) cmd_output = io . StringIO ( ) channel = self . _get_channel ( ) cmd = self . _prepare_cmd ( cmd , sudo = sudo ) if not custom_log : custom_log = cmd LOG . info ( "%s run '%s'" % ( self . description , custom_log ) ) channel . exec_command ( cmd ) while True : received = None rl , _ , _ = select . select ( [ channel ] , [ ] , [ ] , 30 ) if rl : received = channel . recv ( 1024 ) . decode ( 'UTF-8' , 'ignore' ) . strip ( ) if received : LOG . debug ( received ) cmd_output . write ( received ) if channel . exit_status_ready ( ) and not received : break cmd_output = cmd_output . getvalue ( ) exit_status = channel . exit_status try : return self . _evaluate_run_result ( exit_status , cmd_output , ignore_error = ignore_error , success_status = success_status , error_callback = error_callback , custom_log = custom_log ) except ( paramiko . ssh_exception . SSHException , socket . error ) as e : if not retry : raise e else : return self . run ( cmd , sudo = sudo , ignore_error = ignore_error , success_status = success_status , error_callback = error_callback , custom_log = custom_log , retry = ( retry - 1 ) )
Run a command on the remote host.

        The command is run on the remote host, if there is a redirected host
        then the command will be run on that redirected host. See __init__.

        :param cmd: the command to run
        :type cmd: str
        :param sudo: True if the command should be run with sudo, this parameter
        disable the use of environment files.
        :type sudo: str
        :param success_status: the list of the possible success status
        :type success_status: list
        :param error_callback: if provided, the callback to call in case of
        a failure. it will be called with two args, the output of the command
        and the returned error code.
        :return: the tuple (output of the command, returned code)
        :rtype: tuple
        :param custom_log: a optional string to record in the log instead of the command.
        This is useful for example if you want to hide a password.
        :type custom_log: str