Beispiel #1
0
    def cmdshell(self, cmd, timeout=None, inpt=None, log_cmd=True):

        if timeout is None:
            timeout = conf['SHELL_COMMAND_TIMEOUT']

        output = []
        errors = []

        execline = ' '.join(cmd)

        if log_cmd:
            display_cmd(self.logger, execline)

        p = Popen(execline,
                  env=os.environ,
                  shell=True,
                  stderr=subprocess.PIPE,
                  stdout=subprocess.PIPE)

        try:
            if inpt:
                p.stdin = subprocess.PIPE
                out, err = p.communicate(input=bytes(inpt, 'utf-8'),
                                         timeout=timeout)
            else:
                out, err = p.communicate(timeout=timeout)

        except subprocess.TimeoutExpired:
            p.kill()
            out, err = p.communicate()

        if out:
            output = [
                l.strip() for l in out.decode('utf-8').split('\n') if len(l)
            ]

        if log_cmd:
            display_cmd_output(self.logger, output)

        if err:
            errors = [l.strip() for l in err.decode().split('\n')]
            self.logger.debug("Errors: %r", errors)

        self.logger.debug("CMD return code: %r", p.returncode)

        return p.returncode, output, errors
Beispiel #2
0
    def sshcmd(self,
               dst,
               cmd,
               inpt=None,
               timeout=None,
               log_cmd=True,
               term=False,
               display_errors=False,
               parse_output=True):  # noqa

        if timeout is None:
            timeout = conf['SSH_CONNECT_TIMEOUT']

        output = []
        errors = []

        ex = [
            'ssh', '-q', '-o UserKnownHostsFile=/dev/null',
            '-o StrictHostKeyChecking=no',
            '-o ConnectTimeout=%s' % timeout, dst
        ]

        if term:
            ex.insert(1, '-t')

        ex.extend(cmd)

        self.logger.debug("Execution list: %r", ex)
        if log_cmd:
            display_cmd(self.logger, ' '.join(ex))

        sp = Popen(ex, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        if inpt:
            sp.stdin = subprocess.PIPE
            out, err = sp.communicate(input=bytes(inpt, 'utf-8'))
        else:
            out, err = sp.communicate()

        if parse_output and out:
            output = [
                self.replace_double_colon(
                    self.remove_ansi_esc_chars(
                        self.remove_non_printable_chars(l.strip())))
                for l in out.decode('utf-8').split('\n') if len(l)
            ]

        if log_cmd and len(output):
            display_cmd_output(self.logger, output)

        if err:
            errors = [
                l.strip() for l in err.decode('utf-8').split('\n')
                if l.strip()
            ]
            if display_errors:
                display_cmd_output(self.logger, errors)
            else:
                self.logger.debug("Errors: %r", errors)

        self.logger.debug("SSH CMD return code: %r", sp.returncode)

        return sp.returncode, output, errors