Guide des développeurs pour les services de données Sun Cluster pour SE Solaris

Méthode Validate

Cette méthode vérifie l'existence du répertoire spécifié par la propriété Confdir. Le 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 Monitor_check appelle cette méthode chaque fois que le système de détection des pannes bascule le service de données vers un nouveau nœud.


Exemple B–9 Méthode dns_validate

#!/bin/ksh
# Méthode Validate de HA-DNS.
# Cette méthode valide la propriété Confdir de la ressource. La méthode Validate 
# est appelée à la création et à la mise à jour de la ressource.
# A 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 Validate 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.
                        RESOURCE_NAME=$OPTARG
                        ;;
                G)
                        # Nom du groupe de ressources dans lequel la ressource 
                        # est configurée.
                        RESOURCEGROUP_NAME=$OPTARG
                        ;;
                T)
                        # Nom du type de ressources.
                        RESOURCETYPE_NAME=$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 Validate 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é
                        # Confdir, celle-ci 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 onfdir 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 CONFDIR comme étant Null. Ultérieurement, cette méthode recherche et extrait la valeur 
# de la propriété Confdir de la ligne de commande ou à l'aide de scha_resource_get.
CONFDIR=””
UPDATE_PROPERTY=0
CONFDIR_FOUND=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 Confdir à partir de la ligne de commande.
# Sinon, obtenez la valeur de Confdir 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é Confdir 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é Confdir. 

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

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

exit 0