Sun Cluster 3.1 10/03 Entwicklerhandbuch Datendienste

Validate-Methode

RGM ruft die Validate-Methode auf, wenn eine Ressource erstellt wird und wenn die Eigenschaften einer Ressource bzw. deren Gruppe durch einen Verwaltungsbefehl aktualisiert werden. RGM ruft Validate auf, bevor die Erstellung bzw. Aktualisierung angewendet wird. Ein Fehlerbeendigungscode der Methode auf einem Knoten führt zum Abbruch der Erstellung bzw. Aktualisierung.

RGM ruft Validate nur dann auf, wenn Ressourcen- bzw. Gruppeneigenschaften über eine Verwaltungsaktion geändert werden, und nicht, wenn RGM Eigenschaften einstellt oder wenn ein Monitor die Ressourceneigenschaften Status und Status_msg einstellt.


Hinweis –

Die Monitor_check-Methode ruft auch ausdrücklich jedes Mal dann die Validate-Methode auf, wenn die PROBE-Methode versucht, ein Failover für den Datendienst auf einen neuen Knoten auszuführen.


Überblick über Validate

RGM ruft Validate mit zusätzlichen Argumenten zu denjenigen auf, die von anderen Methoden übergeben wurden, einschließlich der aktualisierten Eigenschaften und Werte. Daher muss diese Methode im Beispieldatendienst eine andere parse_args()-Funktion implementieren, um die zusätzlichen Argumente zu bearbeiten.

Die Validate-Methode im Beispieldatendienst überprüft eine einzige Eigenschaft, die Confdir-Erweiterungseigenschaft. Diese Eigenschaft zeigt auf das DNS-Konfigurationsverzeichnis, das für einen erfolgreichen DNS-Betrieb entscheidend ist.


Hinweis –

Da das Konfigurationsverzeichnis nicht geändert werden kann, während DNS läuft, wird die Confdir-Eigenschaft in der RTR-Datei als TUNABLE = AT_CREATION deklariert. Daher wird die Validate-Methode nie aufgerufen, um die Confdir-Eigenschaft nach einer Aktualisierung zu überprüfen, sondern nur bei Erstellung der Datendienstressource.


Wenn Confdir eine der Eigenschaften ist, die RGM an Validate übergibt, ruft die parse_args()-Funktion deren Wert ab und speichert ihn. Validate überprüft daraufhin, ob auf das Verzeichnis, auf das der neue Wert von Confdir zeigt, zugegriffen werden kann, und ob die named.conf-Datei in diesem Verzeichnis vorhanden ist und Daten enthält.

Wenn die parse_args()-Funktion den Wert von Confdir nicht aus den von RGM übergebenen Befehlszeilenargumenten abrufen kann, versucht Validate dennoch, die Confdir-Eigenschaft zu validieren. Validate verwendet scha_resource_get(), um den Wert von Confdir aus der statischen Konfiguration abzurufen. Dann führt die Funktion die gleichen Prüfungen aus, um zu überprüfen, ob auf das Konfigurationsverzeichnis zugegriffen werden kann und keine leere named.conf-Datei enthält.

Wenn Validate mit Fehlschlag beendet wird, schlägt die Aktualisierung bzw. Erstellung aller Eigenschaften fehl, nicht nur diejenige von Confdir.

Analysefunktion der Validate-Methode

RGM übergibt an die Validate-Methode einen anderen Satz Parameter als an die anderen Rückmeldemethoden. Daher benötigt Validate eine andere Funktion für die Argumentenanalyse als die anderen Methoden. Weitere Informationen zu den an Validate und die anderen Rückmeldemethoden übergebenen Parameter finden Sie in der Online-Dokumentation unter rt_callbacks(1HA). Im Folgenden wird die Validate parse_args()-Funktion gezeigt.


#########################################################################
# Validate-Argumente 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 bei Erstellen der Ressource
                  # aufgerufen 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,
                  # sollte Confdir in den Befehlszeilenargumenten stehen. Andernfalls
                  # muss die Methode ausdrücklich mit scha_resource_get danach
                  # suchen.
                  UPDATE_PROPERTY=1
                  ;;
         x)
                  # Erweiterungseigenschaftsliste. Eigenschafts- und Wertepaare mit
                  # "=" als Trennzeichen voneinander trennen.
                  PROPERTY=`echo $OPTARG | awk -F= '{print $1}'`
                  VAL=`echo $OPTARG | awk -F= '{print $2}'`
                  # Wenn die Confdir-Erweiterungseigenschaft an der Befehls-
                  # zeile gefunden wird, 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
}

Genau wie die parse_args()-Funktion für andere Methoden verfügt diese Funktion über ein Flag (R) zum Erfassen des Ressourcennamens, (G) zum Erfassen des Ressourcengruppennamens und (T) zum Erfassen des Ressourcentyps, die von RGM übergeben werden.

Das r-Flag (für systemdefinierte Eigenschaften), g-Flag (für Ressourcengruppeneigenschaften) und das c-Flag (das angibt, dass die Validierung bei Ressourcenerstellung stattfindet) werden ignoriert, da diese Methode aufgerufen wird, um eine Erweiterungseigenschaft bei Aktualisierung der Ressource zu validieren.

Das u-Flag stellt den Wert der UPDATE_PROPERTY-Shell-Variablen auf 1 (TRUE) ein. Das x-Flag erfasst die Namen und Eigenschaften der aktualisierten Eigenschaften. Wenn Confdir eine der aktualisierten Eigenschaften ist, wird ihr Wert in der CONFDIR-Shell-Variablen abgelegt, und die Variable CONFDIR_FOUND wird auf 1 (TRUE) eingestellt.

Validieren von Confdir

In der MAIN-Funktion stellt Validate zunächst die CONFDIR-Variable auf die leere Zeichenkette sowie UPDATE_PROPERTY und CONFDIR_FOUND auf 0 ein.


CONFDIR=""
UPDATE_PROPERTY=0
CONFDIR_FOUND=0

Anschließend ruft Validate die parse_args()-Funktion auf, um die von RGM übergebenen Argumente zu analysieren.


parse_args “$@”

Dann prüft Validate, ob Validate als Ergebnis der Aktualisierung von Eigenschaften aufgerufen wird und ob die Confdir-Erweiterungseigenschaft an der Befehlszeile stand. Dann überprüft Validate, ob die Confdir-Eigenschaft einen Wert hat. Andernfalls wird mit Fehlerstatus und einer Fehlermeldung beendet.


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 Fehlschlag,
# und mit Status 1 beenden
if [[ -z $CONFDIR ]]; then
         logger -p ${SYSLOG_FACILITY}.err \
            "${ARGV0} Validate-Methode für Ressource "$RESOURCE_NAME " fehlgeschlagen"
         exit 1
fi


Hinweis –

Der obige Code prüft vor allem, ob Validate als Ergebnis einer Aktualisierung aufgerufen wird ($UPDATE_PROPERTY == 1) und ob die Eigenschaft nicht an der Befehlszeile gefunden wurde (CONFDIR_FOUND == 0); in diesem Fall wird der vorhandene Wert von Confdir mithilfe von scha_resource_get() abgerufen. Wenn Confdir an der Befehlszeile gefunden wurde ( CONFDIR_FOUND == 1), stammt der Wert für CONFDIR von der parse_args()-Funktion, nicht von scha_resource_get().


Die Validate-Methode verwendet dann den Wert von CONFDIR, um zu überprüfen, ob auf das Verzeichnis zugegriffen werden kann. Wenn kein Zugriff möglich ist, protokolliert Validate eine Fehlermeldung und wird mit Fehlerstatus beendet.


# Prüfen, ob auf $CONFDIR zugegriffen werden kann.
if [ ! -d $CONFDIR ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} Verzeichnis $CONFDIR fehlt oder nicht eingehängt"
   exit 1
fi

Vor dem Validieren der Aktualisierung der Confdir-Eigenschaft führt Validate eine letzte Prüfung durch, um festzustellen, ob die named.conf-Datei vorhanden ist. Andernfalls protokolliert die Methode eine Fehlermeldung und wird mit Fehlerstatus beendet.


# Prü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

Wenn diese letzte Prüfung erfolgreich war, protokolliert Validate eine Erfolgsmeldung und wird mit Erfolgsstatus beendet.


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

exit 0

Validate-Beendigungsstatus

Wenn Validate mit Erfolg (0) endet, wird Confdir mit dem neuen Wert erstellt. Wenn Validate mit Fehlschlag (1) endet, werden weder Confdir noch irgendeine andere Eigenschaft erstellt, und eine Meldung mit Angabe der Gründe wird an den Cluster-Verwalter gesendet.