このメソッドは、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 [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
¥
"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
|