Guide des développeurs pour les services de données Sun Cluster 3.1 10/03

Méthode de Validation

Cette méthode vérifie l'existence du répertoire spécifié par la propriété Rép_conf. Le gestionnaire RGM appelle cette méthode lorsque l'administrateur du cluster crée le service de données et met à jour ses propriétés. La méthode de Contrôle_détecteur appelle cette méthode chaque fois que le système de détection des pannes bascule le service de données vers un nouveau noeud.


Exemple B–9 Méthode de validation_dns

#!/bin/ksh
#
# Méthode de Validation de HA-DNS.
# Cette méthode valide la propriété Rép_conf de la ressource. La méthode de Validation
# est appelée à la création et à la mise à jour
# de la ressource. À la création de la ressource,
# cette méthode est appelée avec l'indicateur -c. En outre, toutes les propriétés
# définies par le système et d'extension sont passées en tant qu'arguments de la ligne
# de commande. Lorsqu'une propriété de ressource est mise à jour, la méthode de
# Validation est appelée avec l'indicateur -u, et seule la paire propriété/valeur de la
# propriété mise à jour est passée en tant qu'argument de la ligne de commande.
#
# exemple : si la ressource est en cours de création, les arguments de la ligne de
# commande sont
# dns_validate -c -R <..> -G <...> -T <..>
# -r <sysdef-prop=value>...
#       -x <extension-prop=value>.... -g <resourcegroup-prop=value>....
#
# Si la propriété de ressource est en cours de mise à jour, les arguments sont
#
# dns_validate -u -R <..> -G <...> -T <..>
# -r <sys-prop_being_updated=value>
#   OU
# dns_validate -u -R <..> -G <...> -T <..>
# -x <extn-prop_being_updated=value>
#

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

###############################################################################

# Analysez les arguments du programme.
#
function parse_args # [args ...]
{
   typeset opt

   while getopts `cur:x:g:R:T:G:' opt
   do
                case “$opt” in
                R)
                        # Nom de la ressource DNS.
                        NOM_RESSOURCE=$OPTARG
                        ;;
                G)
                        # Nom du groupe de ressources dans lequel la ressource est
                        # configurée.
                        NOM_GROUPE_RESSOURCES=$OPTARG
                        ;;
                T)
                        # Nom du type de ressources.
                        NOM_TYPE_RESSOURCES=$OPTARG
                        ;;

                r)
                        # La méthode n'accède à aucune propriété définie par le système,
                        # il s'agit donc d'un no-op.
                        ;;

                g)
                        # La méthode n'accède à aucune propriété de groupe de ressources,
                        # il s'agit donc d'un no-op.
                        ;;

                c)
                        # Indique que la méthode de Validation est appelée tandis que
                        # la ressource est en cours de création. Cet indicateur est
                        # donc un no-op.
                        ;;

                u)
                        # Indique la mise à jour d'une propriété lorsque la ressource
                        # existe déjà. Si la mise à jour concerne la propriété Rép_conf,
                        # Rép_conf doit apparaître dans les arguments de la ligne de
                        # commande. Dans le cas contraire, la méthode doit rechercher
                        # spécifiquement cette propriété à l'aide de scha_resource_get.
                        UPDATE_PROPERTY=1
                        ;;

                x)
                        # Liste des propriétés d'extension. Séparez les paires
                        # propriété/valeur en utilisant le séparateur “=”.
                        PROPERTY=`echo $OPTARG | awk -F= `{print $1}'`
                        VAL=`echo $OPTARG | awk -F= `{print $2}'`

                        # Si la propriété d'extension Rép_conf figure sur la ligne de
                        # commande, notez sa valeur.
                        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

# Obtenez la fonction syslog à utiliser pour consigner les messages.
SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

# Définissez la valeur de RÉP_CONF comme étant Null. Ultérieurement, cette méthode
# recherche et extra it la valeur de la propriété Rép_conf de la ligne de commande
# ou à l'aide de scha_resource_get.
RÉP_CONF=””
PROPRIÉTÉ_ACTUALISATION=0
REP_CONF_TROUVÉ=0

# Analysez les arguments qui ont été transmis à cette méthode.
parse_args “$@”

# Si la méthode de Validation est appelée du fait de la mise à jour des propriétés,
# essayez de récupérer la valeur de la propriété d'extension Rép_conf à partir de la
# ligne de commande. Sinon, obtenez la valeur de Rép_conf avec scha_resource_get.
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

# Vérifiez que la propriété Rép_conf possède une valeur. Si elle n'en a pas, il en
# résulte un échec et une sortie avec l'état 1.
if [[ -z $CONFDIR ]]; then
   logger -p ${SYSLOG_FACILITY}.err \
       “${ARGV0} Validate method for resource “$RESOURCE_NAME “ failed”
   exit 1

fi

# Validez désormais la valeur réelle de la propriété Rép_conf.

# Vérifiez que $CONFDIR est accessible.
if [ ! -d $CONFDIR ]; then
        logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG]\
            “${ARGV0} Directory $CONFDIR missing or not mounted”

        exit 1
fi

# Vérifiez que le fichier named.conf figure dans le répertoire Rép_conf.

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

# Consignez un message indiquant que la méthode de Validation a réussi.
logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \
   “${ARGV0} Validate method for resource “$RESOURCE_NAME
\
   “ completed successfully”

exit 0