Tecnologia

Desde hace un par de años tenemos en mi organización un par de cabinas EVA. Sin entrar en valoraciones sobre el hardware, uno de los temas que más nos traia de cabeza era la automatización de ciertos comandos de cabina para poder realizar, de forma facil por ejemplo, y mediante scripting, ciertas tareas rutinarias (snapshots por ejemplo). El script se basa en el uso del programa SSSU, que se puede bajar de la web de HP, y que permite el uso de comandos de forma interactiva, por consola, para poder manipular las cabinas EVA.

 

Despues de trabajar un poco el tema, cree un programa, que llame hpeva-command.sh, que básicamente permite hacer los siguientes comandos a traves de la shell de linux:

 

  • Ver la version de un Command View
  • Obtener un WWN de un VDISK
  • Ver la fecha de creación de un VDISK (eso incluye los snaphots tambien)
  • Volcado de la información de un VDISK (para poder tratar a posteriori el resultado)
  • Renombrar un VDISK
  • Obtener los hosts a los que esta presentado un VDISK
  • Hacer un Snaphot, tanto por fecha como a partir de un nombre
  • Ver los snapshots que tiene un VDISK
  • Presentar y despresentar un VDISK a un host (tambien funciona con snapshots)
  • Borrar un VDISK (Cuidado, no pide confirmación!!)
  • Mostrar la información de un Diskgroup

El listado de comandos se basó en las necesidades de un sistema de backup que monté a base de scripts, y que me iba creando necesidades de acceso a información de la cabina, con lo que poco a poco fuí mejorando el script original.

El script está pensado para montarse usando una estructura de carpetas, en las que a partir de la raiz, tiene que haver los siguientes directorios:

  • bin: Donde se colorará el script propiamente, así como el ejecutable sssu
  • etc: Donde meteremos los ficheros de configuración

En el directorio etc encontraremos los siguientes ficheros:

  • .cfg: en el que incorporaremos las credenciales de sesion del commandview y de la cabina para poder acceder a ella. Esta estructura permite acceder a multiples cabinas mediente la creación de un fichero de configuración por cabina

El contenido del fichero de configuración es el siguiente:


#
# Credentials
#

MANAGER=
USERNAME=
PASSWORD=
SYSTEM=

Respecto del script propiamente, a continuación lo detallo. Hay que tener en cuenta que se tiene que modificar la variable HPEVA_HOME al directorio donde coloqueis la base de los directorios bin y etc que menciono antes:

#!/bin/bash
#
# Executa comandes contra una EVA
#
# hpeva-command eva.cfg command parameters
#
# Ver: 1.0
HPEVA_HOME="/usr/local/stow/eva-backup"

if [ $# -lt 3 ]; then
echo "Error, faltan parametros";
echo "Uso: $0 ";
echo "";
echo -e "donde comando y parametros pueden ser:"
echo "";
echo -e "\t- EMVERSION -: Version del CommandView";
echo -e "\t- GETWWN : Obtener el WWN de un VDISK";
echo -e "\t- VDISKDATE : Ver fecha de creación de un VDISK";
echo -e "\t- DUMPVDISK : Volcado de toda la configuracion del VDISK";
echo -e "\t- RENVDISK : Renombrar un VDISK";
echo -e "\t- GETPRESENTLUNS : Mostrar los hosts donde esta presentado un VDISK en el formato \Hosts\\";
echo -e "\t- SNAP : Hace un snapshot del VDISK llamado vdisk_SNAP";
echo -e "\t- SNAPNAME : Hace un snapshot del vdisk llamandolo segun el segundo parámetro";
echo -e "\t- DUMPSNAPS : Muestra los snaps que tiene un VDISK";
echo -e "\t- PRESENT : Presenta un VDISK a un host";
echo -e "\t- UNPRESENT : Despresenta un VDISK de un host usando el formato devuelto per GETPRESENTLUNS";
echo -e "\t- DEL : Borra un VDISK";
echo -e "\t- DISKGROUP : Muestra toda la información relativa a un Diskgroup";
echo ""
exit -1
fi;

. $1

SSSU="$HPEVA_HOME/bin/sssu"
CMD_LOGIN="SELECT MANAGER $MANAGER USERNAME=$USERNAME PASSWORD=$PASSWORD"
CMD_SYSTEM="SELECT SYSTEM $SYSTEM"

TODAY=`date +"%Y%m%d"`

case $2 in

"EMVERSION")
CMD_RUN="EMVERSION"
EXEC_TYPE="PLAIN"
;;
"GETWWN")
CMD_RUN="LS VDISK $3"
CMD_GREP="objecthexuid"
EXEC_TYPE="GREP-"
;;
"GETWWNPLAIN")
CMD_RUN="LS VDISK $3"
CMD_GREP="objecthexuid"
EXEC_TYPE="GREP"
;;
"VDISKDATE")
CMD_RUN="LS VDISK $3"
CMD_GREP="creationdatetime"
EXEC_TYPE="GREP-"
;;
"DUMPVDISK")
CMD_RUN="LS VDISK $3"
CMD_GREP="hostname"
EXEC_TYPE="PLAIN"
;;
"RENVDISK")
CMD_RUN="SET VDISK $3 NAME=$4"
CMD_GREP="hostname"
EXEC_TYPE="PLAIN"
;;
"GETPRESENTLUNS")
CMD_RUN="LS VDISK $3"
CMD_GREPS="lunnumber hostname"
CMD_GREPS_NUM="2 2"
EXEC_TYPE="MULTIGREP"
;;
"SNAP")
CMD_RUN="ADD SNAPSHOT $3_SNAP VDISK=$3 ALLOCATION_POLICY=DEMAND"
EXEC_TYPE="PLAIN"
;;
"SNAPNAME")
CMD_RUN="ADD SNAPSHOT $4 VDISK=$3 ALLOCATION_POLICY=DEMAND"
EXEC_TYPE="PLAIN"
;;
"SNAPNAMELUN")
CMD_RUN="ADD SNAPSHOT $4 VDISK=$3 WORLD_WIDE_LUN_NAME=$5 ALLOCATION_POLICY=DEMAND"
EXEC_TYPE="PLAIN"
;;
"DUMPSNAPS")
CMD_RUN="LS VDISK"
CMD_GREP="childvdiskname"
EXEC_TYPE="MULTIGREP2"
;;
"PRESENT")
CMD_RUN="ADD LUN 0 VDISK=$3 HOST=$4"
EXEC_TYPE="PLAIN"
;;
"UNPRESENT")
CMD_RUN="DELETE LUN $3"
EXEC_TYPE="PLAIN"
;;
"DEL")
CMD_RUN="DELETE VDISK $3 WAIT_FOR_COMPLETION"
EXEC_TYPE="PLAIN"
;;
"DISKGROUP")
CMD_RUN="LS DISK_GROUP $3"
EXEC_TYPE="CUSTOMGREP"
;;
*)
echo "Error, comanda desconeguda"
exit -1
;;

esac;

#echo "CMD_RUN: $CMD_RUN"
#echo "EXEC_TYPE $EXEC_TYPE"

case $EXEC_TYPE in
"GREP")
$SSSU "$CMD_LOGIN" "$CMD_SYSTEM" "$CMD_RUN" | grep $CMD_GREP | cut -f2 -d':' | cut -f2 -d' '
;;
"GREP-")
$SSSU "$CMD_LOGIN" "$CMD_SYSTEM" "$CMD_RUN" | grep $CMD_GREP | cut -f2 -d':' | cut -f2 -d' ' | tr -d '-'
;;
"CUSTOMGREP")
$SSSU "$CMD_LOGIN" "$CMD_SYSTEM" "$CMD_RUN" | grep $4 | head -n1 | cut -f2 -d':' | cut -f2 -d' ' | tr -d '-'
;;
"MULTIGREP")
res=`$SSSU "$CMD_LOGIN" "$CMD_SYSTEM" "$CMD_RUN"`

status="-"
for line in $res; do
case $status in
"-")
count_grep_num=1
for CMD_GREP in $CMD_GREPS; do
if [ "" = "" ]; then
status="GREP";
count_grep=1
CMD_GREP_NUM=`echo $CMD_GREPS_NUM | cut -f$count_grep_num -d' '`
fi;
count_grep_num=$((count_grep_num + 1))
done;
;;
"GREP")
if [ $count_grep -eq $CMD_GREP_NUM ]; then
val=$val" "$line
status="-"
else
count_grep=$(($count_grep + 1))
fi;
;;
esac;
done;

echo $val
;;
"MULTIGREP2")
current_grep=$CMD_GREP;
current_vdisk=$3
while [ "" != "" ]; do
CMD_RUN2="$CMD_RUN $current_vdisk"
res=`$SSSU "$CMD_LOGIN" "$CMD_SYSTEM" "$CMD_RUN2" | grep "$current_grep" | cut -f2 -d':' | cut -f2- -d' ' `

newvdisk=`echo $res | awk -F'\' '{print $NF}'`
current_vdisk=$newvdisk

if [ "" != "" ]; then
if [ "" != "" ]; then
out=$out$newvdisk" "
fi;
fi;
done;
echo $out
;;
"PLAIN")
$SSSU "$CMD_LOGIN" "$CMD_SYSTEM" "$CMD_RUN"
;;
"TEST")
echo $SSSU "$CMD_LOGIN" "$CMD_SYSTEM" "$CMD_RUN"
;;
esac;

rm $HPEVA_HOME/bin/logs/*

Espero que os sea útil. En nuestra organización realizamos todo el sistema de backups basado en snapshots usando como base este script para dialogar con la cabina. Otro dia colgaré el script de backup por si tambien os puede ser útil.

Add comment


Security code
Refresh