Se si utilizza un bash GNU, è inoltre possibile utilizzare le macro sul lato client per accedere ai comandi shell di CA AppLogic® direttamente dai comandi CLI sul computer Linux o su un server di Linux di tipo VDS in esecuzione sulla griglia.
Le macro sul lato client per bash GNU e client OpenSSH facilitano l'accesso all'intera funzionalità 3tshell, l'interfaccia di riga di comando di CA AppLogic®, direttamente dal prompt della shell locale.
Funzionalità:
Per utilizzare questo file sul sistema:
È inoltre possibile effettuare queste operazioni nel file .bashrc in modo da renderlo disponibile a tutte le istanze di shell interattive che vengono avviate.
Una volta caricato il file rmacros.sh, nel prompt della shell sono disponibili i comandi seguenti. Gli stessi comandi si possono utilizzare anche in uno script non interattivo, includendo semplicemente il file rmacros.sh dallo script con il comando source:
Impostare il nome host del controller cui indirizzare i comandi successivi. È necessario eseguire questo comando prima degli altri.
Scollegare dal controller. In questo modo si chiude la sessione SSH master con il controller.
È analogo all'immissione del comando nel prompt della shell di CA AppLogic®. Questo modulo è utile per comandi semplici e per le operazioni in batch automatiche. Usare 3t -t per i comandi che richiedono l'interazione dell'utente (ad esempio, vol manage).
Analogo al comando 3t any 3tshell, ma abilita la modalità interattiva con l'esecuzione della shell di CA AppLogic® con il pseudo-terminale SSH abilitato.
Richiama la shell interattiva di CA AppLogic®.
Imposta l'applicazione corrente. Funziona come il comando ca nella shell interattiva. L'esecuzione del comando 3t ca myapp non funziona perché viene avviata una nuova istanza della shell di CA AppLogic® ogni volta che si invoca il comando 3t.
Stampa il nome dell'applicazione corrente (come impostato dal comando ca)
Apre una shell interattiva su un'istanza di appliance in esecuzione nell'applicazione corrente o in quella specificata. component corrisponde al nome completo dell'istanza nella gerarchia dell'applicazione. Il nome dell'assemblato di livello superiore (main.) può essere omesso; ad esempio, i seguenti sono equivalenti:
assh the-app:main.web.srv1 ca the-app ; assh web.srv1
Esegue un comando non interattivo su un'istanza di appliance. NOTA: nelle versioni precedenti (1.x) di CA AppLogic®, il nome del comando e gli argomenti non possono contenere spazi, perché non funzionano come previsto:
assh web.srv1 cat "the file with spaces in its name".
È necessario eseguire questa operazione su una griglia precedente, creare un breve script e copiarlo nell'appliance in esecuzione mediante il comando ascp riportato di seguito, quindi avviare lo script.
Copia un file in/da un'appliance in esecuzione. Il nome di un file o directory locale deve corrispondente ai parametri src o dest. L'altro specifica l'appliance remota e il nome file in un formato simile a quello del comando scp:
comp.name:filename
Il nome del componente è il percorso completo nell'assemblato di applicazione (come con assh, il prefisso main. può essere omesso). Questo comando richiede che l'applicazione in esecuzione sia impostata con il comando ca.
Collegamento. Analogo a 3t app list.
Collegamento. Analogo a 3t start app 'pwa'.
Collegamento. Analogo a 3t stop app 'pwa'.
Non supportato nella versione di CA AppLogic® 2.3 e successive. Utilizzare invece la nuova funzione vol manage.
Non supportato nella versione di CA AppLogic® 2.3 e successive.
Configurazione di opzioni SSH personalizzate
Oltre alla normale impostazione delle opzioni SSH (da inserire nel file ~/.ssh/config), i comandi forniti dal file rmacros.sh accettano anche un'impostazione di variabile di ambiente con opzioni che influiscono solo sulle attivazioni SSH generate dalle macro, ma non su altri comandi SSH. È utile quando è necessaria un'impostazione diversa per l'uso delle griglie di CA AppLogic® e per altre sessioni SSH e il metodo per host supportato dal file .ssh/config non è adatto per separare le diverse opzioni. È valida anche quando si dispone di un accesso di tipo "gestore" per la griglia di CA AppLogic® (ad esempio, se l'utente ha installato la griglia); in tal caso, si dispone di una chiave SSH che fornisce l'accesso root al controller, non quello necessario per lavorare come "client" normale.
Per fornire opzioni aggiuntive alle macro di accesso remoto in rmacros.sh, impostare la variabile AL_SSH_OPT. Questa contiene le opzioni nel formato accettato da SSH e dai programmi analoghi (scp, sftp, e così via): -o OptionName=option-value. Non utilizzare opzioni a sintassi abbreviata quali -i, -t, e così via, perché funzionano con SSH, ma non con scp.
Esempio: export AL_SSH_OPT='-o IdentityFile=/home/lk/t-key -o IdentitiesOnly=yes -o StrictHostKeyChecking=no'
Questa sintassi indica a SSH di utilizzare la chiave /home/lk/t-key per l'autenticazione di chiave pubblica; di non utilizzare altre chiavi servite da un agente SSH; di disabilitare il controllo rigido di identità host (utilizzare l'ultimo solo se si reinstallano spesso le griglie ex novo, operazione che comporta ogni volta la modifica dell'ID SSH del controller).
Accesso facile e veloce con la sessione SSH master
Le funzioni definite in rmacros.sh utilizzano la funzione di sessione master del client OpenSSH. Il primo comando eseguito avvierà un client SSH in background in modalità "master" e tutti i comandi successivi utilizzano la sessione mantenuta da quella master per eseguire ulteriori sessioni SSH sullo stesso canale protetto.
Questa operazione offre due vantaggi: primo, l'immissione di una passphrase per accedere alla chiave privata SSH è necessaria solo una volta; in seguito la sessione viene tenuta aperta senza eseguire ulteriori accessi.
Secondo, le nuove attivazioni di SSH sono rapide come i comandi immessi in una sessione SSH già aperta (in realtà sono più rapide), perché il comando viene inviato una volta premendo Invio, mentre una sessione interattiva utilizza l'eco dei caratteri durante l'immissione del comando.
Inoltre, l'esecuzione dei comandi in locale dalla shell e non dalla console di 3tshell permette di sfruttare al massimo le prestazioni della shell, di creare comandi non possibili con una sessione di 3tshell interattiva, ad esempio:
Ottenere un elenco delle applicazioni in esecuzione:
3t app list | grep running
Salvare elenco dei volumi in un file:
3t vol list --all >file
Trasferire la configurazione da un'applicazione a un'altra:
3t app config app1 --batch | 3t app config app2 --stdin
Questa sezione contiene i seguenti argomenti:
Nota: il codice fornito qui è un esempio che illustra un modo possibile per migliorare e semplificare l'accesso a CLI di AppLogic via ssh. Viene fornito "come è" e non fa parte del codice supportato di AppLogic. Il Supporto tecnico di CA non fornisce consulenza, aggiornamenti o aggiornamenti rapidi in proposito. È possibile segnalare a CA gli errori e le omissioni riscontrate. Se necessario, il file verrà corretto come parte del ciclo di aggiornamento della documentazione in linea di CA.
#!/bin/bash
# Client-side macros for access to AppLogic grid controller
# (C) L.Kalev 2006 (lion//3tera.com)
# temp dir for master-session sockets
export CSPATH=/tmp/apl_lnkroot
# controller name
export AL_CTL
export AL_CTLSOCKOPT
export PWA
ssh_cmd="ssh -l root $AL_SSH_OPT"
# !! _FS must match the value set in '3trsh' for this to work!
_FS='`'
function pack()
{
local i="$IFS"
IFS="$_FS"
ARGS="$*$_FS"
IFS="$i"
return 0
}
## unpack
#OLD_IFS="$IFS"
#if [[ "$T" = *$_FS* ]] ; then IFS="$_FS" ; fi
#set $T
#IFS="$OLD_IFS"
function controller ()
{
[[ -z "$1" ]] && { echo $AL_CTL ; return 0 ; }
local OPT_FC=
if [ "$1" = '-f' ] ; then OPT_FC=1 ; shift ; fi
[[ "$1" != "$AL_CTL" ]] && PWA=
# close old connection, if needed
if [[ -n "$AL_CTL" ]] && [[ -S $CSPATH/$AL_CTL ]] ; then
if [[ -z "$OPT_FC" ]] && [[ "$1" != "-" ]] ; then
AL_CTL=$1
AL_CTLSOCKOPT="-o ControlPath=$CSPATH/$AL_CTL"
return 0 # don't re-connect if connection is open
fi
echo "Closing old connection to $AL_CTL" >&2
kill $(<$CSPATH/$AL_CTL.pid)
fi
AL_CTL=$1
if [ "$AL_CTL" = '-' ] ; then AL_CTL= ; return 0 ; fi # disconnect only
# make sure it has no spaces or other junk
set -- $AL_CTL
[[ "$1" != "$AL_CTL" ]] && { echo "invalid hostname" >&2 ; return 1 ; }
ping -c 1 -n -q "$AL_CTL" >/dev/null || echo "warning: ping $AL_CTL failed"
AL_CTLSOCKOPT="-o ControlPath=$CSPATH/$AL_CTL"
}
function sock-chk ()
{
[[ -z "$AL_CTL" ]] && { echo "controller name not set, use the 'controller' command to set it" >&2 ; return 1 ; }
if [[ -S $CSPATH/$AL_CTL ]] ; then return 0 ; fi
mkdir -p $CSPATH
# redirect all handles of the background ssh process, in case our
# parent waits for eof on a std handle (it won't get it, if the handle
# gets dup()ed into the forked ssh)
$ssh_cmd -M -N -f $AL_CTLSOCKOPT $AL_CTL >/dev/null </dev/null 2>$CSPATH/$AL_CTL.2
local R=$?
if [[ $R != 0 ]] ; then
cat $CSPATH/$AL_CTL.2 >&2
return $R
fi
T=`ps -C ssh -o pid,args | grep -e "-M -N -f $AL_CTLSOCKOPT"`
set -- $T
echo $1 >$CSPATH/$AL_CTL.pid
return 0
}
function 3t ()
{
sock-chk || return 1
local T=
local A=
[[ $# == 0 ]] && T=-t
if [[ "$1" = '-t' ]] ; then T=-t ; shift ; fi
[[ -n "$PWA" ]] && A="=$PWA"
local TC1 TC2
TC1=`stat --format '%Y' $CSPATH/$AL_CTL.2`
ARGS="$A"
if [ $# != 0 ] ; then pack $A "$@" ; fi
$ssh_cmd $T -o LogLevel=ERROR $AL_CTLSOCKOPT $AL_CTL "$ARGS"
A=$?
TC2=`stat --format '%Y' $CSPATH/$AL_CTL.2`
if [[ "$TC1" != "$TC2" ]] && ! [[ -S $CSPATH/$AL_CTL ]] ; then
echo "Connection to controller lost, re-run the command to reconnect"
return 1
fi
return $A
}
function ca ()
{
[[ -n "$1" ]] || { PWA= ; return 0 ; }
# [[ -n "$1" ]] || { echo "use: ca app-name" >&2; return 1; }
3t app info "$1" >/dev/null || return $?
export PWA=$1
return 0
}
function pwa ()
{
echo $PWA
}
function assh ()
{
[[ -z "$1" ]] && { echo "use: assh [app:]comp" >&2 ; return 1 ; }
local APP
# this can be removed when we fix the curr. app support in 3trsh
if [[ $1 == *:* ]] ; then
APP=$1
else
[[ -z "$PWA" ]] && { echo "current app not set, use full name" >&2; return 1; }
APP=$PWA:$1
fi
sock-chk || return 1;
shift
local T=
if [[ -z "$@" && -t 0 && -t 1 ]] ; then
# echo "using tty"
T=-t
fi
local TC1 TC2
TC1=`stat --format '%Y' $CSPATH/$AL_CTL.2`
ARGS="sh $APP"
if [ $# != 0 ] ; then pack sh $APP "$@" ; fi
$ssh_cmd $T $AL_CTLSOCKOPT $AL_CTL "$ARGS"
TC2=`stat --format '%Y' $CSPATH/$AL_CTL.2`
if [[ "$TC1" != "$TC2" ]] && ! [[ -S $CSPATH/$AL_CTL ]] ; then
echo "Connection to controller lost, re-run the command to reconnect"
return 1
fi
}
function ascp ()
{
# temporary - operation w/o current app can wait
[[ -n "$PWA" ]] || { echo "current app. non set" >&2; ritorno 1; }
sock-chk || return 1
# NB: 'local' and the {#} substr match are specific to 'bash', won't work on std bourne shell
local A1=$1
local P1=${1%%:*}
local P2=
local S1=
if [[ "$P1" != $1 ]] ; then # $1 is remote
S1=${1#*:}
[[ $S1 == /* ]] || S1=/root/$S1
[[ -n $P1 ]] || return 1;
A1="root@$AL_CTL:/app/$PWA/$P1$S1"
fi
local A2=$2
P1=${2%%:*}
if [[ "$P1" != $2 ]] ; then # $2 is remote
S1=${2#*:}
[[ $S1 == /* ]] || S1=/root/$S1
[[ -n $P1 ]] || return 1;
A2="root@$AL_CTL:/app/$PWA/$P1$S1"
fi
# should have the same options as $ssh_cmd
scp $AL_SSH_OPT $AL_CTLSOCKOPT "$A1" "$A2"
}
# ---------- various shortcuts
function als ()
{
3t app list
}
function astop ()
{
3t app stop "$@"
}
function astart ()
{
3t app start "$@"
}
# not very useful for now (need to get it to mount on OUR system)
function vmnt ()
{
3t vol mount "$@"
}
function vumnt ()
{
3t vol unmount "$@"
}
# ssh $T -S /tmp/opty3sk -i ~/t-key -o IdentitiesOnly=yes
# master start
# ssh -A -i ~/t-key -M -S /tmp/opty3sk -N -f -o IdentitiesOnly=yes $AL_CTL
|
Copyright © 2013 CA.
Tutti i diritti riservati.
|
|