Esempio n. 1
0
def start_slave_collector(node, arg_str):
    if node == constants.WE:
        cmd = r"hb_report __slave".format(os.getcwd())
        for item in arg_str.split():
            cmd += " {}".format(str(item))
        _, out = crmutils.get_stdout(cmd)
        cmd = r"(cd {} && tar xf -)".format(constants.WORKDIR)
        crmutils.get_stdout(cmd, input_s=out)

    else:
        cmd = r'ssh {} {} "{} hb_report __slave"'.\
              format(constants.SSH_OPTS, node, \
                     constants.SUDO, os.getcwd())
        for item in arg_str.split():
            cmd += " {}".format(str(item))
        code, out, err = crmutils.get_stdout_stderr(cmd)
        if code != 0:
            log_warning(err)
            for ip in get_peer_ip():
                log_info("Trying connect by %s" % ip)
                cmd = cmd.replace(node, ip, 1)
                code, out, err = crmutils.get_stdout_stderr(cmd)
                if code != 0:
                    log_warning(err)
                break

        cmd = r"(cd {} && tar xf -)".format(constants.WORKDIR)
        crmutils.get_stdout(cmd, input_s=out)
Esempio n. 2
0
def start_slave_collector(node, arg_str):
    if node == constants.WE:
        cmd = r"hb_report __slave".format(os.getcwd())
        for item in arg_str.split():
            cmd += " {}".format(str(item))
        _, out = crmutils.get_stdout(cmd)
    else:
        cmd = r'ssh {} {} "{} hb_report __slave"'.\
              format(constants.SSH_OPTS, node,
                     constants.SUDO, os.getcwd())
        for item in arg_str.split():
            cmd += " {}".format(str(item))
        code, out, err = crmutils.get_stdout_stderr(cmd)
        if code != 0:
            log_warning(err)
            for ip in get_peer_ip():
                log_info("Trying connect by %s" % ip)
                cmd = cmd.replace(node, ip, 1)
                code, out, err = crmutils.get_stdout_stderr(cmd)
                if code != 0:
                    log_warning(err)
                break

    cmd = r"(cd {} && tar xf -)".format(constants.WORKDIR)
    # typeof out here will always "str"
    # input_s of get_stdout will always need bytes
    # different situation depend on whether found pe file
    if out.startswith("b'"):
        crmutils.get_stdout(cmd, input_s=eval(out))
    else:
        crmutils.get_stdout(cmd, input_s=out.encode('utf-8'))
Esempio n. 3
0
def start_slave_collector(node, arg_str):
    if node == constants.WE:
        cmd = r"crm report __slave".format(os.getcwd())
        for item in arg_str.split():
            cmd += " {}".format(str(item))
        _, out = crmutils.get_stdout(cmd)
    else:
        cmd = r'ssh {} {} "crm report __slave"'.format(constants.SSH_OPTS, node, os.getcwd())
        for item in arg_str.split():
            cmd += " {}".format(str(item))
        code, out, err = crmutils.get_stdout_stderr(cmd)
        if code != 0:
            logger.warning(err)
            for ip in get_peer_ip():
                logger.info("Trying connect by %s", ip)
                cmd = cmd.replace(node, ip, 1)
                code, out, err = crmutils.get_stdout_stderr(cmd)
                if code != 0:
                    logger.warning(err)
                break

    compress_data = ""
    for data in out.split('\n'):
        if data.startswith(constants.COMPRESS_DATA_FLAG):
            # crm report data from collector
            compress_data = data.lstrip(constants.COMPRESS_DATA_FLAG)
        else:
            # log data from collector
            print(data)

    cmd = r"(cd {} && tar xf -)".format(constants.WORKDIR)
    crmutils.get_stdout(cmd, input_s=eval(compress_data))
Esempio n. 4
0
def collect_ocfs2_info():
    ocfs2_f = os.path.join(constants.WORKDIR, constants.OCFS2_F)
    with open(ocfs2_f, "w") as f:
        rc, out, err = crmutils.get_stdout_stderr("mounted.ocfs2 -d")
        if rc != 0:
            f.write("Failed to run \"mounted.ocfs2 -d\": {}".format(err))
            return
        # No ocfs2 device, just header line printed
        elif len(out.split('\n')) == 1:
            f.write("No ocfs2 partitions found")
            return

        f.write(utillib.dump_D_process())
        f.write(utillib.lsof_ocfs2_device())

        cmds = [
            "dmesg", "ps -efL",
            "lsblk -o 'NAME,KNAME,MAJ:MIN,FSTYPE,LABEL,RO,RM,MODEL,SIZE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,SCHED,MOUNTPOINT'",
            "mounted.ocfs2 -f", "findmnt", "mount",
            "cat /sys/fs/ocfs2/cluster_stack"
        ]
        for cmd in cmds:
            cmd_name = cmd.split()[0]
            if not utillib.which(cmd_name) or \
               cmd_name == "cat" and not os.path.exists(cmd.split()[1]):
                continue
            _, out = crmutils.get_stdout(cmd)
            f.write("\n\n#=====[ Command ] ==========================#\n")
            f.write("# %s\n" % (cmd))
            f.write(out)
Esempio n. 5
0
def print_log(logf):
    """
    print part of the log
    """
    cat = find_decompressor(logf)
    cmd = "%s %s" % (cat, logf)
    out = crmutils.get_stdout(cmd)
    return out
Esempio n. 6
0
def verify_rpm(packages):
    res = ""
    for pack in packages.split():
        cmd = r"rpm --verify %s|grep -v 'not installed'" % pack
        code, out = crmutils.get_stdout(cmd)
        if code != 0 and out:
            res = "For package %s:\n" % pack
            res += out + "\n"
    return res
Esempio n. 7
0
def online(context, nodelist):
    rc = True
    _, out = utils.get_stdout("crm_node -l")
    for node in nodelist.split():
        node_info = "{} member".format(node)
        if not node_info in out:
            rc = False
            context.logger.error("\nNode \"{}\" not online\n".format(node))
    return rc
Esempio n. 8
0
def collect_sbd_info():
    """
    save sbd configuration file
    """
    if os.path.exists(constants.SBDCONF):
        shutil.copy2(constants.SBDCONF, constants.WORKDIR)

    if not utillib.which("sbd"):
        return
    sbd_f = os.path.join(constants.WORKDIR, constants.SBD_F)
    cmd = ". {};export SBD_DEVICE;{};{}".format(constants.SBDCONF, "sbd dump",
                                                "sbd list")
    with open(sbd_f, "w") as f:
        _, out = crmutils.get_stdout(cmd)
        f.write("\n\n#=====[ Command ] ==========================#\n")
        f.write("# %s\n" % (cmd))
        f.write(out)
Esempio n. 9
0
def pe_to_dot(pe_file):
    dotf = '.'.join(pe_file.split('.')[:-1]) + '.dot'
    cmd = "%s -D %s -x %s" % (constants.PTEST, dotf, pe_file)
    code, _ = crmutils.get_stdout(cmd)
    if code != 0:
        log_warning("pe_to_dot: %s -> %s failed" % (pe_file, dotf))
Esempio n. 10
0
def print_log(logf):
    cat = find_decompressor(logf)
    cmd = "%s %s" % (cat, logf)
    _. out = crmutils.get_stdout(cmd)
    return out