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