Guide du développeur de services de données Sun Cluster pour SE Solaris

Fonctionnalité commune à toutes les méthodes

Cette rubrique décrit la fonctionnalité suivante, utilisée dans toutes les méthodes de rappel du service de données modèle :

Identification de l'interpréteur de commandes et exportation du chemin

La première ligne d'un script Shell doit identifier l'interpréteur de commandes. Chaque script de méthode dans le service de données modèle identifie l'interpréteur de commandes de la façon suivante :

#!/bin/ksh

Tous les scripts de méthode de l'application modèle exportent le chemin d'accès vers les binaires et les bibliothèques Sun Cluster plutôt que de compter sur la définition de la variable d'environnement PATH de l'utilisateur.

#######################################################################
# MAIN
#######################################################################

export PATH=/bin:/usr/bin:/usr/cluster/bin:/usr/sbin:/usr/proc/bin:$PATH

Déclaration des variables PMF_TAG et SYSLOG_TAG

Tous les scripts de méthode, à l'exception de Validate, utilisent pmfadm pour démarrer ou arrêter le service de données ou le détecteur, en lui passant le nom de la ressource. Chaque script définit une variable, PMF_TAG, qui peut être passée à pmfadm pour identifier le service de données ou le détecteur.

De même, chaque script de méthode utilise la commande logger pour journaliser les messages dans le journal système. Chaque script définit une variable, SYSLOG_TAG, qui peut être passée à la commande logger avec l'option -t pour identifier le type, le nom et le groupe de ressource de la ressource pour laquelle le message est consigné.

Toutes les méthodes définissent SYSLOG_TAG de la même manière, comme cela est indiqué dans l'exemple de code suivant. Les méthodes dns_probe, dns_svc_start , dns_svc_stop, et dns_monitor_check définissent PMF_TAG comme suit (les commandes pmfadm et logger sont utilisées à partir de la méthode dns_svc_stop).

#########################################################################
# MAIN
#########################################################################

PMF_TAG=$RESOURCE_NAME.named

SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

   # Envoie un signal SIGTERM au service de données et attend pendant 80% de
   # la valeur de délai totale.
   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”

les méthodes dns_monitor_start, dns_monitor_stop et dns_update définissent PMF_TAG de la façon suivante (la commande pmfadm est utilisée à partir de la méthode dns_monitor_stop) :

#####################################################################
# MAIN
#####################################################################

PMF_TAG=$RESOURCE_NAME.monitor
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME
...
# Voir si le détecteur est en cours d'exécution et si oui, le tuer. 
if pmfadm -q $PMF_TAG.monitor; then
   pmfadm -s $PMF_TAG.monitor KILL

Analyse des arguments de la fonction

Le gestionnaire RGM exécute toutes les méthodes de rappel, à l'exception de Validate, de la façon suivante :

method-name -R resource-name -T resource-type-name -G resource-group-name

Le nom de la méthode correspond au nom de chemin d'accès du programme mettant en œuvre la méthode de rappel. Un service de données spécifie le nom de chemin d’accès de chaque méthode du fichier RTR. Ces noms dépendent du répertoire spécifié par la propriété RT_basedir, également dans le fichier RTR. Par exemple dans le fichier RTR du service de données modèle, le répertoire de base et les noms des méthodes sont spécifiés comme suit :

RT_basedir=/opt/SUNWsample/bin;
Start = dns_svc_start;
Stop =  dns_svc_stop;
...

Tous les arguments des méthodes de rappel sont passées en tant que valeurs marquées. L'argument -R indique le nom de l'instance de ressource. L'argument -T indique le type de la ressource. L'argument -G indique le groupe dans lequel la ressource est configurée. Reportez-vous à la page de manuel rt_callbacks(1HA) pour obtenir plus d'informations sur les méthodes de rappel.


Remarque –

la méthode Validate est appelée avec des arguments supplémentaires, à savoir les valeurs de propriété de la ressource et du groupe de ressources pour lesquels elle est appelée. Reportez-vous à la rubrique Gestion des mises à jour des propriétés pour obtenir plus d'informations.


Chaque méthode de rappel a besoin d'une fonction pour analyser les arguments transmis à la fonction. Tous les rappels étant transmis avec les mêmes arguments, le service de données fournit une seule fonction d'analyse employée dans tous les rappels de l'application.

L'exemple suivant illustre le cas de la fonction parse_args(), utilisée pour les méthodes de rappel dans l'application modèle.

#########################################################################
# Analyse des 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 ressource.
                  RESOURCETYPE_NAME=$OPTARG
                  ;;
             *)
                  logger -p ${SYSLOG_FACILITY}.err \
                  -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
                  "ERROR: Option $OPTARG inconnue"
                  exit 1
                      ;;
             esac
    done
}

Remarque –

bien que la méthode de SONDE de l'application modèle soit définie par l'utilisateur (et qu'il ne s'agisse pas d'une méthode de rappel de Sun Cluster), elle est appelée avec les mêmes arguments que les méthodes de rappel. Par conséquent, cette méthode contient une fonction d'analyse identique à celle qu'utilisent les autres méthodes de rappel.


La fonction d'analyse est appelée dans MAIN sous la forme :

parse_args “$@”

Génération de messages d'erreur

Les méthodes de rappel doivent utiliser la fonction syslog() pour générer les messages d'erreur destinés aux utilisateurs finaux. Toutes les méthodes de rappel du service de données modèle utilisent la commande scha_cluster_get pour récupérer le numéro de la fonction syslog() utilisée pour le journal du cluster, comme cela est indiqué ci-après :

SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

La valeur est stockée dans une variable de shell, SYSLOG_FACILITY, et peut être utilisée par la commande logger pour journaliser les messages dans le journal du cluster. Par exemple, la méthode Start du service de données modèle récupère la fonction syslog() et consigne un message indiquant que le service de données a été démarré de la façon suivante :

SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`
...
if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} HA-DNS successfully started"
fi

Reportez-vous à la page de manuel scha_cluster_get(1HA) pour obtenir plus d'informations.

Obtention des informations des propriétés

La plupart des méthodes de rappel doivent obtenir des informations sur les propriétés des ressources et des types de ressource du service de données. L'API fournit la fonction scha_resource_get() à cette fin.

Les propriétés définies au niveau système et les propriétés d’extension sont disponibles. Les premières sont prédéfinies et vous définissez les autres dans le fichier RTR.

Si vous utilisez scha_resource_get() pour obtenir la valeur d'une propriété définie au niveau système, spécifiez le nom de la propriété avec l'option -O. La commande ne renvoie que la valeur de la propriété. Par exemple, dans le service de données modèle, la méthode Monitor_start doit localiser le programme de sonde afin de pouvoir le démarrer. Le programme de sonde se trouve dans le répertoire de base du service de données, vers lequel pointe la propriété RT_basedir. La méthode Monitor_start récupère la valeur de RT_basedir et la place dans la variable RT_BASEDIR, comme suit :

RT_BASEDIR=`scha_resource_get -O RT_basedir -R $RESOURCE_NAME -G \
$RESOURCEGROUP_NAME`

Pour les propriétés d'extension, vous devez utiliser l'option -O pour indiquer que la propriété est une propriété d'extension. Vous devez également fournir le nom de la propriété comme dernier argument. Pour les propriétés d'extension, la commande renvoie à la fois le type et la valeur de la propriété. Par exemple, dans le service de données modèle, le programme de sonde récupère le type et la valeur de la propriété d'extension Probe_timeout, puis utilise la commande awk pour placer uniquement la valeur dans la variable de shell PROBE_TIMEOUT, comme suit :

probe_timeout_info=`scha_resource_get -O Extension \
-R $RESOURCE_NAME -G $RESOURCEGROUP_NAME Probe_timeout`
PROBE_TIMEOUT=`echo $probe_timeout_info | awk '{print $2}'`