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 + -
显示快捷键?