Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Validate-Methode

Diese Methode überprüft das Vorhandensein des Verzeichnisses, auf das die Confdir-Eigenschaft zeigt. RGM ruft diese Methode auf, wenn der Datendienst erstellt wird und wenn der Cluster-Verwalter Datendiensteigenschaften aktualisiert. Die Monitor_check-Methode ruft diese Methode immer dann auf, wenn der Fehler-Monitor ein Failover des Datendienstes auf einen neuen Knoten ausführt.


Beispiel B–9 dns_validate-Methode

#!/bin/ksh
#
# Validate-Methode für HA-DNS.
# Diese Methode validiert die Confdir-Eigenschaft der Ressource. Die Validate-
# Methode wird in zwei Szenarios aufgerufen: Beim Erstellen der Ressource und beim
# Aktualisieren einer Ressourceneigenschaft. Beim Erstellen der Ressource
# wird diese Methode mit dem -c-Flag aufgerufen, und alle systemdefinierten
# und Erweiterungseigenschaften werden als Befehlszeilenargumente übergeben.
# Beim Aktualisieren einer Ressourceneigenschaft wird die Validate-Methode mit
# dem -u-Flag aufgerufen, und nur das Eigenschafts-/Wertepaar der zu aktualisierenden
# Eigenschaft wird als Befehlszeilenargument übergeben.
#
# Bsp.: Wenn die Ressource erstellt wird, lauten die Befehlsargumente
#
# dns_validate -c -R <..> -G <...> -T <..> -r <sysdef-prop=value>...
#       -x <extension-prop=value>.... -g <resourcegroup-prop=value>....
#
# Wenn die Ressourceneigenschaft aktualisiert wird
#
# dns_validate -u -R <..> -G <...> -T <..> -r <sys-prop_being_updated=value>
#   ODER
# dns_validate -u -R <..> -G <...> -T <..> -x <extn-prop_being_updated=value>

#pragma ident   “@(#)dns_validate   1.1   00/05/24 SMI”

###############################################################################
#  Programmargumente analysieren.
#
function parse_args # [args ...]
{
   typeset opt

   while getopts `cur:x:g:R:T:G:' opt
   do
                case “$opt” in
                R)
                        # Name der DNS-Ressource.
                        RESOURCE_NAME=$OPTARG
                        ;;
                G)
                        # Name der Ressourcengruppe, in der die Ressource
                        # konfiguriert ist.
                        RESOURCEGROUP_NAME=$OPTARG
                        ;;
                T)
                        # Name des Ressourcentyps.
                        RESOURCETYPE_NAME=$OPTARG
                        ;;
                r)
                        #Die Methode greift auf keine systemdefinierten Eigenschaften
                        #zu, so dass diese Option nicht besteht.
                        ;;
                g)
                        # Die Methode greift auf keine Ressourcengruppeneigenschaften
                        # zu, so dass diese Option nicht besteht.
                        ;;
                c)
                        # Gibt an, dass die Validate-Methode aufgerufen wird, während
                        # die Ressource erstellt wird, so dass dieses Flag nicht als
                        # Option besteht.
                        ;;
                u)
                        # Gibt die Aktualisierung einer Eigenschaft an, wenn die
                        # Ressource bereits vorhanden ist. Wenn die Confdir-Eigenschaft
                        # aktualisiert wird, muss Confdir in den Befehlszeilenargumenten
                        # stehen. Andernfalls muss die Methode eigens unter Verwendung von
                        # scha_resource_get danach suchen.
                        UPDATE_PROPERTY=1
                        ;;
                x)
                        # Erweiterungseigenschaftsliste. Eigenschafts- und Wertepaare
                        # werden mit “=” als Trennzeichen voneinander getrennt.
                        PROPERTY=`echo $OPTARG | awk -F= `{print $1}'`
                        VAL=`echo $OPTARG | awk -F= `{print $2}'`

                        # Wenn die Confdir-Erweiterungseigenschaft in der Befehlszeile
                        # steht, deren Wert festhalten.
                        if [ $PROPERTY == “Confdir” ];
                        then
                        CONFDIR=$VAL
                        CONFDIR_FOUND=1
                        fi
                        ;;
                *)
                        logger -p ${SYSLOG_FACILITY}.err \
                        -t [$SYSLOG_TAG] \
                        “FEHLER: Option $OPTARG unbekannt”
                        exit 1
                        ;;
                esac
   done
}

###############################################################################
# MAIN
#
##############################################################################

export PATH=/bin:/usr/bin:/usr/cluster/bin:/usr/sbin:/usr/proc/bin:$PATH

# syslog-Funktion abrufen, mit der Meldungen protokolliert werden.
SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

# Den Wert von CONFDIR auf Null einstellen. Später ruft diese Methode
# den Wert der Confdir-Eigenschaft von der Befehlszeile aus oder mithilfe
# von scha_resource_get ab.
CONFDIR=””
UPDATE_PROPERTY=0
CONFDIR_FOUND=0

# Argumente analysieren, die für diese Methode übergeben wurden.
parse_args “$@”

# Wenn die Validate-Methode wegen Aktualisierung von Eigenschaften
# aufgerufen wird, versuchen, den Wert der Confdir-Erweiterungseigenschaft von der
# Befehlszeile aus abzurufen. Andernfalls den Wert von Confdir mithilfe von
# scha_resource_get abrufen.
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

# Überprüfen, ob die Confdir-Eigenschaft einen Wert hat. Andernfalls tritt ein
# Fehlschlag ein, und es wird mit Status 1 beendet.
if [[ -z $CONFDIR ]]; then
   logger -p ${SYSLOG_FACILITY}.err \
       “${ARGV0} Validate-Methode für Ressource “$RESOURCE_NAME “ fehlgeschlagen”
   exit 1
fi

# Jetzt den aktuellen Confdir-Eigenschaftswert validieren.

# Überprüfen, ob der Zugriff auf $CONFDIR möglich ist.
if [ ! -d $CONFDIR ]; then
        logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG]\
            “${ARGV0} Verzeichnis $CONFDIR fehlt oder nicht eingehängt”
        exit 1
fi

# Überprüfen, ob die named.conf-Datei im Confdir-Verzeichnis vorhanden ist.
if [ ! -s $CONFDIR/named.conf ]; then
        logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \
            “${ARGV0} Datei $CONFDIR/named.conf fehlt oder ist leer”
        exit 1
fi

# Meldung protokollieren, die angibt, dass die Validate-Methode erfolgreich war.
logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \
   “${ARGV0} Validate-Methode für Ressource “$RESOURCE_NAME \
   “ erfolgreich beendet”

exit 0