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

Méthode Validate

Le RGM appelle la méthode Validate lorsqu'un groupe est créé et lorsqu'une opération de l'administrateur met à jour les propriétés de la ressource ou du groupe qui la contient. Le RGM appelle Validate avant la création ou la mise à jour, et un code de sortie avec échec issu de la méthode sur un nœud entraîne l'annulation de la création ou de la mise à jour.

Il n'appelle Validate que lorsque les propriétés de la ressource ou du groupe sont modifiées par une opération de l'administrateur, et non lorsque le RGM définit des propriétés, ou lorsqu'un détecteur définit les propriétés Status et Status_msg de la ressource.


Remarque –

la méthode Monitor_check appelle aussi explicitement la méthode Validate lorsque la méthode PROBE tente de basculer le service de données sur un autre nœud.


Présentation de Validate

Le RGM appelle Validate avec des arguments différents de ceux transmis aux autres méthodes, y compris les propriétés et valeurs mises à jour. C'est la raison pour laquelle cette méthode du service de données modèle doit mettre en œuvre une fonction parse_args() pour gérer les autres arguments.

La méthode Validate vérifie une seule propriété, la propriété d'extension Confdir. Cette propriété pointe vers le répertoire de configuration DNS, essentiel pour un bon fonctionnement du DNS.


Remarque –

le répertoire de configuration ne pouvant pas être modifié lorsque le DNS tourne, la propriété Confdir est déclarée TUNABLE = AT_CREATION dans le fichier RTR. C'est pourquoi la méthode Validate n'est jamais appelée pour vérifier la propriété Confdir à la suite d'une mise à jour, mais uniquement à la création de la ressource du service de données.


Si Confdir est l'une des propriétés transmises par le RGM à Validate, la fonction parse_args() récupère et enregistre sa valeur. Validate vérifie alors si le répertoire vers lequel pointe la nouvelle valeur de Confdir est accessible et si le fichier named.conf existe dans ce répertoire et contient certaines données.

Si la fonction parse_args() ne peut pas récupérer la valeur de Confdir à partir des arguments de ligne de commande transmis par le RGM, Validate tente néanmoins de valider la propriété Confdir. Validate utilise scha_resource_get () pour obtenir la valeur de Confdir à partir de la configuration statique. Ensuite, elle effectue les mêmes contrôles afin de s'assurer que le répertoire de configuration est accessible et contient un fichier named.conf qui ne soit pas vierge.

Si Validate se ferme en affichant un état d'échec, la mise à jour ou la création de toutes les propriétés, et pas seulement de Confdir, échoue.

Fonction d'analyse de la méthode Validate

Le RGM transmet à la méthode de Validate un ensemble de paramètres différent de celui des autres méthodes de rappel, de telle manière que Validate a besoin d'une autre fonction d'analyse des arguments que les autres méthodes. Reportez-vous à la page man rt_callbacks(1HA) pour de plus amples informations sur les paramètres transmis à Validate et aux autres méthodes de rappel. L'exemple suivant montre la fonction parse_args() de Validate.


#########################################################################
#Analyser les arguments Validation.
#
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 dans lequel est configurée
# la ressource.
RESOURCEGROUP_NAME=$OPTARG
                  ;;
         T)
                  # Nom du type de ressource.
RESOURCETYPE_NAME=$OPTARG
                  ;;
         r)
                  # La méthode n’accède pas à des propriétés définies
# par le système. Aucune action.
                  ;;
         g)
                  # La méthode n’accède pas à des propriétés du groupe de
# ressources. Aucune action.
                  ;;
         c)
                  # Indique que la méthode Validate est appelée lors
# de la création de la ressource. Indicateur sans action.
                  ;;
         u)
                  #Indique la mise à jour d’une propriété quand la
# ressource existe déjà. Si la mise à jour est adressée
# à la propriété Confdir, alors Confdir doit apparaître dans
# les arguments de ligne de commande. Dans le cas contraire,
# la méthode doit le rechercher à l’aide de scha_resource_get.
                  UPDATE_PROPERTY=1
                  ;;
         x)
                  # Liste des propriétés d’extension. Séparer les couples propriété et
# valeur en utilisant "=" comme séparateur.
                  PROPERTY=`echo $OPTARG | awk -F= '{print $1}'`
                  VAL=`echo $OPTARG | awk -F= '{print $2}'`
                  # Si la propriété d’extension se trouve sur la ligne de
# commande, noter 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
}

Comme la fonction parse_args() des autres méthodes, cette fonction propose un indicateur (R) pour capturer le nom de la ressource, (G) pour capturer le nom du groupe de ressources et (T) pour capturer le type de ressource transmis par le RGM.

Les indicateurs r (propriété définie par le système), g (propriété du groupe de ressources) et c (validation à la création de la ressource) sont ignorés parce que cette méthode est appelée pour valider une propriété d'extension lors de la mise à jour de la ressource.

L'indicateur u définit la variable de shell UPDATE_PROPERTY à 1 (TRUE). Le témoin x capture les noms et les valeurs des propriétés mises à jour. Si Confdir est l'une des propriétés mises à jour, sa valeur est placée dans la variable de shell CONFDIR et la variable CONFDIR_FOUND est réglée sur 1 (TRUE).

Validation de Confdir

Dans sa fonction MAIN, Validate attribue d'abord une chaîne vide à la variable CONFDIR et une valeur 0 à UPDATE_PROPERTY et CONFDIR_FOUND.


CONFDIR=""
UPDATE_PROPERTY=0
CONFDIR_FOUND=0

Validate appelle ensuite parse_args() pour analyser les arguments transmis par le RGM.


parse_args “$@”

Validate vérifie alors si Validate est appelée à la suite d'une mise à jour des propriétés et si la propriété d'extension Confdir se trouvait sur la ligne de commande. Validate vérifie alors si la propriété Confdir a une valeur et, si ce n'est pas le cas, elle se ferme en affichant un état d'échec et émet un message d'erreur.


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érifier que la propriété Rép_conf possède une valeur. Dans le cas contraire, il y a échec
# et 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


Remarque –

le code précédent vérifie tout spécialement si Validate est appelée à la suite d'une mise à jour ($UPDATE_PROPERTY == 1) et si la propriété n'a pas été trouvée dans la ligne de commande (CONFDIR_FOUND == 0), auquel cas il récupère la valeur existante de Confdir à l'aide de scha_resource_get (). Si Confdir a été trouvé dans la ligne de commande (CONFDIR_FOUND == 1), la valeur de CONFDIR provient de la fonction parse_args(), et non de scha_resource_get ().


La méthode Validate utilise alors la valeur de CONFDIR pour vérifier si le répertoire est accessible. Si ce n'est pas le cas, Validate consigne un message d'erreur et se ferme en affichant un état d'échec.


# Vérifier si $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

Avant de valider la mise à jour de la propriété Confdir, Validate effectue un contrôle final pour vérifier si le fichier named.conf est présent. Si ce n'est pas le cas, la méthode enregistre un message d'erreur et se ferme en affichant un état d'échec.


# Vérifier si le fichier named.conf est présent 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

Si le dernier contrôle réussit, Validate consigne un message indiquant une réussite et se ferme avec un état de réussite.


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

exit 0

État de Validate à la fermeture

Si Validate se ferme avec succès (0) Confdir est créé avec la nouvelle valeur. Si Validate se ferme avec un échec (1), Confdir et les autres propriétés ne sont pas créées et un message indiquant la raison de cet échec est envoyé à l'administrateur du cluster.