Sun Cluster データサービス開発ガイド (Solaris OS 版)

Validate メソッドのコードリスト

このメソッドは、Confdir プロパティーが示すディレクトリの存在を確認します。RGM がこのメソッドを呼び出すのは、データサービスが作成されたときと、クラスタ管理者がデータサービスのプロパティーを更新したときです。障害モニターがデータサービスを新しいノードにフェイルオーバーしたときは、Monitor_check メソッドは常にこのメソッドを呼び出します。


例 B–9 dns_validate メソッド

#!/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