このメソッドは、Confdir プロパティが示すディレクトリの存在を確認します。RGM がこのメソッドを呼び出すのは、クラスタ管理者がデータサービスを作成したときと、データサービスのプロパティを更新したときです。障害モニターがデータサービスを新しいノードにフェイルオーバーしたときは、MONITOR_CHECK メソッドは常にこのメソッドを呼び出します。
#!/bin/ksh # # HA-DNS の Validate メソッド # # このメソッドは、リソースの Confdir プロパティを妥当性検査する。 # Validate メソッドが呼び出されるのは、リソースが作成されたときと、リソース # プロパティが更新されたときの 2 つである。リソースが作成されたとき、 # Validate メソッドは -c フラグで呼び出され、すべてのシステム定義プ # ロパティと拡張プロパティがコマンド行引数として渡される。リソースプロ # パティが更新されたとき、Validate メソッドは -u フラグで呼び出され、 # 更新されるプロパティのプロパティ/値のペアだけがコマンド行引数とし # て渡される。 # # 例: リソースが作成されたとき、コマンド行引数は次のようになる。 # # dns_validate -c -R <..> -G <...> -T <..> -r <sysdef-prop=value>... # -x <extension-prop=value>.... -g <resourcegroup-prop=value>.... # # 例: リソースプロパティが更新されたとき、コマンド行引数は次のようになる。 # # dns_validate -u -R <..> -G <...> -T <..> -r <sys-prop_being_updated=value> # または # dns_validate -u -R <..> -G <...> -T <..> -x <extn-prop_being_updated=value> # #pragma ident "@(#)dns_validate 1.1 00/05/24 SMI" ############################################################################### # プログラム引数を構文解析する。 # function parse_args # [args ...] { typeset opt while getopts `cur:x:g:R:T:G:' opt do case "$opt" in R) # DNS リソースの名前 RESOURCE_NAME=$OPTARG ;; G) # リソースが構成されているリソース # グループの名前 RESOURCEGROUP_NAME=$OPTARG ;; T) # リソースタイプの名前 RESOURCETYPE_NAME=$OPTARG ;; r) # メソッドはシステム定義プロパティにアクセスして # いない。したがって、このフラグは動作なし。 ;; g) # メソッドはリソースグループプロパティにアクセスして # いない。したがって、このフラグは動作なし。 ;; c) # Validate メソッドがリソースの作成中に呼び出されてい # ることを示す。したがって、このフラグは動作なし。 ;; u) # リソースがすでに存在しているときは、プロパティの更新 # を示す。Confdir プロパティを更新する場合、Confdir # がコマンド行引数に現れるはずである。現れない場合、 # メソッドは scha_resource_get を使用して Confdir # を探す必要がある。 UPDATE_PROPERTY=1 ;; x) # 拡張プロパティのリスト。プロパティと値のペア。区 # 切り文字は「=」 PROPERTY=`echo $OPTARG | awk -F= `{print $1}'` VAL=`echo $OPTARG | awk -F= `{print $2}'` # Confdir 拡張プロパティがコマンド行上に存在する場 # 合、その値を記録する。 if [ $PROPERTY == "Confdir" ]; then CONFDIR=$VAL CONFDIR_FOUND=1 fi ;; *) logger -p ${SYSLOG_FACILITY}.err ¥ -t [$SYSLOG_TAG] ¥ "ERROR: Option $OPTARG unknown" exit 1 ;; esac done } ############################################################################### # MAIN # ############################################################################## export PATH=/bin:/usr/bin:/usr/cluster/bin:/usr/sbin:/usr/proc/bin:$PATH # メッセージの記録に使用する syslog 機能番号を取得する。 SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY` # CONFDIR の値を NULL に設定する。この後、このメソッドは Confdir プロパ # ティの値を、コマンド行から取得するか、scha_resource_get を使 # 用して取得する。 CONFDIR="" UPDATE_PROPERTY=0 CONFDIR_FOUND=0 # このメソッドに渡された引数を構文解析する。 parse_args "$@" # プロパティの更新の結果として呼び出されている場合、Validate メソッ # ドはコマンド行から Confdir 拡張プロパティの値を取得する。そうでな # い場合、scha_resource_get を使用して Confdir の値を取得する。 if ( (( $UPDATE_PROPERTY == 1 )) && (( CONFDIR_FOUND == 0 )) ); then config_info=`scha_resource_get -O Extension -R $RESOURCE_NAME ¥ -G $RESOURCEGROUP_NAME Confdir` CONFDIR=`echo $config_info | awk `{print $2}'` fi # Confdir プロパティが値を持っているかどうかを確認する。持っていな # い場合、状態 1 (失敗) で終了する。 if [[ -z $CONFDIR ]]; then logger -p ${SYSLOG_FACILITY}.err ¥ "${ARGV0} Validate method for resource "$RESOURCE_NAME " failed" exit 1 fi # 実際の Confdir プロパティ値の妥当性検査はここから始まる。 # $CONFDIR がアクセス可能であるかどうかを検査する。 if [ ! -d $CONFDIR ]; then logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG]¥ "${ARGV0} Directory $CONFDIR missing or not mounted" exit 1 fi # named.conf ファイルが Confdir ディレクトリ内に存在するかどうかを # 検査する。 if [ ! -s $CONFDIR/named.conf ]; then logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] ¥ "${ARGV0} File $CONFDIR/named.conf is missing or empty" exit 1 fi # Validate メソッドが成功したことを示すメッセージを記録する。 logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] ¥ "${ARGV0} Validate method for resource "$RESOURCE_NAME ¥ " completed successfully" exit 0 |