Tema anterior: Usuarios y grupos globales

Tema siguiente: Bloqueo de aplicaciones y dispositivos


Uso avanzado

Si utiliza un bash de GNU, también puede utilizar macros de cliente para acceder a los comandos de shell de CA AppLogic directamente desde los comandos de CLI en su propio equipo de Linux o un servidor de Linux de tipo VDS que se esté ejecutando en el grid.

Macros del lado del cliente

Las macros de clientes para clientes de GNU Bash y OpenSSH proporcionan un acceso sencillo a todas las funciones de 3tshell, la interfaz de línea de comandos de CA AppLogic, directamente desde el indicador de comandos del shell local.

Funciones:

Para utilizar este archivo en su sistema:

  1. Asegúrese de que dispone de GNU Bash 2.0 o una versión posterior y de la versión 3.9 o posterior del programa de cliente OpenSSH (ssh).
  2. Copie el contenido del tema de rmacros.sh y péguelo en su propio archivo .sh.
  3. Nombre rmacros.sh a este archivo.
  4. Guárdelo en el disco.
  5. Inclúyalo en su shell utilizando el comando de origen.

También puede realizar esto pasos en el archivo .bashrc para que esté disponible para todas las instancias de shell interactivas que inicie.

Una vez que el archivo rmacros.sh esté cargado, los comandos siguientes pasan a estar disponibles desde el indicador de comandos del shell. Los mismos comandos se pueden utilizar también en un script no interactivo incluyendo simplemente el archivo rmacros.sh desde el script con el comando de "origen":

controller hostname-or-ip

Establece el nombre de host del controlador al cual se deben dirigir los comandos subsiguientes. Esto se deberá hacer antes de utilizar cualquiera de los otros comandos.

Controlador

Realiza la desconexión del controlador. Esto cierra la sesión ssh principal con el controlador.

Comando 3t any 3tshell

Esto es lo mismo que escribir el comando en el indicador de comandos del shell de CA AppLogic. Este formato es útil para comandos sencillos y para operaciones por lotes desatendidas. Use 3t -t para comandos que requieran la interacción del usuario (por ejemplo, vol manage).

Comando 3t -t any 3tshell

Es igual que el comando 3t any 3tshell, pero permite el modo interactivo, ejecutando el shell de CA AppLogic con el pseudoterminal ssh activado.

3t

Invoca el shell interactivo de CA AppLogic.

ca appname

Establece la aplicación actual. Esto funciona de la misma forma que el comando "ca" en el shell interactivo. Ejecutar 3t ca myapp no servirá porque cada invocación del comando "3t" inicia una nueva instancia del shell de CA AppLogic.

pwa

Muestra el nombre de la aplicación actual (tal y como establece ca)

assh [appname:]component

Abre un shell interactivo en una instancia en ejecución del dispositivo en la aplicación actual o en la aplicación especificada. El valor de "component" es el nombre completo de la instancia en la jerarquía de la aplicación. El nombre del ensamblaje de nivel superior (main.) se puede omitir, por ejemplo, los siguientes comandos son equivalentes:

assh the-app:main.web.srv1 
ca the-app ; assh web.srv1 
assh [app:]component cmd [args]

Ejecuta un comando no interactivo en una instancia del dispositivo. NOTA: En versiones anteriores (1.x) de CA AppLogic, el nombre del comando y los argumentos no pueden contener espacios, es decir, esto no funcionará según lo previsto:

assh web.srv1 cat "the file with spaces in its name". 

Si debe hacer esto en un grid antiguo, haga un script corto y cópielo en el dispositivo en ejecución usando el comando ascp siguiente y, a continuación, inicie ese script.

ascp src dest

Copie un archivo desde/en un dispositivo en ejecución. Uno de los parámetros src o dest debe ser el nombre de un archivo local o directorio. El otro especifica el dispositivo remoto y el nombre de archivo en un formato similar al del comando "scp":

comp.name:filename 

El nombre del componente es la ruta completa del componente en el ensamblaje de la aplicación (al igual que en assh, el prefijo main. se puede omitir). Este comando requiere que la aplicación actual se defina mediante el comando ca.

als

Acceso directo. Igual que 3t app list.

astart

Acceso directo. Igual que 3t app start `pwa`.

astop

Acceso directo. Igual que 3t app stop `pwa`.

vmnt

No se admite en CA AppLogic 2.3 ni en versiones posteriores. Use la nueva operación vol manage en su lugar.

vumnt

No se admite en CA AppLogic 2.3 ni en versiones posteriores.

Configuración de opciones SSH personalizadas

Además de la forma normal de configurar las opciones SSH (que es ponerlas en el archivo ~/.ssh/config), los comandos proporcionados por rmacros.sh también aceptan una configuración de variable de entorno con opciones que afectan solamente a invocaciones de ssh generadas por las macros, pero no ningún otro comando ssh. Esto es útil si necesita una configuración diferente para trabajar con los grids de CA AppLogic y para otras sesiones de ssh, y el método por host, que se puede usar con el archivo .ssh/config, no es apropiado para separar las distintas opciones. Esto incluye el caso de que usted tenga también acceso de "mantenedor" al grid de CA AppLogic (por ejemplo, si usted ha instalado ese grid). En este caso, tendrá una clave SSH que le proporciona acceso de raíz al controlador, que no es lo que se necesita para trabajar como un "cliente" normal.

Para proporcionar más opciones a las macros de acceso remoto en rmacros.sh, configure la variable AL_SSH_OPT. Debería contener opciones en el formato aceptado por ssh y todos sus programas adjuntos (scp y sftp, entre otros): -o OptionName=option-value. No utilice opciones abreviadas como -i, -t, etc., ya que estas funcionan con ssh, pero no con scp.

Ejemplo:
export AL_SSH_OPT='-o IdentityFile=/home/lk/t-key -o IdentitiesOnly=yes -o StrictHostKeyChecking=no' 

Esto indica a SSH: hay que utilizar la clave /home/lk/t-key para la autenticación de clave pública; no hay que utilizar las claves que proporciona ssh-agent; hay que desactivar las comprobaciones de identidad de host estrictas (utilice la última solamente si reinstala con frecuencia grids desde cero, lo que hace que el ID de SSH del controlador cambie cada vez).

Acceso rápido y fácil con las sesiones principales de SSH

Las funciones definidas en rmacros.sh utilizan la función de "sesión principal" del cliente de OpenSSH. El primer comando que se ejecute iniciará un cliente de ssh en segundo plano en el modo "principal" y todos los comandos subsiguientes utilizan la sesión mantenida por la "principal" para ejecutar otras sesiones de ssh a través del mismo canal seguro.

Esto proporciona dos beneficios: primero, sólo es necesario escribir una vez la frase de contraseña para acceder a la clave privada de SSH (después de esto, la sesión se mantiene abierta y no se hace ningún inicio de sesión adicional).

En segundo lugar, esto hace que las nuevas invocaciones de "ssh" sean tan rápidas como escribir comandos en una sesión de SSH ya abierta. En realidad, es más rápido, porque el comando se envía una vez, cuando se pulsa Intro, mientras que en una sesión interactiva se utiliza el eco carácter a carácter, a medida que se escribe el comando.

También, el hecho de ejecutar los comandos localmente desde el shell y no desde la consola 3tshell permite utilizar todo el potencial del shell para componer comandos que no son posibles con una sesión interactiva de 3tshell, por ejemplo:

Para obtener una lista de las aplicaciones en ejecución:
3t app list | grep running

Para guardar una lista de volúmenes en un archivo:
3t vol list --all >file

Para transferir una configuración de una aplicación a otra:

3t app config app1 --batch | 3t app config app2 --stdin 

Esta sección contiene los siguientes temas:

Ejemplo de rmacros.sh

Ejemplo de rmacros.sh

Nota: el código proporcionado aquí es un ejemplo que ilustra una posible forma de mejorar y simplificar el acceso al CLI de AppLogic mediante ssh. Se proporciona tal cual y no forma parte del código compatible con AppLogic. El soporte técnico de CA no proporcionará ayuda, actualizaciones o revisiones al respecto. Los errores y las omisiones que se detecten pueden comunicarse a CA para que corrija el archivo si es necesario, como parte del ciclo habitual de actualización online de la documentación de CA.

#!/bin/bash

# Macros de cliente para acceder al controlador del grid de AppLogic
# (C) L.Kalev 2006 (lion//3tera.com)

# directorios temporales para sockets de la sesión principal
exportación de CSPATH=/tmp/apl_lnkroot

Nombre de controlador de #
export AL_CTL
export AL_CTLSOCKOPT
export PWA

ssh_cmd="ssh -l root $AL_SSH_OPT"


# !! ¡_FS debe coincidir con el valor establecido en '3trsh' para que esto funcione!
_FS='`'

función pack()
   {
   i="$IFS local"
   IFS="$_FS"
   ARGS="$*$_FS"
   IFS="$i"
   retorno 0
   }

## desempaquetar
#ANTIGUO_IFS="$IFS"
#si [["$T" = *$_FS*]]; entonces IFS="$_FS"; fi
#set $T
#IFS="$ANTIGUO_IFS"


controlador de función ()
   {
   [[-z "$1"]] && { eco $AL_CTL; retorno 0; }

   OPT_FC= local
   si [ "$1" = '-f' ]; entonces OPT_FC=1; tecla de mayúsculas; fi

   [[ "$1" != "$AL_CTL" ]] && PWA=

   # cierre la conexión antigua si es necesario
   si [[-n "$AL_CTL"]] && [[-S $CSPATH/$AL_CTL]]; entonces
      si [[-z "$OPT_FC"]] && [[ "$1" != "-" ]]; entonces
         AL_CTL=$1
         AL_CTLSOCKOPT="-o ControlPath=$CSPATH/$AL_CTL"
         retorno 0 # no vuelva a conectarse si la conexión está abierta
      fi
      eco "cerrando la antigua conexión en $AL_CTL" >&2
      caída $(<$CSPATH/$AL_CTL.pid)
   fi

   AL_CTL=$1
   si [ "$AL_CTL" = '-' ] ; entonces AL_CTL=; retorno 0; solo se desconectan los fi # 

   # asegúrese de que no tiene espacios ni otros elementos no deseados
   configure -- $AL_CTL
   [["$1" != "$AL_CTL"]] && { eco "nombre de host no válido" >&2; retorno 1; }

   ping -c 1 -n -q "$AL_CTL" >/dev/null || eco "advertencia: error en el ping $AL_CTL"
   AL_CTLSOCKOPT="-o ControlPath=$CSPATH/$AL_CTL"
   }


función sock-chk ()
   {
   [[-z "$AL_CTL"]] && {eco "el nombre del controlador no ha sido configurado; utilice el comando "controller" para hacerlo >&2; retorno 1; }
   si [[-S $CSPATH/$AL_CTL]]; entonces retorno 0; fi
   mkdir -p $CSPATH
   # redirija a todos los identificadores del proceso de ssh de fondo por si nuestro
   # espera eof en un identificador de std (no lo tendrá si el identificador
   # lleva dup()ed en el ssh ahorquillado)
   $ssh_cmd -M -N -f $AL_CTLSOCKOPT $AL_CTL >/dev/null </dev/null 2>$CSPATH/$AL_CTL.2
   ¿R=$ local?
   si [[$R != 0]]; entonces
      cat $CSPATH/$AL_CTL.2 >&2
      retorno $R
   fi
   T=`ps -C ssh -o pid,args | grep -e "-M -N -f $AL_CTLSOCKOPT"`
   set -- $T
   eco $1 >$CSPATH/$AL_CTL.pid
   retorno 0
   }


función 3t ()
   {
   sock-chk || retorno 1
   T= local
   A= local
   [[ $# == 0 ]] && T=-t
   si [[ "$1" = '-t' ]]; entonces T=-t; tecla mayúsculas; fi
   [[ -n "$PWA" ]] && A="=$PWA"
   TC1 TC2 local
   TC1=`stat --format '%Y $CSPATH/$AL_CTL.2'
   ARGS="$A"
   si [$# != 0]; entonces paquete $A "$@"; fi
   $ssh_cmd $T -o LogLevel=ERROR $AL_CTLSOCKOPT $AL_CTL "$ARGS"
   ¿A=$?
   TC2=`stat --format '%Y' $CSPATH/$AL_CTL.2`
   si [["$TC1" != "$TC2"]] &&! [[-S $CSPATH/$AL_CTL]]; entonces
      eco "se perdió la conexión al controlador; vuelva a ejecutar el comando para conectarse de nuevo"
      retorno 1
   fi
   retorno $A
   }

función ca ()
   {
   [[-n "$1"]] || { PWA=; retorno 0; }
   # [[-n "$1"]] || { eco "uso: nombre de la aplicación de ca >&2; retorno 1; }
   3t app info "$1" >/dev/null || return $?
   exportación PWA=$1
   retorno 0
   }

función pwa ()
   {
   eco $PWA
   }

función assh ()
   {
   [[-z "$1"]] && { eco "uso: assh [app:]comp" >&2; retorno 1; }

   APP local

   # puede eliminarse cuando se arregle el curr. soporte de app en 3trsh
   si [[$1 == *:*]]; entonces
      APP=$1
else   
     [[-z "$PWA"]] && { eco "app actual no establecido, utilice el nombre completo" >&2; retorno 1; }
     APP=$PWA:$1
   fi


   sock-chk || retorno 1;

   tecla de mayúscula
   T= local
   si [[ -z "$@" && -0 t && -1 t]]; entonces
       # eco "utilizando tty"
      T=-t
   fi

   TC1 TC2 local
   TC1=`stat --format '%Y $CSPATH/$AL_CTL.2'
   ARGS="sh $APP"
   si [$# != 0]; entonces pack sh $APP "$@"; fi
   $ssh_cmd $T $AL_CTLSOCKOPT $AL_CTL "$ARGS"
   TC2=`stat --format '%Y' $CSPATH/$AL_CTL.2`
   si [["$TC1" != "$TC2"]] &&! [[-S $CSPATH/$AL_CTL]]; entonces
      eco "se perdió la conexión al controlador; vuelva a ejecutar el comando para conectarse de nuevo"
      retorno 1
   fi
   }


función ascp ()
   {
   # temporal - la ejecución sin el app actual puede esperar
   [[-n "$PWA"]] || { eco "app actual no configurado" >&2; retorno 1; }

   sock-chk || retorno 1

   # NB: 'local' y la coincidencia de substr de {#} son específicos del 'bash' y no funcionarán e no trabajará en shell de std bourne
   A1=$1 local
   P1=${1%%:*} local
   P2= local
   S1= local
   si [["$P1" != $1]]; entonces # $1 es remoto
      S1=${1#*:}
      [[ $S1 == /* ]] || S1=/root/$S1
      [[ -n $P1 ]] || retorno 1;
      A1="root@$AL_CTL:/app/$PWA/$P1$S1"
   fi

   A2=$2 local
   P1=${2%%:*}
   si [["$P1" != $2]]; entonces # $2 es remoto
      S1=${2#*:}
      [[ $S1 == /* ]] || S1=/root/$S1
      [[ -n $P1 ]] || retorno 1;
      A2="root@$AL_CTL:/app/$PWA/$P1$S1"
   fi

# debería tener las mismas opciones que $ssh_cmd
   scp $AL_SSH_OPT $AL_CTLSOCKOPT "$A1" "$A2"
   }


# ---------- diversos accesos directos

función als ()
   {
   Lista de app de 3t
   }

función astop ()
   {
   Detención de app de 3t "$@" 
   }

función astart ()
   {
   Inicio de app de 3t "$@" 
   }

# no es muy útil para ahora (debe obtenerlo para montarlo en NUESTRO sistema)
función vmnt ()
   {
   Montaje de volúmenes de 3t "$@"
   }

función vumnt ()
   {
   Desmontaje de volúmenes de 3t "$@"
   }


# ssh $T -S /tmp/opty3sk -i ~/t-key -o IdentitiesOnly=yes

# inicio principal
# ssh -A -i ~/t-key -M -S /tmp/opty3sk -N -f -o IdentitiesOnly=yes $AL_CTL