Example #1
0
def CopyTechSupportFiles(naples_nodes, techsupport_files, log_dir):
    req = api.Trigger_CreateExecuteCommandsRequest()
    for node in naples_nodes:
        api.Trigger_AddNaplesCommand(req, node, "ls /data/techsupport/")
        for file in techsupport_files:
            cmd = "chmod 666 %s" % file
            api.Trigger_AddNaplesCommand(req, node, cmd)
    resp = api.Trigger(req)
    for cmd_resp in resp.commands:
        api.PrintCommandResults(cmd_resp)

    for node in naples_nodes:
        resp = api.CopyFromNaples(node, techsupport_files, log_dir)
        if resp == None or resp.api_response.api_status != types_pb2.API_STATUS_OK:
            api.Logger.info(
                "Failed to copy tech-support file(s) to logdir:%s" % (log_dir))
            return api.types.status.FAILURE
        for file in techsupport_files:
            cmd = "mv " + log_dir + "/" + os.path.basename(
                file) + " " + log_dir + "/" + os.path.basename(
                    file) + "-" + node
            #Rename file based on node
            api.Logger.info("executing cmd %s" % cmd)
            os.system(cmd)

    return api.types.status.SUCCESS
Example #2
0
def collect_techsupports(tc):
    result = True
    if tc.resp is None:
        api.Logger.error("Failed to trigger techsupport requests")
        return False

    tc.techsupportTarBalls = []
    for cmd in tc.resp.commands:
        node = cmd.node_name
        if cmd.exit_code != 0:
            api.PrintCommandResults(cmd)
            api.Logger.error(f"Failed to collect techsupport for {node}")
            result = False
        else:
            ts_file = get_techsupport_file(cmd.stdout)
            if api.GlobalOptions.dryrun:
                continue
            if ts_file is None:
                api.Logger.error(f"Failed to parse techsupport op for {node}")
                result = False
                continue
            if not naples_utils.ChangeFilesPermission([node], [ts_file]):
                api.Logger.error(f"Failed to fix perm for techsupport on {node}")
                result = False
                continue
            # copy out the generated techsupport tarball from naples
            api.Logger.debug(f"Copying out {ts_file} from {node} to {tc.dir}")
            cur_dir = api.GetCurrentDirectory()
            api.ChangeDirectory("/")
            api.CopyFromNaples(node, [ts_file], tc.dir, naples=None, via_oob=True)
            tc.techsupportTarBalls.append(tc.dir+ts_utils.GetTechsupportFilename(ts_file))
            api.ChangeDirectory(cur_dir)
    return result
Example #3
0
def trigger_techsupport_request(tc):
    result = ts_utils.DeleteTSDir(tc.nodes)
    if result != True:
        api.Logger.error(
            "Failed to clean techsupport in naples before request")
        return result

    # get testcase directory to copy out generated techsupports
    tc_dir = tc.GetLogsDir()
    tc.techsupportTarBalls = []
    for node in tc.nodes:
        # initiate techsupport collect request
        ts_obj = OperClient.GetTechSupportObject(node)
        ts_obj.SetSkipCores(tc.skipcores)
        ts_file = ts_obj.Collect()
        api.Logger.debug(
            f"Collecting techsupport from {node} skipcores {tc.skipcores}")
        if api.GlobalOptions.dryrun:
            continue
        if ts_file is None:
            api.Logger.error(f"Failed to collect techsupport for {node}")
            result = False
            continue
        api.Logger.debug(f"Copying out {ts_file} from {node} to {tc_dir}")
        # copy out the generated techsupport tarball from naples
        api.CopyFromNaples(node, [ts_file], tc_dir, naples=None, via_oob=True)
        tc.techsupportTarBalls.append(tc_dir +
                                      ts_utils.GetTechsupportFilename(ts_file))
    api.Logger.verbose(f"TS: collected techsupports {tc.techsupportTarBalls}")
    return result
Example #4
0
def GetUpgLog(nodes, log_dir):
    nodes = nodes if nodes else api.GetNaplesHostnames()
    file_name = f"{log_dir}/{__UPG_LOG_FNAME}"
    for node in nodes:
        api.CopyFromNaples(node, [__UPG_LOG_PATH], log_dir, via_oob=True)
        if os.path.exists(file_name):
            os.rename(file_name, __get_upg_log_fname_from_node(node, log_dir))
        else:
            api.Logger.error(
                f"Upgrade logs for {node} not found @ {file_name}")
            return api.types.status.FAILURE
    return api.types.status.SUCCESS
Example #5
0
def GetUpgLog(nodes, log_dir):
    nodes = nodes if nodes else api.GetNaplesWorkloads()
    file_name = f"{log_dir}/{__upg_log_fname}"
    for node in nodes:
        if __dhcp_oob_mnic0([node]) != api.types.status.SUCCESS:
            return api.types.status.FAILURE
        api.CopyFromNaples(node, [__upg_log_path], log_dir, via_oob=True)
        if os.path.exists(file_name):
            os.rename(file_name, __get_upg_log_fname_from_node(node, log_dir))
        else:
            api.Logger.error(
                f"Upgrade logs for {node} not found @ {file_name}")
            return api.types.status.FAILURE
    return api.types.status.SUCCESS
Example #6
0
def HitlessAddUpgTestAppToJson(node, naples_json_dir):
    file = 'upgrade_hitless.json'
    tmp_dir = f"/tmp/{node}/"

    # remove already existing one if there are any
    if os.path.exists(f"{tmp_dir}/{file}"):
        os.remove(f"{tmp_dir}/{file}")
    # copy hitless.json from naples
    api.CopyFromNaples(node, [f"{naples_json_dir}/{file}"],
                       f"{tmp_dir}",
                       via_oob=True)

    if api.GlobalOptions.dryrun:
        return api.types.status.SUCCESS

    if not os.path.exists(f"{tmp_dir}/{file}"):
        api.Logger.error(f"Upgrade json for {node} not found @ {file}")
        return api.types.status.FAILURE

    # delete from the host
    req = api.Trigger_CreateAllParallelCommandsRequest()
    api.Trigger_AddHostCommand(req, node, f"rm -f {file}")
    resp = api.Trigger(req)

    file = f"{tmp_dir}/{file}"
    cmd = "cp %s %s.org && " % (file, file)
    # add upgtestapp to the discovery and serial list
    cmd = cmd + '''awk ' BEGIN { found=0;line=0 }
                    /"upg_svc"/ { found=1;line=0 }
                    /.*/ { if (found == 1 && line == 1) print "    \\\"upgtestapp\\\"," }
                    /.*/ { print $0;line=line+1 } ' %s.org > %s && ''' % (file,
                                                                          file)
    cmd = cmd + '''sed -i 's/"svc_sequence" : "\([a-z:].*\)"/"svc_sequence" : "\\1:upgtestapp"/' "%s"''' % (
        file)
    rv = subprocess.call(cmd, shell=True)
    if rv != 0:
        api.Logger.error(f"Upgrade hitless json modify {cmd} failed")
        return api.types.status.FAILURE

    # copy the modified json back
    resp = api.CopyToNaples(node, [file],
                            "",
                            naples_dir=f"{naples_json_dir}",
                            via_oob=True)
    if resp.api_response.api_status != types_pb2.API_STATUS_OK:
        return api.types.status.FAILURE

    return api.types.status.SUCCESS