lc_common

来自「lustre 1.6.5 source code」· 代码 · 共 592 行 · 第 1/2 页

TXT
592
字号
            echo "`basename $0`: nid2hostname() error:" \            "remote command to ${ip_addr} error: ${ret_str}"            return 1        fi        remote_error "nid2hostname" ${ip_addr} "${ret_str}" && return 1        if is_pdsh; then            host_name=`echo ${ret_str} | awk '{print $2}'`        else            host_name=`echo ${ret_str} | awk '{print $1}'`        fi        ;;    esac    echo ${host_name}    return 0}# nids2hostname nids# Get the hostname of the lustre cluster node which has the nids - $nidsnids2hostname() {    local nids=$1    local host_name=    local nid    local nettype    for nid in ${nids//,/ }; do        [ "${nid}" != "${nid#*@*}" ] && nettype=${nid#*@} || nettype=tcp        case "${nettype}" in        lo* | elan* | gm* | ptl*) ;;        *)  # tcp, o2ib, cib, openib, iib, vib, ra            host_name=$(nid2hostname ${nid})            if [ ${PIPESTATUS[0]} -ne 0 ]; then                echo "${host_name}"                return 1            fi            ;;        esac    done    if [ -z "${host_name}" ]; then        echo "`basename $0`: nids2hostname() error:" \        "Can not get the hostname from nids - \"${nids}\"!"        return 1    fi    echo ${host_name}    return 0}# ip2hostname_single_node nids# Convert IP addresses in $nids into hostnames# NID in $nids are delimited by commas, ie all the $nids belong to one nodeip2hostname_single_node() {    local orig_nids=$1    local nids=    local nid host_name    local nettype    for nid in ${orig_nids//,/ }; do        [ "${nid}" != "${nid#*@*}" ] && nettype=${nid#*@} || nettype=tcp        case "${nettype}" in        lo* | elan* | gm* | ptl*) ;;        *)  # tcp, o2ib, cib, openib, iib, vib, ra            host_name=$(nid2hostname ${nid})            if [ ${PIPESTATUS[0]} -ne 0 ]; then                echo "${host_name}"                return 1            fi			            nid=${host_name}@${nettype}            ;;        esac        [ -z "${nids}" ] && nids=${nid} || nids=${nids},${nid}    done    echo ${nids}    return 0}# ip2hostname_multi_node nids# Convert IP addresses in $nids into hostnames# NIDs belong to multiple nodes are delimited by colons in $nidsip2hostname_multi_node() {    local orig_nids=$1    local nids=    local nid    for nid in ${orig_nids//:/ }; do        nid=$(ip2hostname_single_node ${nid})        if [ ${PIPESTATUS[0]} -ne 0 ]; then            echo "${nid}"            return 1        fi        [ -z "${nids}" ] && nids=${nid} || nids=${nids}:${nid}    done    echo ${nids}    return 0}# comma_list space-delimited-list# Convert a space-delimited list to a sorted list of unique values# separated by commas.comma_list() {    # the sed converts spaces to commas, but leaves the last space    # alone, so the line doesn't end with a comma.    echo "$*" | tr -s " " "\n" | sort -b -u | tr "\n" " " | sed 's/ \([^$]\)/,\1/g'}# host_in_hostlist hostname hostlist# Given a hostname, and a list of hostnames, return true if the hostname# appears in the list of hostnames, or false otherwise.host_in_hostlist() {    local HOST=$1    local HOSTLIST=$2    [ -z "$HOST" -o -z "$HOSTLIST" ] && false && return    # Hostnames in the list are separated by commas.    [[ ,$HOSTLIST, == *,$HOST,* ]] && true && return    false && return}# exclude_items_from_list list_of_items list_of_items_to_exclude# Given a list of items, and a second list of items to exclude from# the first list, return the contents of the first list minus the contents# of the second.exclude_items_from_list() {    local INLIST=$1    local EXCLUDELIST=$2    local ITEM OUTLIST    # Handle an empty inlist by throwing back an empty string.    if [ -z "$INLIST" ]; then        echo ""        return 0    fi    # Handle an empty excludelist by throwing back the inlist unmodified.    if [ -z "$EXCLUDELIST" ]; then        echo $INLIST        return 0    fi    for ITEM in ${INLIST//,/ }; do        if ! host_in_hostlist $ITEM $EXCLUDELIST; then           OUTLIST="$OUTLIST,$ITEM"        fi    done                                    # strip leading comma    echo ${OUTLIST#,}}# get_csv_nodelist csv_file# Get the comma-separated list of all the nodes from the csv fileget_csv_nodelist() {    local csv_file=$1    local all_nodelist    # Check the csv file    ! check_file ${csv_file} 2>&1 && return 1    all_nodelist=$(egrep -v "([[:space:]]|^)#" ${csv_file} | cut -d, -f 1)    all_nodelist=$(comma_list ${all_nodelist})    echo ${all_nodelist}    return 0}# get_nodelist# Get the comma-separated list of nodes to be operated on# Note: CSV_FILE, USE_ALLNODES, SPECIFIED_NODELIST and EXCLUDED_NODELIST# are global variablesget_nodelist() {    local ALL_NODELIST    # Get the list of all the nodes in the csv file    ALL_NODELIST=$(get_csv_nodelist ${CSV_FILE})    [ ${PIPESTATUS[0]} -ne 0 ] && echo "${ALL_NODELIST}" && return 1    if [ -z "${ALL_NODELIST}" ]; then        echo "`basename $0`: get_nodelist() error:"\             "There are no hosts in the ${CSV_FILE} file!"        return 1    fi    if ${USE_ALLNODES}; then        echo ${ALL_NODELIST} && return 0    fi    if [ -n "${SPECIFIED_NODELIST}" ]; then        echo $(exclude_items_from_list ${SPECIFIED_NODELIST} ${EXCLUDED_NODELIST})        return 0    fi    if [ -n "${EXCLUDED_NODELIST}" ]; then        echo $(exclude_items_from_list ${ALL_NODELIST} ${EXCLUDED_NODELIST})        return 0    fi    # No hosts to be operated on    echo ""    return 0}# check_nodelist nodelist# Given a list of nodes to be operated on, check whether the nodelist is # empty or not and output prompt message.check_nodelist() {    local nodes_to_use=$1    if [ -z "${nodes_to_use}" ]; then        echo "`basename $0`: There are no hosts to be operated on."\             "Check the node selection options (-a, -w or -x)."        usage    else        verbose_output "Operating on the following nodes: ${nodes_to_use}"    fi    return 0}# nid_in_nidlist nid nidlist# Given a nid, and a list of nids in one node (delimited by comma ','),# return true if the nid appears in the list of nids, or false otherwise.nid_in_nidlist() {    local nid="$1"    local nidlist="$2"    local my_nid    [ -z "${nid}" -o -z "${nidlist}" ] && false && return    if [[ "${nid}" != *@* || "${nid#*@}" == tcp* ]]; then        # network type is tcp        for my_nid in ${nidlist//,/ }; do            [ "${nid%@*}" = "${my_nid%@*}" ] && true && return        done    else        # network type is not tcp        [[ ,${nidlist}, == *,${nid},* ]] && true && return    fi    false && return}# get_mgs_nids mgs_hostname mgs_nids# Get the corresponding NID(s) of the MGS node ${mgs_hostname} from the# "mgs nids" field of one lustre target in the csv fileget_mgs_nids() {    local mgs_node="$1"    local all_mgs_nids="$2"    local mgs_nids    local ret_str    # Check whether the hostname of the mgs node is in     # the mgs nids string    for mgs_nids in ${all_mgs_nids//:/ }; do        if nid_in_nidlist ${mgs_node} ${mgs_nids}; then            echo ${mgs_nids}            return 0        fi    done    # Let's use lctl to get the real nids from the mgs node    ret_str=$(${REMOTE} ${mgs_node} "${LCTL} list_nids" 2>&1 </dev/null)    if [ ${PIPESTATUS[0]} -ne 0 -a -n "${ret_str}" ]; then        echo "$(basename $0): get_mgs_nids() error:" \        "remote command to ${mgs_node} error: ${ret_str}"        return 1    fi    remote_error "get_mgs_nids" ${mgs_node} "${ret_str}" && return 1    local real_mgs_nids=${ret_str//${mgs_node}:/}    for real_mgs_nid in ${real_mgs_nids}; do        for mgs_nids in ${all_mgs_nids//:/ }; do            if nid_in_nidlist ${real_mgs_nid} ${mgs_nids}; then                echo ${mgs_nids}                return 0            fi        done    done    echo "$(basename $0): get_mgs_nids() error:" \    "Can not figure out which nids corresponding to the MGS"\    "node ${mgs_node} from \"${all_mgs_nids}\"!"    return 1}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?