diff options
Diffstat (limited to 'client/shared/scripts/restoreGitImage')
-rwxr-xr-x | client/shared/scripts/restoreGitImage | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/client/shared/scripts/restoreGitImage b/client/shared/scripts/restoreGitImage new file mode 100755 index 00000000..1817108e --- /dev/null +++ b/client/shared/scripts/restoreGitImage @@ -0,0 +1,111 @@ +#!/bin/bash +#/** +#@file restoreGitImage +#@brief Script de ejemplo para restaurar una imagen. +#@param $1 Repositorio (CACHE, REPO o dirección IP) +#@param $2 Nombre canónico de la imagen (sin extensión) +#@param $3 Número de disco +#@param $4 Número de particion +#@param $5 Protocolo (GIT) +#@param $6 Opciones del protocolo [str_modo_git:str_modo_acl] str_modo_git=clone|checkout str_modo_acl:total|sync +#@exception OG_ERR_FORMAT 1 formato incorrecto. +#@exception OG_ERR_NOTFOUND 2 cambio de repositorio: repositorio no encontrado +#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados. +#@exception $OG_ERR_MCASTRECEIVERFILE 57 Error en la recepción Multicast de un fichero +#@exception $OG_ERR_PROTOCOLJOINMASTER 60 Error en la conexión de una sesión Unicast|Multicast con el Master +#@version 1.2 - Primera versión. Se parte de los script de UGR y de restoreImage de OpenGnsys +#@date 2020/01/08 +#**/ + +TIME1=$SECONDS +PROG="$(basename $0)" + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$PROG" "$PROG CACHE imagen ndisk npart GIT [ git_mode:acl_mode ]" \ + "$PROG CACHE Ubuntu20 1 2 GIT clone:total" \ + "$PROG CACHE Windows20 1 1 GIT checkout:user" + exit 0 +fi + +# Controlamos el número de parámetros. +if [ $# -lt 4 ]; then + ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG CACHE imagen ndisco nparticion GIT [ git_mode:acl_mode ]" + exit $? +fi + +#Load engine configurator from engine.cfg file. +#Carga el configurador del engine desde el fichero engine.cfg +[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg + +# Clear temporary file used as log track by httpdlog +# Limpia los ficheros temporales usados como log de seguimiento para httpdlog +echo " " > $OGLOGCOMMAND +ogCheckStringInGroup "$(ogGetCaller)" "deployGitImage restoreGitImageCustom" || echo -n "" > $OGLOGSESSION; + +ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*" + +# Procesar parámetros de entrada +REPO="${1^^}" +IMGNAME="$2" +DISK="$3" +PART="$4" +PROTOOPT="${6:-clone:total}" +GITMODE=${PROTOOPT%:*} +ACLMODE=${PROTOOPT#*:} + +# El protocolo tiene que se GIT +[ "${5^^}" == "GIT" ] || ogRaiseError $OG_ERR_FORMAT "único protocolo permitido GIT" || exit $? + +# Comprobamos que el modo de Git es correcto +ogCheckStringInGroup "$GITMODE" "clone checkout" || ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: str_git_mode:clone|checkout" || exit $? + +# Si es una ip y es igual a la del equipo restaura desde cache +[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE" +[ "$REPO" == "CACHE" ] || ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT Solo permitido desde cache" || exit $? + +# Comprobamos que la partición se pueda montar. Si no modo total (formateo) +MNTDIR=$(ogMount $DISK $PART) || GITMODE="clone" + +TIME2=$SECONDS +if [ "$GITMODE" == "checkout" ]; then + # comprobamos que la partición contenga la imagen. Si no modo clone + cd $MNTDIR + git branch| grep "[ *] ${IMGNAME}$" &>/dev/null + + if [ $? -eq 0 ]; then + # Revertimos la partición a la situación inicial de git + ogEcho log session "ogSyncLocalGitImage $DISK $PART" + ogSyncLocalGitImage $DISK $PART + else + GITMODE="clone" + fi +fi + +if [ "$GITMODE" == "clone" ]; then + # Comprobar que exista la imagen la cache + ogExistGitImage CACHE "$IMGNAME" || ogRaiseError session $OG_ERR_NOTFOUND "CACHE $IMGNAME" || exit + + # Las ACL se deben restaurar completas + ACLMODE="total" + + # Procesar protocolos de transferencia. + ogGitConfig + + # Restauramos datos (formatea la partición) + ogEcho log session "ogRestoreLocalGitImage $IMGNAME $DISK $PART" + ogExecAndLog command ogRestoreLocalGitImage $IMGNAME $DISK $PART || exit $? +fi +TIME2=$[SECONDS-TIME2] +ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL ogSyncLocalGitImage/ogRestoreLocalGitImage $[TIME2/60]m $[TIME2%60]s" + +TIME3=$SECONDS +# Restauramos ACL +# Nota: al restaurar las acl da falsos errores, no podemos controlar el error. +ogEcho log session "ogRestoreGitAcl $IMGNAME $DISK $PART $ACLMODE" +ogExecAndLog command ogRestoreGitAcl $IMGNAME $DISK $PART $ACLMODE +TIME3=$[SECONDS-TIME3] +ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL ogRestoreGitAcl $[TIME3/60]m $[TIME3%60]s" + +TIME=$[SECONDS-TIME1] +ogEcho log session "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" |