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.
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:
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":
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.
Realiza la desconexión del controlador. Esto cierra la sesión ssh principal con el controlador.
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).
Es igual que el comando 3t any 3tshell, pero permite el modo interactivo, ejecutando el shell de CA AppLogic con el pseudoterminal ssh activado.
Invoca el shell interactivo de CA AppLogic.
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.
Muestra el nombre de la aplicación actual (tal y como establece ca)
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
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.
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.
Acceso directo. Igual que 3t app list.
Acceso directo. Igual que 3t app start `pwa`.
Acceso directo. Igual que 3t app stop `pwa`.
No se admite en CA AppLogic 2.3 ni en versiones posteriores. Use la nueva operación vol manage en su lugar.
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:
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
| Copyright © 2012 CA. Todos los derechos reservados. |
|