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)
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'))
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))
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)
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
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
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
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)
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))
def print_log(logf): cat = find_decompressor(logf) cmd = "%s %s" % (cat, logf) _. out = crmutils.get_stdout(cmd) return out