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

Annexe B Liste des codes de service de données échantillon

Cette annexe fournit le code complet de chaque méthode du service de données échantillon, ainsi que le contenu du fichier d'enregistrement du type de ressources.

Cette annexe présente les programmes suivants :

Liste de code du fichier RTR

Le fichier RTR (Resource Type Registration) contient les déclarations de propriétés de ressource définissant la configuration initiale du service de données au moment ou l'administrateur du cluster enregistre ce service.


Exemple B–1 Fichier RTR SUNW.Sample

#
# Copyright (c) 1998-2003 par Sun Microsystems, Inc.
# Tous droits réservés.
#
# Données d'enregistrement du service de noms de domaine (DNS)
#
 
 
#pragma ident   “@(#)SUNW.sample   1.1   00/05/24 SMI”
 
TYPE_RESSOURCE = “sample”;
ID_FOURNISSEUR = SUNW;
DESCRIPTION_TR = “Domain Name Service on Sun Cluster”;
 
VERSION_TR =”1.0”;
VERSION_API = 2;
BASCULEMENT = TRUE;
 
RÉP_BASE_TR=/opt/SUNWsample/bin;
LISTE_PACKAGES = SUNWsample;
 
DÉMARRAGE               = démarrage_svc_dns;
ARRÊT                   = arrêt_svc_dns;
 
VALIDATION              = validation_dns;
ACTUALISATION           = actualisation_dns;
 
DÉMARRAGE_DÉTECTEUR     = démarrage_détecteur_dns;
ARRÊT_DÉTECTEUR         = arrêt_détecteur_dns;
CONTRÔLE_DÉTECTEUR      = contrôle_détecteur_dns;
 
# Une liste des déclarations de propriétés de ressource entre crochets suit les
# déclarations du type de ressources. La déclaration du nom de propriété doit
# être le premier attribut suivant le crochet d'ouverture de chaque entrée.
#
 
# Les propriétés <délai_exécution_[méthode] définissent le délai en secondes passé lequel
# le gestionnaire RGM conclut que l'appel de la méthode a échoué.
 
# La valeur MIN du délai d'attente de toutes les méthodes est de 60 secondes.
# De cette manière, les administrateurs système ne peuvent pas définir de délais d'attente
# plus courts qui n'améliorent pas les performances de commutation/basculement et peuvent
# conduire le gestionnaire RGM à exécuter des actions actions non souhaitées (basculements
# erronés, réinitialisation de noeuds ou basculement du groupe de ressources en mode
# ERREUR_ÉCHEC_ARRÊT) nécessitant l'intervention de l'opérateur. La configuration
# de délais d'attente trop courts induit une *diminution* de la disponibilité globale
# du service de données.
{
   PROPRIÉTÉ = Délai_démarrage;
   MIN=60;
   PAR DÉFAUT=300;
}
 
{
        PROPRIÉTÉ = Délai_arrêt;
        MIN=60;
        PAR DÉFAUT=300;
}
{
        PROPRIÉTÉ = Délai_validation;
        MIN=60;
        PAR DÉFAUT=300;
}
{
        PROPRIÉTÉ = Délai_mise_à_jour;
        MIN=60;
        PAR DÉFAUT=300;
}
{
        PROPRIÉTÉ = Délai_démarrage_détecteur;
        MIN=60;
        PAR DÉFAUT=300;
}
{
        PROPRIÉTÉ = Délai_arrêt_détecteur;
        MIN=60;
        PAR DÉFAUT=300;
}
{
        PROPRIÉTÉ = Intervalle_sonde_complet;
        MIN=1;
        MAX=3600;
        PAR DÉFAUT=60;
        RÉGLABLE = À_TOUT_MOMENT;
}
 
# Nombre de relances à effectuer pendant un intervalle de temps prédéterminé avant de
# conclure qu'il est impossible de démarrer correctement l'application sur ce noeud.
{
        PROPRIÉTÉ = Nombre_nouvelles_tentatives;
        MIN=0;
        MAX=10;
        PAR DÉFAUT=2;
        RÉGLABLE = À_TOUT_MOMENT;
}

# Définissez Intervalle_nouvelles_tentatives sur une valeur multiple de 60, ce paramètre
# configuré en secondes étant converti en minutes avec arrondissement au chiffre supérieur.
# Par exemple, 50 (secondes est converti en 1 minute. Utilisez cette propriété pour
# programmer le nombre de relances (Nombre_nouvelles_tentatives).
{
        PROPRIÉTÉ = Intervalle_nouvelles_tentatives;
        MIN=60;
        MAX=3600;
        PAR DÉFAUT=300;
        RÉGLABLE = À_TOUT_MOMENT;
}
 
{
       PROPRIÉTÉ= Ressources_réseau_utilisées;
        RÉGLABLE = À_LA_CRÉATION;
        PAR DÉFAUT = ““;
}
 
#
# Propriétés d'extension
#
 
# L'administrateur du cluster doit définir la valeur de cette propriété pour indiquer
# le répertoire contenant les fichiers de configuration utilisés par l'application.
# Pour cette application, DNS spécifie le chemin d'accès au fichier de configuration
# du service de noms de domaine sur le PXFS (en règle générale named.conf).
{
   PROPRIÉTÉ = Rép_conf;
   EXTENSION;
   CHAÎNE;
   RÉGLABLE = À_LA_CRÉATION;
   DESCRIPTION = “The Configuration Directory Path”;
}
 
# Délai d'attente en secondes avant de déclarer que la détection a échoué.
{
        PROPRIÉTÉ = Délai_sonde;
        EXTENSION;
        INT;
        PAR DÉFAUT = 30;
        RÉGLABLE = À_TOUT_MOMENT;
        DESCRIPTION = “Time out value for the probe (seconds)”;
}

Méthode de Démarrage

Le gestionnaire RGM appelle la méthode de Démarrage sur un noeud du cluster lorsque le groupe de ressources contenant la ressource du service de données est connecté à ce noeud ou lorsque la ressource est activée. Dans l'application échantillon, la méthode de Démarrage active le démon in.named (système de nom de domaine) sur ce noeud.


Exemple B–2 Méthode de Démarrage_svc_dns

#!/bin/ksh
#
# Méthode de démarrage de HA-DNS.
#
# Cette méthode démarre le service de données sous le contrôle de la fonction PMF.
# Avant de démarrer le processus in.named du service de noms de domaine, elle exécute
# quelques contrôles « sanitaires ». La balise de la fonction PMF pour le service de
# données est $RESOURCE_NAME.named. La fonction PMF tente de démarrer le service suivant
# un nombre de fois spécifié (Nombre_nouvelles_tentatives) et si le nombre de tentatives
# est supérieur à cette valeur dans l'intervalle de temps spécifié
# (Intervalle_nouvelles_tentatives), la fonction  PMF notifie un échec au démarrage du
# service. Nombre_nouvelles_tentatives et Intervalle_nouvelles_tentatives sont des
# propriétésde l'ensemble des ressources du fichier RTR.


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

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

        while getopts `R:G:T:' 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
                        ;;

                *)
                    logger -p ${SYSLOG_FACILITY}.err \
                    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
                    “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`

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

PMF_TAG=$RESOURCE_NAME.named
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

# Accédez à la valeur de la propriété Rép_conf de la ressource afin de démarrer le
# service de noms de domaine. Entrez le nom de la ressource et le groupe de ressources,
# recherchez la valeur Rép_conf définie par l'administrateur du cluster lors de l'ajout
# de la ressource.
config_info=`scha_resource_get -O Extension -R $RESOURCE_NAME
-G $RESOURCEGROUP_NAME Confdir`
# scha_resource_get retourne le type et la valeur de la propriété d'extension
# Accédez uniquement à la valeur de la propriété d'extension. CONFIG_DIR=`echo $config_info
# | awk `{print $2}'`

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

# Configurez le répertoire $CONFIG_DIR si les fichiers de données contiennent
# des noms de chemin d'accès relatifs.
cd $CONFIG_DIR

# Vérifiez que le répertoire $CONFIG_DIR contient bien le fichier named.conf.
if [ ! -s named.conf ]; then
   logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \
       “${ARGV0} File $CONFIG_DIR/named.conf is missing or
empty”
   exit 1
fi

# Accédez à la valeur de Nombre_nouvelles_tentatives à partir du fichier RTR.
RETRY_CNT=`scha_resource_get -O Retry_Count -R $RESOURCE_NAME
-G \ $RESOURCEGROUP_NAMÈ

# Accédez à la valeur Intervalle_nouvelles_tentatives à partir du fichier RTR.
# Convertissez cette valeur, à la base en secondes, en minutes pour le transfert
# vers pmfadm. Veuillez noter qu'il s'agit d'une conversion avec arrondissement :
# par exemple, 50 secondes  devient 1 minute.
((RETRY_INTRVAL = `scha_resource_get -O Retry_Interval
-R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ / 60))

# Démarrez le démon in.named sous le contrôle de la fonction PMF. Laissez-le
# s'interrompre et redémarrer jusqu'à ce que la valeur $RETRY_COUNT dans l'intervalle
# $RETRY_INTERVAL soit atteinte. En cas d'autre échec, la fonction PMF cesse d'essayer
# de le redémarrer. Si un processus est déjà enregistré sous la balise <$PMF_TAG>,
# la fonction PMF envoie un message d'alerte indiquant que le processus est toujours
# opérationnel.
echo “Retry interval is “$RETRY_INTRVAL
pmfadm -c $PMF_TAG.named -n $RETRY_CNT -t $RETRY_INTRVAL \
    /usr/sbin/in.named -c named.conf

# Consignez un message indiquant que HA-DNS a démarré.
if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG]\
           “${ARGV0} HA-DNS successfully started”
fi
exit 0
 

Méthode d'Arrêt

La méthode d'Arrêt est appelée sur un noeud du cluster lorsque le groupe de ressources contenant la ressource HA-DNS est déconnecté sur ce noeud ou que la ressource est désactivée. Cette méthode arrête le démon in.named (système de nom de domaine) sur ce noeud.


Exemple B–3 Méthode d'arrêt_svc_dns

#!/bin/ksh
#
#Méthode d'arrêt de HA-DNS
#
# Arrêtez le service de données à l'aide de la fonction PMF. Si le service ne fonctionne pas
# la méthode se ferme avec l'état 0, le retour de toute autre valeur basculant la ressource
# en mode ÉCHEC_ARRÊT.


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

###############################################################################
# Arguments d'analyse du programme.
#
function parse_args # [args ...]
{
        typeset opt

        while getopts `R:G:T:' 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
                        ;;

                *)
                    logger -p ${SYSLOG_FACILITY}.err \
                    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
                    “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`

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

PMF_TAG=$RESOURCE_NAME.named

SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

# Obtenez la valeur Délai_arrêt à partir du fichier RTR.
DÉLAI_ARRÊT=`scha_resource_get -O STOP_TIMEOUT -R $RESOURCE_NAME
-G \ $RESOURCEGROUP_NAMÈ

# Essayez d'arrêter le service de données de façon ordonnée à l'aide d'un signal SIGTERM
# au moyen de la fonction PMF. Attendez pendant 80 % maximum de la valeur Délai_arrêt pour
# voir si SIGTERM parvient à arrêter le service de données correctement. Dans le
# cas contraire, envoyez un signal SIGKILL pour arrêter le service de données. Utilisez
# jusqu'à 15 % de la valeur Délai_arrêt pour voir si le signal SIGKILL offre les résultats
# escomptés. Dans le cas contraire, l'arrêt échoue et la méthode se ferme avec un état
# différent de zéro. Les 5 % restant de Délai_arrêt sont dédiés à une autre utilisation.
((SMOOTH_TIMEOUT=$STOP_TIMEOUT * 80/100))

((HARD_TIMEOUT=$STOP_TIMEOUT * 15/100))

# Vérifiez si in.named est exécuté. Le cas échéant, interrompez-le.
if pmfadm -q $PMF_TAG.named; then
   # Envoyez un signal SIGTERM au service de données et attendez pendant 80 % # de la
   # valeur totale du délai d'attente.
   pmfadm -s $PMF_TAG.named -w $SMOOTH_TIMEOUT TERM
   if [ $? -ne 0 ]; then
      logger -p ${SYSLOG_FACILITY}.info -t [SYSLOG_TAG] \
          “${ARGV0} Failed to stop HA-DNS with SIGTERM; Retry
with \
           SIGKILL”

      # Comme le service de données ne s'est pas arrêté avec le signal SIGTERM, utilisez
      # le signal SIGKILL et attendez pendant 15 % de la valeur totale du délai d'attente.
      pmfadm -s $PMF_TAG.named -w $HARD_TIMEOUT KILL
      if [ $? -ne 0 ]; then
          logger -p ${SYSLOG_FACILITY}.err -t [SYSLOG_TAG]
\
          “${ARGV0} Failed to stop HA-DNS; Exiting UNSUCCESFUL”

          exit 1
      fi
fi
else
   # Le service de données n'est plus en cours d'exécution. Consignez un message et
   # quittez avec succès.
   logger -p ${SYSLOG_FACILITY}.info -t [SYSLOG_TAG] \
           “HA-DNS is not started”

   # Même si HA-DNS n'est pas exécuté, quittez avec succès pour éviter de basculer
   # le service de données en mode ÉCHEC_ARRÊT.

   exit 0

fi

# Le service de noms de domaine se ferme correctement. Consignez un message et quittez
# avec succès.
logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \
    “HA-DNS successfully stopped”
exit 0

Utilitaire gettime

L'utilitaire gettime est un programme C utilisé par le programme de SONDE pour suivre l'intervalle de temps entre les redémarrages de la détection. Vous devez compiler ce programme et le placer dans le même répertoire que les méthodes de rappel, c'est-à-dire, le répertoire indiqué dans la propriété Rép_base_TR .


Exemple B–4 Programme utilitaire gettime.c

#
# Ce programme utilitaire, utilisé par la méthode de détection du service de données, suit
# l'intervalle de temps en secondes à partir d'un point de référence connu (point de période).
# Vous devez le compiler et le placer dans le même répertoire que les méthodes de rappel
# du service de données (rép_base_TR).


#pragma ident   “@(#)gettime.c   1.1   00/05/24 SMI”


#include <stdio.h>
#include <sys/types.h>
#include <time.h>

main()
{
    printf(“%d\n”, time(0));
    exit(0);
}

Programme de SONDE

Le programme de SONDE vérifie la disponibilité du services de données à l'aide des commandes nslookup( 1M). La méthode de rappel de démarrage_détecteur lance ce programme et la méthode de rappel de démarrage_détecteur l'arrête.


Exemple B–5 Programme de sonde_dns

#!/bin/ksh
#pragma ident   “@(#)dns_probe   1.1   00/04/19 SMI”
#
# Méthode de détection de HA-DNS.
#
# Ce programme vérifie la disponibilité du service de données à l'aide de nslookup, qui
# demande au serveur DNS de rechercher lui-même le serveur DNS. Si le serveur ne répond
# pas ou si un autre serveur répond à la requête, la méthode de détection conclut qu'il a
# un problème au niveau du service de données et bascule ce service sur un autre noeud du
# cluster. La détection est réalisée suivant un intervalle spécifique défini par
# INTERVALLE_SONDE_COMPLET dans le fichier RTR.
  
#pragma ident   “@(#)dns_probe   1.1   00/05/24 SMI”


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

        while getopts `R:G:T:' 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
                        ;;

                *)
                    logger -p ${SYSLOG_FACILITY}.err \
                    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
                    “ERROR: Option $OPTARG unknown”
                     exit 1
                     ;;

                esac
        done

}


###############################################################################
# restart_service ()
#
# Cette fonction tente de redémarrer le service de données en appelant sa méthode
# d'Arrêt, puis sa méthode de Démarrage. Si le service de données a déjà été
# arrêté et qu'aucune balise n'est enregistrée pour ce service sous la fonction
# PMF, cette fonction bascule le service vers un autre noeud du cluster.
#
function restart_service
{

        # Pour redémarrer le service de données, commencez par vérifier qu'il
        # est toujours enregistré sous la fonction PMF.
        pmfadm -q $PMF_TAG
        if [[ $? -eq 0 ]]; then
                # Comme la balise TAG du service de données est toujours enregistrée
                # sous la fonction PMF, commencez par arrêter le service de données,
                # puis redémarrez-le.


                # Obtenez le nom de la méthode d'Arrêt et la valeur DÉLAI_ARRÊT de
                # cette ressource.
                DÉLAI_ARRÊT=`scha_resource_get -O STOP_TIMEOUT
\
                        -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ
                STOP_METHOD=`scha_resource_get -O STOP
\
                        -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ
                hatimerun -t $STOP_TIMEOUT $RT_BASEDIR/$STOP_METHOD
\
                        -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME
\
                        -T $RESOURCETYPE_NAME

                if [[ $? -ne 0 ]]; then
                        logger-p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG]
\
                                “${ARGV0} Stop method failed.”
                        return 1
                fi

                # Obtenez le nom de la méthode de Démarrage et la valeur DÉLAI_DÉMARRAGE
                # de cette ressource.
                DÉLAI_DÉMARRAGE=`scha_resource_get -O START_TIMEOUT
\
                        -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ
                MÉTHODE_DÉMARRAGE=`scha_resource_get -O START
\
                        -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ
                hatimerun -t $START_TIMEOUT $RT_BASEDIR/$START_METHOD
\
                        -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME
\
                        -T $RESOURCETYPE_NAME

                if [[ $? -ne 0 ]]; then
                        logger-p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG]
\
                                “${ARGV0} Start method
failed.”
                        return 1
                fi


        else
                # L'absence de la balise TAG du service de données
                # implique que ce service a déjà dépassé
                # le nombre maximum de tentatives permises sous la fonction PMF.
                # Par conséquent, ne retentez pas de redémarrer
                # le service de données. Essayez de le basculer
                # sur un autre noeud du cluster.
                scha_control -O GIVEOVER -G $RESOURCEGROUP_NAME
\
                        -R $RESOURCE_NAME
        fi

        return 0
}




###############################################################################
# decide_restart_or_failover ()
#
# Cette fonction décide de l'action à entreprendre suite à l'échec d'une
# détection : Redémarrez le service de données localement ou basculez-le sur un
# autre noeud du cluster.
#
function decide_restart_or_failover
{

   # Vérifiez s'il s'agit de la première tentative de redémarrage.
   if [ $retries -eq 0 ]; then
         # Il s'agit de la première tentative de redémarrage. Notez la durée
         # de cette première tentative.
         start_time=`$RT_BASEDIR/gettimè
         retries=`expr $retries + 1`
         # Comme il s'agit de la première tentative, tentez de redémarrer
         # le service de données.
         restart_service
         if [ $? -ne 0 ]; then
            logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \
                “${ARGV0} Failed to restart data service.”
            exit 1
         fi
   else
      # Ce n'est pas la première tentative
      current_time=`$RT_BASEDIR/gettimè
      time_diff=`expr $current_time - $start_timè
      if [ $time_diff -ge $RETRY_INTERVAL ]; then
         # Cet échec survient une fois la fenêtre de temps
         # écoulée. Réinitialisez le compteur de tentatives,
         # faites glisser la fenêtre et recommencez.
         retries=1
         start_time=$current_time
         # Comme l'échec précédent est survenu il y a plus de
         # Intervalle_nouvelles_tentatives, tentez de redémarrer le service de données.
         if [ $? -ne 0 ]; then
            logger -p ${SYSLOG_FACILITY}.err \
                -t [$SYSLOG_TAG
                “${ARGV0} Failed to restart HA-DNS.”
            exit 1
         fi
      elif [ $retries -ge $RETRY_COUNT ]; then
         # Toujours dans la fenêtre de temps,
         # le compteur de tentative a expiré. Basculez.
         retries=0
         scha_control -O GIVEOVER -G $RESOURCEGROUP_NAME \
             -R $RESOURCE_NAME
         if [ $? -ne 0 ]; then
            logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \
                “${ARGV0} Failover attempt failed.”
            exit 1
         fi
      else
         # Toujours dans la fenêtre de temps,
         # le compteur de tentative n'a pas expiré,
         # faites une autre tentative.
         retries=`expr $retries + 1`
         restart_service
         if [ $? -ne 0 ]; then
            logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \
                “${ARGV0} Failed to restart HA-DNS.”
            exit 1
         fi
      fi
fi
}


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

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

PMF_TAG=$RESOURCE_NAME.named
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

# L'intervalle suivant lequel la détection doit être effectuée est paramétré dans
# la propriété définie par le système INTERVALLE_SONDE_COMPLET.
# Obtenez la valeur de cette propriété avec scha_resource_get
INTERVALLE_SONDE=`scha_resource_get -O INTERVALLE_SONDE_COMPLET
-R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ

# Obtenez la valeur du délai d'attente autorisé pour la détection qui est définie
# dans la propriété d'extension DÉLAI_SONDE dans le fichier RTR. Le délai d'attente
# par défaut de nslookup est de 1,5 minutes.
probe_timeout_info=`scha_resource_get -O Extension -R $RESOURCE_NAME
-G \$RESOURCEGROUP_NAME Probe_timeout`
DÉLAI_SONDE=`echo $probe_timeout_info | awk `{print $2}'`

# Identifiez le serveur sur lequel le service de noms de domaine fonctionne en obtenant
# la valeur de la propriété RESSOURCES_RÉSEAU_UTILISÉES de la ressource.
HÔTE_DNS=`scha_resource_get -O NETWORK_RESOURCES_USED -R
$RESOURCE_NAME -G \$RESOURCEGROUP_NAMÈ

# Obtenez la valeur du compteur de tentative à partir de la propriété
# Nombre_nouvelles_tentatives définie par le système
NOMBRE_NOUVELLES_TENTATIVES=`scha_resource_get -O RETRY_COUNT -R $RESOURCE_NAME
-G \$RESOURCEGROUP_NAMÈ

# Obtenez la valeur de l'intervalle entre les tentatives à partir de la propriété
# Intervalle_nouvelles_tentatives définie par le système
INTERVALLE_NOUVELLES_TENTATIVES=`scha_resource_get -O RETRY_INTERVAL -R
$RESOURCE_NAME -G \$RESOURCEGROUP_NAMÈ

# Obtenez le chemin complet de l'utilitaire gettime à partir de la propriété
# Rép_base_TR du type de ressources.
RÉP_BASE_TR=`scha_resource_get -O RT_BASEDIR -R $RESOURCE_NAME
-G \$RESOURCEGROUP_NAMÈ

# La détection est exécutée dans une boucle sans fin, essayant les commandes nslookup.
# Définissez un fichier temporaire pour les réponses de nslookup.
DNSPROBEFILE=/tmp/.$RESOURCE_NAME.probe
probefail=0
retries=0

while :
do
   # L'intervalle suivant lequel la détection doit être exécutée est spécifié dans la
   # propriété INTERVALLE_SONDE_COMPLETS. Cependant, définissez la durée
   # <INTERVALLE_SONDE_COMPLET> pendant laquelle la détection est en sommeil.
   sleep $PROBE_INTERVAL

   # Exécutez la détection qui demande l'adresse IP sur laquelle
   # le service de noms de domaine fonctionne.
   hatimerun -t $PROBE_TIMEOUT /usr/sbin/nslookup $DNS_HOST $DNS_HOST
\
> $DNSPROBEFILE 2>&1

   retcode=$?
        if [ retcode -ne 0 ]; then
                probefail=1
        fi

   # Vérifiez que la réponse à la commande nslookup est émise par le serveur HA-DNS
   # et non par un autre serveur répertorié dans le fichier /etc/resolv.conf.
   if [ $probefail -eq 0 ]; then
      # Obtenez le nom du serveur qui a répondu à la requête de nslookup.
                   SERVER=` awk ` $1==”Server:” {
print $2 }' \
                   $DNSPROBEFILE | awk -F. ` { print $1 } ` `
                if [ -z “$SERVER” ];
then
                        probefail=1
                else
                        if [ $SERVER != $DNS_HOST ]; then
                                probefail=1
                        fi
                fi
        fi

   # Si la variable probefail n'est pas définie sur 0, cela signifie que le délai de
   # la commande nslookup est dépassé ou que la réponse à la requête a été émise par
   # un autre serveur (spécifié dans le fichier /etc/resolv.conf). Dans les deux cas,
   # le serveur DNS ne répond pas et la méthode appelle decide_restart_or_failover,
   # qui détermine si le service de données doit être redémarré ou basculé sur
   # un autre noeud.

   if [ $probefail -ne 0 ]; then
         decide_restart_or_failover
   else
         logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG]\
         “${ARGV0} Probe for resource HA-DNS successful”
   fi
done

Méthode de Démarrage_détecteur

Cette méthode lance le programme de SONDE du service de données.


Exemple B–6 Méthode de Démarrage_détecteur_dns

#!/bin/ksh
#
# Méthode de démarrage du détecteur de HA-DNS.
#
# Cette méthode démarre le détecteur (détection) du service de données sous
# le contrôle de la fonction PMF. Le détecteur est un processus qui teste le
# service de données suivants des intervalles réguliers et qui, en cas de problème,
# le redémarre sur le même noeudou le bascule sur un autre noeud du cluster.
# La balise PMF du détecteur est $RESOURCE_NAME.monitor.


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

###############################################################################
# Arguments du programme d'analyse.
#
function parse_args # [args ...]
{
        typeset opt

        while getopts `R:G:T:' 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
                        ;;

                *)
          logger -p ${SYSLOG_FACILITY}.err \
                   -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
                    “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`

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

PMF_TAG=$RESOURCE_NAME.monitor
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

# Recherchez où réside la méthode de détection en obtenant la valeur de la
# propriété RÉP_BASE_TR du service de données.
RÉP_BASE_TR=`scha_resource_get -O RT_BASEDIR -R $RESOURCE_NAME
-G \$RESOURCEGROUP_NAMÈ

# Lancez la détection du service de données sous la fonction PMF. Utilisez l'option
# de tentative illimitée pour lancer la détection. Passez le nom de la ressource, son
# groupe et son type à la méthode de détection.
pmfadm -c $PMF_TAG.monitor -n -1 -t -1 \
    $RT_BASEDIR/dns_probe -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME
\
    -T $RESOURCETYPE_NAME

# Consignez un message indiquant que le détecteur de HA-DNS a démarré.
if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \
           “${ARGV0} Monitor for HA-DNS successfully started”
fi
exit 0
 

Méthode d'Arrêt_détecteur

Cette méthode interrompt le programme de SONDE du service de données.


Exemple B–7 Méthode d'Arrêt_détecteur_dns

#!/bin/ksh
#
# Méthode d'arrêt du détecteur de HA-DNS
#
# Arrête le détecteur fonctionnant avec la fonction PMF.


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


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

        while getopts `R:G:T:' 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
                        ;;

                *)
                    logger -p ${SYSLOG_FACILITY}.err \
                    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
                    “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`

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

PMF_TAG=$RESOURCE_NAME.monitor
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

# Vérifiez si le détecteur fonctionne. Le cas échéant, interrompez-le.
if pmfadm -q $PMF_TAG.monitor; then
   pmfadm -s $PMF_TAG.monitor KILL
   if [ $? -ne 0 ]; then
      logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \
          “${ARGV0} Could not stop monitor for resource “ \
          $RESOURCE_NAME
           exit 1
   else
      # Possible d'arrêter le détecteur avec succès. Consignez un message.
      logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG]\
          “${ARGV0} Monitor for resource “ $RESOURCE_NAME
\
          “ successfully stopped”
   fi
fi

exit 0

Méthode de Contrôle_détecteur

Cette méthode vérifie l'existence du répertoire spécifié par la propriété Rép_conf. Le gestionnaire RGM appelle Contrôle_détecteur chaque fois que la méthode de SONDE bascule le service de données sur un nouveau noeud et contrôle les noeuds qui sont potentiellement des noeuds maîtres.


Exemple B–8 Méthode de Contrôle_détecteur_dns

#!/bin/ksh
#
# Méthode de contrôle du détecteur du service de noms de domaine.
#
# Le gestionnaire RGM 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. Contrôle_détecteur
# appelle la méthode de Validation pour vérifier que le répertoire et les fichiers
# de configuration sont disponibles sur le nouveau noeud.


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

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

   while getopts `R:G:T:' 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
      ;;

      *)
      logger -p ${SYSLOG_FACILITY}.err \
      -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
      “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`

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

PMF_TAG=$RESOURCE_NAME.named
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

# Obtenez le nom complet de la méthode de Validation à partir de la
# propriété RÉP_BASE_TR du type de ressources.
RÉP_BASE_TR=`scha_resource_get -O RT_BASEDIR -R $RESOURCE_NAME
\
   -G $RESOURCEGROUP_NAMÈ

# Obtenez le nom de la méthode de Validation de cette ressource.
MÉTHODE_VALIDATION=`scha_resource_get -O VALIDATE \
   -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ

# Obtenez la valeur de la propriété Rép_conf afin de démarrer
# le services de données. Utilisez le nom de ressource et le groupe de ressources
# entrés pour obtenir la valeur Rép_conf définie au moment de l'ajout de la ressource.
config_info=`scha_resource_get -O Extension -R $RESOURCE_NAME
-G $RESOURCEGROUP_NAME Confdir`

# scha_resource_get renvoie le type et la valeur des propriétés d'extension.
# Utilisez awk pour obtenir uniquement la valeur de la propriété d'extension
# RÉP_CONFIG=`echo $config_info | awk `{print $2}'`

# Appelez la méthode de Validation pour pouvoir basculer le service de données
# vers le nouveau noeud.
$RT_BASEDIR/$VALIDATE_METHOD -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME
\
   -T $RESOURCETYPE_NAME -x Confdir=$CONFIG_DIR

# Consignez un message indiquant que le contrôle du détecteur a réussi.
if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \
      “${ARGV0} Monitor check for DNS successful.”
   exit 0
else
   logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \
      “${ARGV0} Monitor check for DNS not successful.”
   exit 1
fi

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

Méthode de Mise_à_jour

Le gestionnaire RGM appelle la méthode de Mise_à_jour pour notifier à une ressource en cours d'exécution que ses propriétés ont été modifiées.


Exemple B–10 Méthode Mise_à_jour_dns

#!/bin/ksh
#
# Méthode de mise à jour de HA-DNS.
#
# La mise à jour réelle des propriétés est réalisée par le gestionnaire RGM. Les mises
# à jour affectent uniquement le système de détection des pannes. Par conséquent, cette
# méthode doit redémarrer le système de détection des pannes.


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

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

        while getopts `R:G:T:' 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
                        ;;

                *)
                    logger -p ${SYSLOG_FACILITY}.err \
                    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
                    “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`

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

PMF_TAG=$RESOURCE_NAME.monitor
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

# Recherchez où réside la méthode de détection en obtenant la valeur de la
# propriété RÉP_BASE_TR du service de données.
RÉP_BASE_TR=`scha_resource_get -O RT_BASEDIR -R $RESOURCE_NAME
-G $RESOURCEGROUP_NAMÈ

# Lorsque la méthode de Mise_à_jour est appelée, le gestionnaire RGM met à jour
# la valeur de la propriété en cours de mise à jour. Cette méthode doit vérifier
# que le système de détection des pannes (sonde) fonctionne. Le cas échéant,
# interrompez-le et redémarrez-le.
if pmfadm -q $PMF_TAG.monitor; then

   # Interrompez le détecteur qui fonctionne déjà
pmfadm -s $PMF_TAG.monitor TERM
        if [ $? -ne 0 ]; then
                logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG]
\
                    “${ARGV0} Could not stop the monitor”
                exit 1
        else
                # Possible d'arrêter le service de noms de domaine avec succès.
                # Consignez un message.
                logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG]
\
                    “Monitor for HA-DNS successfully stopped”
        fi

   # Redémarrez le détecteur.
   pmfadm -c $PMF_TAG.monitor -n -1 -t -1 $RT_BASEDIR/dns_probe \
      -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME -T $RESOURCETYPE_NAME
   if [ $? -ne 0 ]; then
          logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG]\
                  “${ARGV0} Could not restart monitor for HA-DNS “
      exit 1
   else
      logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG]\
                    “Monitor for HA-DNS successfully restarted”

   fi
fi
exit 0