Sun Cluster: Guía del desarrollador de los servicios de datos del sistema operativo Solaris

Método Validate

Este método verifica la existencia del directorio al que señala la propiedad Confdir. RGM invoca este método cuando se crea el servicio de datos y cuando el administrador del clúster actualiza las propiedades del servicio de datos. El método Monitor_check invoca este método cuando el supervisor de fallos realiza una recuperación de fallos del servicio de datos a otro nodo.


Ejemplo B–9 Método dns_validate

#!/bin/ksh
# Método Validate para HA-DNS.
# Este método valida la propiedad Confdir del recurso. El método Validate
# se invoca en dos situaciones: cuando el recurso se está creando y cuando
# se está actualizando una propiedad de recurso. Cuando el recurso se está
# creando, este método se invoca con el indicador -c y todas las propiedades
# definidas por el sistema y de extensión se pasan como argumentos de línea
# de órdenes. Cuando se está actualizando una propiedad de recurso, el método
# Validate se invoca con el indicador -u, y sólo el par propiedad-valor de la
# propiedad que se está actualizando se pasa como argumento de línea de órdenes.
#
# ej.: cuando el recurso se está creando, los argumentos de órdenes serán
#
# dns_validate -c -R <..> -G <...> -T <..> -r <prop-def-sis=valor>...
#       -x <extension-prop=value>.... -g <prop-grupo-recurso=valor>....
#
# cuando la propiedad de recurso se está actualizando
#
# dns_validate -u -R <..> -G <...> -T <..> -r <prop-sis_actualizando=valor>
# O BIEN
# dns_validate -u -R <..> -G <...> -T <..> -x <prop-exten_actualizando=valor>
#

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

###############################################################################
# Analizar argumentos de programa.
#
function parse_args # [args ...]
{
   typeset opt

   while getopts `cur:x:g:R:T:G:' opt
   do
                case “$opt” in
                R)
                        # Nombre del recurso de DNS.
                        RESOURCE_NAME=$OPTARG
                        ;;
                G)
                        # Nombre del grupo de recursos en el que se ha
                        # configurado el recurso.
                        RESOURCEGROUP_NAME=$OPTARG
                        ;;
                T)
                        # Nombre del tipo de recurso.
                        RESOURCETYPE_NAME=$OPTARG
                        ;;
                r)
                        # El método no está accediendo a ninguna propiedad
                        # definida por el sistema, por lo que no tiene ninguna
                        # operación.
                        ;;
                g)
                        # El método no está accediendo a ninguna propiedad de
                        # grupo de recursos, por lo que no tiene operación.
                        ;;
                c)
                        # Indica que se está invocando el método Validate mientras
                        # se crea el recurso, por lo que el indicador
                        # no tiene ninguna operación.
                        ;;
                u)
                        # Indica la actualización de una propiedad cuando el recurso
                        # ya existe. Si la actualización es de la propiedad Confdir,
                        # Confdir debería aparecer en los argumentos de línea de
                        # órdenes. En caso contrario, el método debe buscarlo
                        # específicamente con scha_resource_get.
                        UPDATE_PROPERTY=1
                        ;;
                x)
                        # Lista de propiedades de extensión. Separar los pares de
                        # propiedad valor con “=” como separador.
                        PROPERTY=`echo $OPTARG | awk -F= `{print $1}'`
                        VAL=echo $OPTARG | awk -F= `{print $2}'`

                        # Si la propiedad de extensión Confdir se encuentra en la
                        # línea de órdenes, anotar su valor.
                        if [ $PROPERTY == “Confdir” ];
                        then
                        CONFDIR=$VAL
                        CONFDIR_FOUND=1
                        fi
                        ;;
                *)
                        logger -p ${SYSLOG_FACILITY}.err \
                        -t [$SYSLOG_TAG] \
                        “ERROR: Opción $OPTARG desconocida”
                        exit 1
                        ;;
                esac
   done
}

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

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

# Obtener el recurso syslog que hay que usar para registrar mensajes.
SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

# Establecer el valor de CONFDIR en null. Más tarde, este método recupera el
# valor de la propiedad Confdir de la línea de órdenes o con scha_resource_get.
CONFDIR=””
UPDATE_PROPERTY=0
CONFDIR_FOUND=0

# Analizar los argumentos que se han pasado a este método.
parse_args “$@”

# Si el método Validate se invoca por una actualización de propiedades
# intentar recuperar el valor de la propiedad de extensión Confdir de línea de
# órdenes. Si no, obtener el valor de Confdir con 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

# Verificar que la propiedad Confdir tiene un valor. En caso contrario,
# hay un fallo y sale con estado 1.
if [[ -z $CONFDIR ]]; then
   logger -p ${SYSLOG_FACILITY}.err \
       “${ARGV0}Método de validar el recurso “$RESOURCE_NAME “ no satisfactorio”
   exit 1
fi

# Validar ahora el valor real de la propiedad Confdir.

# Comprobar si $CONFDIR es accesible.
if [ ! -d $CONFDIR ]; then
        logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \
            “${ARGV0} Directorio $CONFDIR falta o no está montado”
        exit 1
fi

# Comprobar que el archivo named.conf esté presente en el directorio Confdir.
if [ ! -s $CONFDIR/named.conf ]; then
        logger -p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \
            “${ARGV0} El archivo $CONFDIR/named.conf falta o está vacío”
        exit 1
fi

# Registrar un mensaje que indique que el método Validate ha sido satisfactorio.
logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \
   “${ARGV0} Método de validar para el recurso “$RESOURCE_NAME \
   “ se ha completado”

exit 0