<tt>A tool used for verify the ocfs2 configure file.Implemented using BASH</tt><br>
<tt>script.</tt><tt>for detail information,see this wiki page:</tt><br>
<tt><a href="http://oss.oracle.com/osswiki/OCFS2/DesignDocs/ClusterVerificationUtility">http://oss.oracle.com/osswiki/OCFS2/DesignDocs/ClusterVerificationUtility</a></tt><br>
<tt>Signed-off-by: <a href="http://xiaowei.hu">xiaowei.hu</a> <<a href="mailto:xiaowei.hu@oracle.com">xiaowei.hu@oracle.com</a>></tt><br>
<tt>---</tt><br>
<tt> ocfs2verify/verif.sh | 661</tt><br>
<tt>++++++++++++++++++++++++++++++++++++++++++++++++++</tt><br>
<tt> 1 files changed, 661 insertions(+), 0 deletions(-)</tt><br>
<tt> create mode 100755 ocfs2verify/verif.sh</tt><br>
<br>
<tt>diff --git a/ocfs2verify/verif.sh b/ocfs2verify/verif.sh</tt><br>
<tt>new file mode 100755</tt><br>
<tt>index 0000000..ce13527</tt><br>
<tt>--- /dev/null</tt><br>
<tt>+++ b/ocfs2verify/verif.sh</tt><br>
<tt>@@ -0,0 +1,661 @@</tt><br>
<tt>+#!/bin/bash</tt><br>
<tt>+VERSION=1.2.6-6.1</tt><br>
<tt>+</tt><br>
<tt>+CONFIG_FILE="/etc/ocfs2/cluster.conf"</tt><br>
<tt>+TEMP_DIR="./.cluster_verif"</tt><br>
<tt>+ERRLOG="$TEMP_DIR/error.log"</tt><br>
<tt>+</tt><br>
<tt>+DEBUG=0</tt><br>
<tt>+</tt><br>
<tt>+SSHSUC=0</tt><br>
<tt>+SSH_CMD_FAILED=1</tt><br>
<tt>+SSHSKIP=254</tt><br>
<tt>+SSHERR=255</tt><br>
<tt>+</tt><br>
<tt>+USER="root"</tt><br>
<tt>+TIMEOUT=5</tt><br>
<tt>+COMMAND="hostname;cat $CONFIG_FILE"</tt><br>
<tt>+</tt><br>
<tt>+NODE_ALIVE=1</tt><br>
<tt>+NODE_HOSTNAME=2</tt><br>
<tt>+NODE_SYNC=3 #need sync -1 no need-0</tt><br>
<tt>+</tt><br>
<tt>+NODE_INDEX=1</tt><br>
<tt>+CLUSTER_INDEX=2</tt><br>
<tt>+</tt><br>
<tt>+IP_PORT_INDEX=1</tt><br>
<tt>+IP_ADDRESS_INDEX=2</tt><br>
<tt>+NODE_NAME_INDEX=3</tt><br>
<tt>+NODE_NUMBER_INDEX=4</tt><br>
<tt>+NODE_CLUSTER_INDEX=5</tt><br>
<tt>+</tt><br>
<tt>+CLUSTER_NAME_INDEX=1</tt><br>
<tt>+NODE_COUNT_INDEX=2</tt><br>
<tt>+</tt><br>
<tt>+VALID=1</tt><br>
<tt>+UNKNOWN=1</tt><br>
<tt>+INVALID=0</tt><br>
<tt>+#properties' names array</tt><br>
<tt>+NODE_PRO=(0 ip_port ip_address name number cluster)</tt><br>
<tt>+CLUSTER_PRO=(0 name node_count)</tt><br>
<tt>+</tt><br>
<tt>+check_ident()</tt><br>
<tt>+{</tt><br>
<tt>+if (echo $1|egrep -i</tt><br>
<tt>"^[[:blank:]]+$2[[:blank:]]*=[[:blank:]]*[[:alnum:]_.@]*[[:blank:]]*">/dev/null)</tt><br>
<tt>+then</tt><br>
<tt>+ return $VALID</tt><br>
<tt>+else</tt><br>
<tt>+ return $INVALID</tt><br>
<tt>+fi</tt><br>
<tt>+}</tt><br>
<tt>+#get corresponding value from the line,parameter:$line </tt><br>
<tt>+get_value()</tt><br>
<tt>+{</tt><br>
<tt>+ local index</tt><br>
<tt>+ local substr</tt><br>
<tt>+ local len</tt><br>
<tt>+ local count</tt><br>
<tt>+ len=$(expr length $1)</tt><br>
<tt>+ #echo $len</tt><br>
<tt>+ index=$(( $(expr index $1 '=') + 1 ))</tt><br>
<tt>+ count=$(( len - index + 1 ))</tt><br>
<tt>+ substr=$(expr substr $1 $index $count)</tt><br>
<tt>+ substr=$(expr $substr : '[[:blank:]]*\(.*\)[[:blank:]]*')</tt><br>
<tt>+ echo $substr</tt><br>
<tt>+ return 0</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#parameter: $NODEX_INDEX/$CLUSTER_INDEX $node_num/$cluster_num</tt><br>
<tt>$IP_PORT_INDEX|$IP_ADDRESS_INDEX ...</tt><br>
<tt>+get_index()</tt><br>
<tt>+{</tt><br>
<tt>+if (( $1 == $NODE_INDEX ))</tt><br>
<tt>+then</tt><br>
<tt>+ local index</tt><br>
<tt>+ (( index = ($2 - 1) * 5 + $3 ))</tt><br>
<tt>+ #echo $index</tt><br>
<tt>+ return $index</tt><br>
<tt>+elif (( $1 == $CLUSTER_INDEX ))</tt><br>
<tt>+then</tt><br>
<tt>+ get_cluster_index $2 $3</tt><br>
<tt>+ return $?</tt><br>
<tt>+fi</tt><br>
<tt>+</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#parameter: $cluster_num $CLUSTER_NAME_INDEX/$NODE_COUNT_INDEX</tt><br>
<tt>+get_cluster_index()</tt><br>
<tt>+{</tt><br>
<tt>+ local index</tt><br>
<tt>+ (( index = ($1 - 1) * 2 + $2 ))</tt><br>
<tt>+ #echo $index</tt><br>
<tt>+ return $index</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#parameter: $node_num $NODE_ALVIE/$NODE_HOSTNAME/$NODE_SYNC</tt><br>
<tt>+get_ssh_index()</tt><br>
<tt>+{</tt><br>
<tt>+ local index</tt><br>
<tt>+ (( index = ($1 - 1) * 3 + $2 ))</tt><br>
<tt>+ #echo $index</tt><br>
<tt>+ return $index</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#parameter: $NODE_CLUSTER_INDEX/$NODE_NAME_INDEX.... $node_num</tt><br>
<tt>$cluster_count</tt><br>
<tt>+process_node()</tt><br>
<tt>+{</tt><br>
<tt>+ local value</tt><br>
<tt>+ local index</tt><br>
<tt>+ get_index $NODE_INDEX $2 $1 </tt><br>
<tt>+ index=$?</tt><br>
<tt>+ #echo $index</tt><br>
<tt>+ if (( $loop == 1 )) </tt><br>
<tt>+ then</tt><br>
<tt>+ value=`get_value $line`</tt><br>
<tt>+ #echo $value</tt><br>
<tt>+ nodes[$index]=$value</tt><br>
<tt>+ fi</tt><br>
<tt>+ #echo ${nodes[$index]}</tt><br>
<tt>+ #echo "$line node_num=$node_num"</tt><br>
<tt>+ #continue</tt><br>
<tt>+ if (( $loop == 2 )) </tt><br>
<tt>+ then</tt><br>
<tt>+ value=${nodes[$index]}</tt><br>
<tt>+ case $1 in</tt><br>
<tt>+ #probe wrong case for the values;</tt><br>
<tt>+ $IP_PORT_INDEX)</tt><br>
<tt>+ if ( check_port $value;(( $? == $INVALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line\e[0;31m......[Invalid ip_port value]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi;;</tt><br>
<tt>+ $IP_ADDRESS_INDEX)</tt><br>
<tt>+ if ( check_ip $value;(( $? == $INVALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line\e[0;31m......[Invalid ip_address value]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi;;</tt><br>
<tt>+ $NODE_NAME_INDEX)</tt><br>
<tt>+ if ( check_node_name $value $2;(( $? == $INVALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line\e[0;31m......[Invalid node name value]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi;;</tt><br>
<tt>+ $NODE_NUMBER_INDEX)</tt><br>
<tt>+ if ( check_number $value $2;(( $? == $INVALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line\e[0;31m......[Invalid node number value]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi;;</tt><br>
<tt>+ $NODE_CLUSTER_INDEX)</tt><br>
<tt>+ if ( check_cluster $value $2 $3;(( $? == $INVALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line\e[0;31m......[Invalid cluster name value]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi;;</tt><br>
<tt>+ *)</tt><br>
<tt>+ echo "BUG in process_node():please report this to the dev team.";;</tt><br>
<tt>+ esac</tt><br>
<tt>+ fi</tt><br>
<tt>+</tt><br>
<tt>+ return 0</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#parameter: $NODE_COUNT_INDEX/$CLUSTER_NAME_INDEX $cluster_num</tt><br>
<tt>+process_cluster()</tt><br>
<tt>+{</tt><br>
<tt>+ local value</tt><br>
<tt>+ get_index $CLUSTER_INDEX $2 $1</tt><br>
<tt>+ index=$?</tt><br>
<tt>+ #echo $index</tt><br>
<tt>+ value=`get_value $line`</tt><br>
<tt>+ #echo $value</tt><br>
<tt>+ if (( $loop == 1 )) </tt><br>
<tt>+ then</tt><br>
<tt>+ clusters[$index]=$value</tt><br>
<tt>+ fi</tt><br>
<tt>+ if (( $loop == 2 )) </tt><br>
<tt>+ then</tt><br>
<tt>+ value=${clusters[$index]}</tt><br>
<tt>+ case $1 in</tt><br>
<tt>+ $CLUSTER_NAME_INDEX)</tt><br>
<tt>+ if ( check_cluster_name $value;(( $? == $INVALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line\e[0;31m......[Invalid cluster name value]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi;;</tt><br>
<tt>+ $NODE_COUNT_INDEX)</tt><br>
<tt>+ if ( check_node_count $value $2;(( $? == $INVALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line\e[0;31m......[Invalid node_count value,should be</tt><br>
<tt>${cluster_st[$2]}]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi;;</tt><br>
<tt>+ *)</tt><br>
<tt>+ echo "BUG in process_cluster():please report this to the dev team.";;</tt><br>
<tt>+ esac</tt><br>
<tt>+ fi</tt><br>
<tt>+ #echo ${nodes[$index]}</tt><br>
<tt>+ #echo "$line node_num=$node_num"</tt><br>
<tt>+ #continue</tt><br>
<tt>+ return 0</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#parameter</tt><br>
<tt>+check_port()</tt><br>
<tt>+{</tt><br>
<tt>+#echo "---$1---"</tt><br>
<tt>+if ( [[ -z $1 ]] || (($1 < 1024)) || (($1 > 65535)) )</tt><br>
<tt>+then</tt><br>
<tt>+ return $INVALID </tt><br>
<tt>+else</tt><br>
<tt>+ return $VALID</tt><br>
<tt>+fi</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+check_ip()</tt><br>
<tt>+{</tt><br>
<tt>+local part1</tt><br>
<tt>+local part2</tt><br>
<tt>+local part3</tt><br>
<tt>+local part4</tt><br>
<tt>+#echo "---$1---"</tt><br>
<tt>+if (echo $1|egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}$">/dev/null)</tt><br>
<tt>+then</tt><br>
<tt>+ part1=`echo $1|awk 'BEGIN{FS="."}{print $1}'`</tt><br>
<tt>+ part2=`echo $1|awk 'BEGIN{FS="."}{print $2}'`</tt><br>
<tt>+ part3=`echo $1|awk 'BEGIN{FS="."}{print $3}'`</tt><br>
<tt>+ part4=`echo $1|awk 'BEGIN{FS="."}{print $4}'`</tt><br>
<tt>+ #echo "$part1-$part2-$part3-$part4"</tt><br>
<tt>+ if [[ $part1 < 255 ]] #&& $part2 < 255 && $part3 < 255 && $part4 <</tt><br>
<tt>255 ]]</tt><br>
<tt>+ then</tt><br>
<tt>+ return $VALID</tt><br>
<tt>+ fi</tt><br>
<tt>+fi</tt><br>
<tt>+ return $INVALID</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#parameter $value $node_num</tt><br>
<tt>+check_number()</tt><br>
<tt>+{</tt><br>
<tt>+local ret</tt><br>
<tt>+if ( [[ -n $1 ]] && (( $1 < 255 || $1 > 0 )) )</tt><br>
<tt>+then</tt><br>
<tt>+ for (( i=1;i < $2;i += 1 ))</tt><br>
<tt>+ do</tt><br>
<tt>+ get_index $NODE_INDEX $i $NODE_NUMBER_INDEX </tt><br>
<tt>+ ret=$?</tt><br>
<tt>+ if (( $1 == ${nodes[$ret]} )) </tt><br>
<tt>+ then</tt><br>
<tt>+ return $INVALID</tt><br>
<tt>+ fi </tt><br>
<tt>+ done</tt><br>
<tt>+ return $VALID</tt><br>
<tt>+fi</tt><br>
<tt>+ return $INVALID</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#para: $value $node_num</tt><br>
<tt>+check_node_name()</tt><br>
<tt>+{</tt><br>
<tt>+get_ssh_index $2 $NODE_HOSTNAME</tt><br>
<tt>+if [[ $1 = ${nodes_ssh[$?]} ]]</tt><br>
<tt>+then</tt><br>
<tt>+ return $VALID</tt><br>
<tt>+elif (echo $1|egrep ".+">/dev/null)</tt><br>
<tt>+then</tt><br>
<tt>+ return $UNKNOWN</tt><br>
<tt>+fi</tt><br>
<tt>+ return $INVALID</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#para $value $cluster_count</tt><br>
<tt>+check_cluster()</tt><br>
<tt>+{</tt><br>
<tt>+ for (( i=1;i <= $2;i += 1 ))</tt><br>
<tt>+ do</tt><br>
<tt>+ get_index $CLUSTER_INDEX $i $CLUSTER_NAME_INDEX </tt><br>
<tt>+ if [[ $1 = ${clusters[$?]} ]] </tt><br>
<tt>+ then</tt><br>
<tt>+ return $VALID</tt><br>
<tt>+ fi</tt><br>
<tt>+ done</tt><br>
<tt>+</tt><br>
<tt>+ return $INVALID</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+check_cluster_name()</tt><br>
<tt>+{</tt><br>
<tt>+if (echo $1|egrep ".+">/dev/null)</tt><br>
<tt>+# to be changed,check using ssh</tt><br>
<tt>+then</tt><br>
<tt>+ return $VALID</tt><br>
<tt>+fi</tt><br>
<tt>+ return $INVALID</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#para:$value $cluster_num</tt><br>
<tt>+check_node_count()</tt><br>
<tt>+{</tt><br>
<tt>+if (( $1 == ${cluster_st[$2]} ))</tt><br>
<tt>+then</tt><br>
<tt>+ return $VALID</tt><br>
<tt>+fi</tt><br>
<tt>+ return $INVALID</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+#para:$NODE_INDEX/$CLUSTER_INDEX $node_num/$cluster_num</tt><br>
<tt>+missing_warning()</tt><br>
<tt>+{</tt><br>
<tt>+local proindex</tt><br>
<tt>+local index</tt><br>
<tt>+if (( $1 == $NODE_INDEX ))</tt><br>
<tt>+then</tt><br>
<tt>+ for (( proindex=1; proindex <= $NODE_CLUSTER_INDEX; proindex++ )) </tt><br>
<tt>+ do</tt><br>
<tt>+ get_index $1 $2 $proindex </tt><br>
<tt>+ index=$?</tt><br>
<tt>+ if [[ -z ${nodes[$index]} ]]</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "\t\e[0;33mWarning:missing ${NODE_PRO[$proindex]} for this</tt><br>
<tt>node\e[0m"</tt><br>
<tt>+ fi</tt><br>
<tt>+ done</tt><br>
<tt>+elif (( $1 == $CLUSTER_INDEX ))</tt><br>
<tt>+then</tt><br>
<tt>+ for (( proindex=1; proindex <= $NODE_COUNT_INDEX; proindex++ )) </tt><br>
<tt>+ do</tt><br>
<tt>+ get_index $1 $2 $proindex </tt><br>
<tt>+ index=$?</tt><br>
<tt>+ if [[ -z ${clusters[$index]} ]]</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "\t\e[0;33mWarning:missing ${CLUSTER_PRO[$proindex]} for</tt><br>
<tt>this cluster\e[0m"</tt><br>
<tt>+ fi</tt><br>
<tt>+ done</tt><br>
<tt>+else</tt><br>
<tt>+ echo "BUG:invalid index in missing_warning()"</tt><br>
<tt>+fi</tt><br>
<tt>+</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+get_ssh()</tt><br>
<tt>+{</tt><br>
<tt>+if ( check_ip $1;(( $? == $VALID )) )</tt><br>
<tt>+then</tt><br>
<tt>+ #echo "connecting"</tt><br>
<tt>+ if [[ -f "$TEMP_DIR/$value" ]]</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line\e[0;31m......[Duplicated ip_address!]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ else</tt><br>
<tt>+ #echo "sshing.............."</tt><br>
<tt>+ #echo "$TEMP_DIR/$1"</tt><br>
<tt>+ #echo "$COMMAND"</tt><br>
<tt>+ ssh <a href="http://255.255.255.255">255.255.255.255</a>>/dev/null 2>&1</tt><br>
<tt>+ if (( $? == 1 ))</tt><br>
<tt>+ then</tt><br>
<tt>+ ssh -oConnectTimeout=$TIMEOUT "$USER@$1" $COMMAND 1> "$TEMP_DIR/$1"</tt><br>
<tt>2>>$ERRLOG</tt><br>
<tt>+ ret=$?</tt><br>
<tt>+ tail -2 $ERRLOG |grep 'unreachable'</tt><br>
<tt>+ if (( $? == 0 )) </tt><br>
<tt>+ then</tt><br>
<tt>+ return $SSHSKIP</tt><br>
<tt>+ else</tt><br>
<tt>+ return $ret</tt><br>
<tt>+ fi</tt><br>
<tt>+ else</tt><br>
<tt>+ ssh -oConnectTimeout=$TIMEOUT "$USER@$1" $COMMAND 1> "$TEMP_DIR/$1"</tt><br>
<tt>2>>$ERRLOG</tt><br>
<tt>+ return $?</tt><br>
<tt>+ fi</tt><br>
<tt>+ fi</tt><br>
<tt>+fi</tt><br>
<tt>+return $SSHSKIP</tt><br>
<tt>+}</tt><br>
<tt>+</tt><br>
<tt>+</tt><br>
<tt>+if [[ -r $CONFIG_FILE ]]</tt><br>
<tt>+then</tt><br>
<tt>+ if [[ -d "$TEMP_DIR" ]]</tt><br>
<tt>+ then</tt><br>
<tt>+ rm -f -r $TEMP_DIR</tt><br>
<tt>+ fi</tt><br>
<tt>+ mkdir -p $TEMP_DIR</tt><br>
<tt>+ IFS=;</tt><br>
<tt>+ #declare value</tt><br>
<tt>+ #declare index</tt><br>
<tt>+ declare -a cluster_st</tt><br>
<tt>+ declare -a clusters</tt><br>
<tt>+ declare -a nodes</tt><br>
<tt>+ declare -a nodes_ssh</tt><br>
<tt>+ cluster_count=$INVALID</tt><br>
<tt>+ node_count=$INVALID</tt><br>
<tt>+ </tt><br>
<tt>+ loop=1</tt><br>
<tt>+ # to determine how to display,we need know some information advance.</tt><br>
<tt>+ # so at least loop twice.</tt><br>
<tt>+ while (( $loop <= 2 ))</tt><br>
<tt>+ do</tt><br>
<tt>+</tt><br>
<tt>+ cluster_num=$INVALID</tt><br>
<tt>+ node_num=$INVALID</tt><br>
<tt>+ node_match=$INVALID</tt><br>
<tt>+ cluster_match=$INVALID</tt><br>
<tt>+ match=$INVALID</tt><br>
<tt>+ node_err=$INVALID</tt><br>
<tt>+ cluster_err=$INVALID</tt><br>
<tt>+ section=$INVALID</tt><br>
<tt>+</tt><br>
<tt>+ match=$INVALID</tt><br>
<tt>+ node_match=$INVALID</tt><br>
<tt>+ cluster_match=$INVALID</tt><br>
<tt>+ check_missing=$INVALID</tt><br>
<tt>+</tt><br>
<tt>+ while read line</tt><br>
<tt>+ do</tt><br>
<tt>+</tt><br>
<tt>+ if (echo $line|egrep "^[[:blank:]]*#+">/dev/null || \</tt><br>
<tt>+ echo $line|egrep "^[[:blank:]]*$">/dev/null)</tt><br>
<tt>+ then </tt><br>
<tt>+ #remove blank and comment lines</tt><br>
<tt>+ #echo "$line"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi</tt><br>
<tt>+ if (echo $line|egrep -i "^node:[[:blank:]]*">/dev/null)</tt><br>
<tt>+ then</tt><br>
<tt>+ (( node_num++ ))</tt><br>
<tt>+ (( node_err=$node_num ))</tt><br>
<tt>+ (( cluster_err=$cluster_num ))</tt><br>
<tt>+ node_match=$VALID</tt><br>
<tt>+ cluster_match=$INVALID</tt><br>
<tt>+ section=$NODE_INDEX</tt><br>
<tt>+ check_missing=$NODE_INDEX</tt><br>
<tt>+ #echo $node_err</tt><br>
<tt>+ if (( $loop == 2)) </tt><br>
<tt>+ then</tt><br>
<tt>+ get_ssh_index $node_num $NODE_ALIVE</tt><br>
<tt>+ if (( ${nodes_ssh[$?]} <= $SSH_CMD_FAILED ))</tt><br>
<tt>+ then</tt><br>
<tt>+ get_ssh_index $node_num $NODE_SYNC</tt><br>
<tt>+ if (( ${nodes_ssh[$?]} == $VALID ))</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line \e[0;32m[ALIVE] but \e[0;33m[Need</tt><br>
<tt>Synchronization]\e[0m"</tt><br>
<tt>+ else</tt><br>
<tt>+ echo -e "$line \e[0;32m[ALIVE] and \e[0;32m[No Need</tt><br>
<tt>Synchronization]\e[0m"</tt><br>
<tt>+ fi</tt><br>
<tt>+ else</tt><br>
<tt>+ echo -e "$line \e[0;33m[SKIPED.Unreachable through SSH]\e[0m"</tt><br>
<tt>+ fi</tt><br>
<tt>+ fi</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi</tt><br>
<tt>+ </tt><br>
<tt>+ if (echo $line|egrep -i "^cluster:[[:blank:]]*">/dev/null)</tt><br>
<tt>+ then</tt><br>
<tt>+ (( cluster_num++ ))</tt><br>
<tt>+ (( node_err=$node_num ))</tt><br>
<tt>+ (( cluster_err=$cluster_num ))</tt><br>
<tt>+ #echo $cluster_err</tt><br>
<tt>+ node_match=$INVALID</tt><br>
<tt>+ cluster_match=$VALID</tt><br>
<tt>+ section=$CLUSTER_INDEX</tt><br>
<tt>+ check_missing=$CLUSTER_INDEX</tt><br>
<tt>+ if (( $loop == 2)) </tt><br>
<tt>+ then</tt><br>
<tt>+ echo "$line"</tt><br>
<tt>+ fi</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi</tt><br>
<tt>+</tt><br>
<tt>+ if [[ $loop == 2 && $check_missing != $INVALID ]]</tt><br>
<tt>+ then</tt><br>
<tt>+ if (( $check_missing == $NODE_INDEX ))</tt><br>
<tt>+ then</tt><br>
<tt>+ missing_warning $NODE_INDEX $node_num</tt><br>
<tt>+ elif (( $check_missing == $CLUSTER_INDEX ))</tt><br>
<tt>+ then </tt><br>
<tt>+ missing_warning $CLUSTER_INDEX $cluster_num</tt><br>
<tt>+ fi</tt><br>
<tt>+ </tt><br>
<tt>+ check_missing=$INVALID</tt><br>
<tt>+ fi</tt><br>
<tt>+</tt><br>
<tt>+ if [[ $node_err == $node_num && $cluster_err == $cluster_num ]] </tt><br>
<tt>+ then</tt><br>
<tt>+</tt><br>
<tt>+ if ( check_ident $line "ip_port";(( $? == $VALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ match=$VALID</tt><br>
<tt>+ process_node $IP_PORT_INDEX $node_num</tt><br>
<tt>+ elif ( check_ident $line "ip_address";(( $? == $VALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ match=$VALID</tt><br>
<tt>+ process_node $IP_ADDRESS_INDEX $node_num</tt><br>
<tt>+ elif ( check_ident $line "number";(( $? == $VALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ match=$VALID</tt><br>
<tt>+ process_node $NODE_NUMBER_INDEX $node_num</tt><br>
<tt>+ elif ( check_ident $line "cluster";(( $? == $VALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ match=$VALID</tt><br>
<tt>+ process_node $NODE_CLUSTER_INDEX $node_num $cluster_count</tt><br>
<tt>+ elif ( check_ident $line "name";(( $? == $VALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ match=$VALID</tt><br>
<tt>+ if (( section == $NODE_INDEX ))</tt><br>
<tt>+ then</tt><br>
<tt>+ process_node $NODE_NAME_INDEX $node_num</tt><br>
<tt>+ elif (( section == $CLUSTER_INDEX ))</tt><br>
<tt>+ then</tt><br>
<tt>+ process_cluster $CLUSTER_NAME_INDEX $cluster_num</tt><br>
<tt>+ else</tt><br>
<tt>+ if (( $loop == 2 )) </tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "$line \e[31m[ERROR:The \"name\" property \</tt><br>
<tt>+ should in a valid node or cluster section!]\e[0m" </tt><br>
<tt>+ fi</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi</tt><br>
<tt>+ </tt><br>
<tt>+ elif ( check_ident $line "node_count";(( $? == $VALID )) )</tt><br>
<tt>+ then</tt><br>
<tt>+ match=$VALID</tt><br>
<tt>+ process_cluster $NODE_COUNT_INDEX $cluster_num</tt><br>
<tt>+ else</tt><br>
<tt>+ match=$INVALID</tt><br>
<tt>+ node_match=$INVALID</tt><br>
<tt>+ cluster_match=$INVALID</tt><br>
<tt>+ fi</tt><br>
<tt>+ fi</tt><br>
<tt>+</tt><br>
<tt>+ #if (echo $line|egrep "[[:blank:]]*[cluster</tt><br>
<tt>node]*:[[:blank:]]*">/dev/null)</tt><br>
<tt>+ #then</tt><br>
<tt>+ # (( section++ ))</tt><br>
<tt>+ # echo $section</tt><br>
<tt>+ #echo "$line" #node_num=$node_num</tt><br>
<tt>+ #fi</tt><br>
<tt>+ </tt><br>
<tt>+ #for all lines,determine how to display</tt><br>
<tt>+ if (( $loop == 2)) </tt><br>
<tt>+ then</tt><br>
<tt>+ </tt><br>
<tt>+ if (( node_match == $INVALID && cluster_match == $INVALID && match</tt><br>
<tt>== $INVALID ))</tt><br>
<tt>+ then</tt><br>
<tt>+ if (echo $line|egrep -i "[[:blank:]]*[cluster</tt><br>
<tt>node]*:[[:blank:]]*">/dev/null)</tt><br>
<tt>+ # unknown identifer and willing it to be a node: or cluster:</tt><br>
<tt>+ then</tt><br>
<tt>+ (( node_err++ )) </tt><br>
<tt>+ (( cluster_err++ )) </tt><br>
<tt>+ else</tt><br>
<tt>+ echo -e "$line......\e[0;31m[Unknown identifer]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi</tt><br>
<tt>+ fi</tt><br>
<tt>+ </tt><br>
<tt>+ if (( node_err > node_num||cluster_err > cluster_num ))</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "\e[0;31m$line......[Invalid section]\e[0m"</tt><br>
<tt>+ continue</tt><br>
<tt>+ fi</tt><br>
<tt>+ if (( $DEBUG == 1 )) </tt><br>
<tt>+ then</tt><br>
<tt>+ echo "$line node_num=$node_num cluster_num=$cluster_num"</tt><br>
<tt>+ else</tt><br>
<tt>+ echo "$line"</tt><br>
<tt>+ fi</tt><br>
<tt>+ fi</tt><br>
<tt>+</tt><br>
<tt>+ </tt><br>
<tt>+ done < $CONFIG_FILE</tt><br>
<tt>+</tt><br>
<tt>+ #get ssh in loop1</tt><br>
<tt>+ if (( $loop == 1 ))</tt><br>
<tt>+ then</tt><br>
<tt>+ node_count=$node_num</tt><br>
<tt>+ cluster_count=$cluster_num</tt><br>
<tt>+</tt><br>
<tt>+ for (( j=1;j <= $cluster_count;j += 1 ))</tt><br>
<tt>+ do</tt><br>
<tt>+ cluster_st[$j]=0</tt><br>
<tt>+ done</tt><br>
<tt>+</tt><br>
<tt>+ for ((i=1;i <= (( $node_num ));i += 1 ))</tt><br>
<tt>+ do</tt><br>
<tt>+ #echo ${nodes[$i]}</tt><br>
<tt>+ get_index $NODE_INDEX $i $IP_ADDRESS_INDEX </tt><br>
<tt>+ ip=${nodes[$?]}</tt><br>
<tt>+ if (( $DEBUG == $VALID ))</tt><br>
<tt>+ then</tt><br>
<tt>+ echo "Connecting node $ip."</tt><br>
<tt>+ fi</tt><br>
<tt>+ get_ssh $ip</tt><br>
<tt>+ ssh_ret=$?</tt><br>
<tt>+ #echo $ssh_ret</tt><br>
<tt>+ get_ssh_index $i $NODE_ALIVE</tt><br>
<tt>+ ssh_index=$?</tt><br>
<tt>+ nodes_ssh[$ssh_index]=$ssh_ret</tt><br>
<tt>+</tt><br>
<tt>+ if (( $ssh_ret == $SSHERR ))</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "\e[0;33mThe node whose ip address is $ip is</tt><br>
<tt>unreachable.[SKIPED]\e[0m"</tt><br>
<tt>+ elif (( $ssh_ret == $SSHSKIP ))</tt><br>
<tt>+ then</tt><br>
<tt>+ echo -e "\e[0;33mThe node whose ip address is $ip is</tt><br>
<tt>invalid.[SKIPED]\e[0m"</tt><br>
<tt>+ else </tt><br>
<tt>+ echo -e "\e[0;32mNode $ip connected.\e[0m"</tt><br>
<tt>+ get_ssh_index $i $NODE_HOSTNAME</tt><br>
<tt>+ ssh_index=$?</tt><br>
<tt>+ nodes_ssh[$ssh_index]=`head -1 "$TEMP_DIR/$ip"`</tt><br>
<tt>+ #echo ${nodes_ssh[$ssh_index]}</tt><br>
<tt>+ if (( $ssh_ret == $SSH_CMD_FAILED ))</tt><br>
<tt>+ then</tt><br>
<tt>+ echo "File $CONFIG_FILE doesn't exist on node $ip"</tt><br>
<tt>+ fi</tt><br>
<tt>+ sed '1d' "$TEMP_DIR/$ip" >| "$TEMP_DIR/$i" 2>|$ERRLOG</tt><br>
<tt>+ rm -f "$TEMP_DIR/$ip" 1>/dev/null 2>|$ERRLOG</tt><br>
<tt>+ get_ssh_index $i $NODE_SYNC</tt><br>
<tt>+ ssh_index=$?</tt><br>
<tt>+ diff -B --brief "$CONFIG_FILE" "$TEMP_DIR/$i" 1>/dev/null 2>|</tt><br>
<tt>$ERRLOG</tt><br>
<tt>+ nodes_ssh[$ssh_index]=$?</tt><br>
<tt>+ fi</tt><br>
<tt>+</tt><br>
<tt>+ get_index $NODE_INDEX $i $NODE_CLUSTER_INDEX </tt><br>
<tt>+ cluster=${nodes[$?]}</tt><br>
<tt>+ #echo "---$cluster---"</tt><br>
<tt>+</tt><br>
<tt>+ for (( j=1;j <= $cluster_count;j += 1 ))</tt><br>
<tt>+ do</tt><br>
<tt>+ get_index $CLUSTER_INDEX $j $CLUSTER_NAME_INDEX </tt><br>
<tt>+ if [[ $cluster = ${clusters[$?]} ]] </tt><br>
<tt>+ then</tt><br>
<tt>+ #echo ${cluster_st[$j]}</tt><br>
<tt>+ (( cluster_st[$j] += 1 ))</tt><br>
<tt>+ #echo ${cluster_st[$j]}</tt><br>
<tt>+ fi</tt><br>
<tt>+ done</tt><br>
<tt>+ done</tt><br>
<tt>+ fi</tt><br>
<tt>+</tt><br>
<tt>+ if (( $DEBUG == 1 ))</tt><br>
<tt>+ then</tt><br>
<tt>+ echo "------Array:nodes:------"</tt><br>
<tt>+ for ((i=1;i <= (( $node_count*5 ));i += 1 ))</tt><br>
<tt>+ do</tt><br>
<tt>+ echo ${nodes[$i]}</tt><br>
<tt>+ done</tt><br>
<tt>+ echo "------Array:clusters:------"</tt><br>
<tt>+ for ((i=1;i <= (( $cluster_count*2 ));i += 1 ))</tt><br>
<tt>+ do</tt><br>
<tt>+ echo ${clusters[$i]}</tt><br>
<tt>+ done</tt><br>
<tt>+ echo "------Array:nodes_ssh:------"</tt><br>
<tt>+ for ((i=1;i <= (( $node_count*3 ));i += 1 ))</tt><br>
<tt>+ do</tt><br>
<tt>+ echo ${nodes_ssh[$i]}</tt><br>
<tt>+ done</tt><br>
<tt>+ fi</tt><br>
<tt>+ (( loop = $loop + 1 ))</tt><br>
<tt>+ done</tt><br>
<tt>+</tt><br>
<tt>+ #rm -f -r $TEMP_DIR</tt><br>
<tt>+</tt><br>
<tt>+else</tt><br>
<tt>+ echo -e "\e[0;31mERROR:configure file:$CONFIG_FILE does not exist or</tt><br>
<tt>not readable now.\e[0m"</tt><br>
<tt>+fi</tt><br>
<tt>+exit 0</tt><br>
<tt>-- </tt><br>
<tt><a href="http://1.5.3.4">1.5.3.4</a></tt>