diff options
author | Irina Gómez <irinagomez@us.es> | 2021-07-04 09:25:19 +0200 |
---|---|---|
committer | Irina Gómez <irinagomez@us.es> | 2021-07-04 09:25:19 +0200 |
commit | 4e21f5b7865c6a254c573624f7a1435b5cae2f92 (patch) | |
tree | c614571cdbb00899a0b40be82b5098be9782a117 | |
parent | d113a88a8e6fe6d466a611458cfcc21ab2595520 (diff) |
#918 Scripts to create and restore git-synced images.
They follow the same procedure as monolithic images.
They use the same postconfiguration file.
-rwxr-xr-x | client/shared/scripts/createGitImage | 136 | ||||
-rwxr-xr-x | client/shared/scripts/deployGitImage | 179 | ||||
-rwxr-xr-x | client/shared/scripts/restoreGitImage | 111 | ||||
-rwxr-xr-x | client/shared/scripts/updateGitCache | 89 |
4 files changed, 515 insertions, 0 deletions
diff --git a/client/shared/scripts/createGitImage b/client/shared/scripts/createGitImage new file mode 100755 index 00000000..3bf08105 --- /dev/null +++ b/client/shared/scripts/createGitImage @@ -0,0 +1,136 @@ +#!/bin/bash + +#/** +#@file createGitImage +#@brief Script de ejemplo para crear una imagen de un sistema de archivos. +#@note La imagen se crea siempre en cache, luego puede al servidor +#@param 1 disco +#@param 2 particion +#@param 3 REPO|CACHE +#@param 4 imagen +#@param 5 message Comentario para el commit (por defecto fecha) +#@return +#@exception OG_ERR_FORMAT # 1 formato incorrecto. +#@exception OG_ERR_PARTITION # 3 Error en partición de disco o en su sistema de archivos +#@exception OG_ERR_IMAGE # 5 Error en funcion ogCreateImage o ogRestoreImage. +#@exception OG_ERR_NOTWRITE # 14 error de escritura +#@exception OG_ERR_NOTCACHE # 15 si cache no existe 15 +#@exception OG_ERR_NOTFOUND # 2 no se encuentra comando git +#@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16 +#@exception OG_ERR_REDUCEFS # 17 error al reducir sistema de archivos. +#@exception OG_ERR_EXTENDFS # 18 Errror al expandir el sistema de archivos. +#@version 1.1 - Primera versión. Se parte de los script de UGR y de createImage de OpenGnsys +#@date 2020/01/08 +#*/ ## + +PROG="$(basename $0)" +if [ $# -lt 4 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE imagen mensaje_commit" + exit $? +fi + +TIME1=$SECONDS + +#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 + +# Valores por defecto en etc/engine.cfg +DISK=$1 +PART=$2 +REPO="${3^^}" +IMGNAME="$4" +MSGCOMMIT="${5:-$(date +%Y-%m-%d)}" +GITDIR=${GITDIR:-"git"} + +# Unidad organizativa +[ "$ogunit" != "" ] && OGUNIT="$ogunit" + +# Clear temporary file used as log track by httpdlog +# Limpia los ficheros temporales usados como log de seguimiento para httpdlog +# salvo si es llamado desde createImageCustom +if [ "$(ogGetCaller)" != "createImageCustom" ]; then + echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp +fi + +ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*" + +# Si es una ip y es igual a la del equipo restaura desde cache +[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE" +# Si es una ip y es distinta a la del recurso samba cambiamos de REPO. +ogCheckIpAddress $REPO +if [ $? == 0 -o $REPO == "REPO" ] ; then + # Si falla el cambio -> salimos con error repositorio no valido + ogChangeRepo $REPO $OGUNIT || exit $(ogRaiseError $OG_ERR_NOTFOUND '$REPO'; echo $?) + REPO="REPO" +fi + +# Comprobamos que exista CACHE. Se necesita obligatoriamente +ogFindCache >/dev/null || ogRaiseError $OG_ERR_NOTCACHE "CACHE " || echo $? + +# Comprobamos que el ogLive contiene git +which git >/dev/null || ogRaiseError $OG_ERR_NOTFOUND "git command" || echo $? + +# Obtener información de los parámetros de entrada. +DEVICE=$(ogDiskToDev "$DISK" "$PART" 2>/dev/null) || exit $(ogRaiseError $OG_ERR_PARTITION "$DISK $PART"; echo $?) + +#Comprobamos acceso de escritura. +DIRTEMP=$(date +%Y%m%d-%H%M%S) +ogMakeDir $REPO /$4$DIRTEMP 2>/dev/null || exit $(ogRaiseError $OG_ERR_NOTWRITE "$REPO"; echo $?) && ogDeleteTree $REPO /$4$DIRTEMP + +echo " " > $OGLOGCOMMAND +# Borramos ficheros de paginacion y configuracion +ogCleanOs $DISK $PART + +# Con Git no podemos comprobar espacio +##Comprobar espacio que requerira la imagen para ser almacenada +#read SIZEDATA SIZEREQUIRED SIZEFREE ISENOUGHSPACE <<< $(ogGetSizeParameters $DISK $PART "$REPO" "$4") +# +#ogEcho log session "[16] $PROG: $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED $SIZEFREE" +#[ "$ISENOUGHSPACE" == "TRUE" ] || exit $(ogRaiseError session $OG_ERR_CACHESIZE "$REPO"; echo $?) + +# Comprobar consistencia del sistema de archivos. +echo " " > $OGLOGCOMMAND +SIZEFS=$(ogGetFsSize $DISK $PART) +ogEcho log session "[20] $MSG_HELP_ogCheckFs $DEVICE $SIZEFS (KB)" +ogUnmount $DISK $PART 2>/dev/null +ogCheckFs $DISK $PART || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $DISK $PART" && echo $?) + +# Si es UEFI copio el cargador de arranque a la partición +OSTYPE="$(ogGetOsType $DISK $PART)" +if ogIsEfiActive && [ "$OSTYPE" == "Windows" ]; then + ogEcho log session "[25] $MSG_HELP_ogCopyEfiBootLoader" + ogCopyEfiBootLoader $DISK $PART +fi + +# FALTA: Renombrar el fichero de imagen si ya existe ¿cómo? +# Git falta + +# Configuración del usuario de git. +ogGitConfig + +ogEcho log session "[30] $MSG_HELP_ogCreateGitAcl" +ogExecAndLog command ogCreateGitAcl $DISK $PART $IMGNAME + + +# Crear la imagen en cache. +echo " " > $OGLOGCOMMAND +TIME2=$SECONDS +ogEcho log session "[40] $MSG_HELP_ogCreateLocalGitImage ogCreateLocalGitImage $DISK $PART $IMGNAME \"$MSGCOMMIT\"" +ogExecAndLog command ogCreateLocalGitImage "$DISK" "$PART" "$IMGNAME" "$MSGCOMMIT" &>> $OGLOGCOMMAND || ogRaiseError $OG_ERR_IMAGE "$IMGNAME"|| exit $? +TIMEAUX2=$[SECONDS-TIME2] +ogEcho log session " $RESUMECREATEIMAGE " +ogEcho log session " $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s" + +# Enviar imagen a repositorio +if [ "$REPO" == "REPO" ]; then + ogEcho log session "[60] $MSG_HELP_ogPushImage ogPushImage $DISK $PART $IMGNAME" + ogExecAndLog command ogPushImage $DISK $PART $IMGNAME +fi + +# Guardamos información de la imagen +ogExecAndLog command ogSaveImageInfo $DISK $PART $REPO $IMGNAME + +TIME=$[SECONDS-TIME1] +ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" +ogEcho log session " FileSystem $DEVICE with $SIZEDATA KB data created onto branch $IMGNAME of GIT" diff --git a/client/shared/scripts/deployGitImage b/client/shared/scripts/deployGitImage new file mode 100755 index 00000000..31fcec61 --- /dev/null +++ b/client/shared/scripts/deployGitImage @@ -0,0 +1,179 @@ +#!/bin/bash +#/** +#@file deployGitImage +#@brief Proceso completo de despliegue de imagen, incluyendo actualización de la caché, restauración y post-configuración (este script es llamado por la interfaz RestaurarBaseImagen). +#@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|user +#@exception OG_ERR_FORMAT 1 formato incorrecto. +#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados. +#@exception OG_ERR_PARTITION 3 # Error en partición de disco. +#@exception OG_ERR_LOCKED 4 partición bloqueada por otra operación. +#@exception OG_ERR_IMAGE 5 error al restaurar la imagen del sistema. +#@exception OG_ERR_IMGSIZEPARTITION 30 Tamaño de la particion es menor al tamaño de la imagen. +#@exception OG_ERR_NOTCACHE No existe cache -15- +#@exception OG_ERR_CACHESIZE Tamaño de la paticion menor al archivo a descargar -16- +#@version 1.2 - primera versión basada en deployImagen y script de GIT de UGR +#@date 2020/07/07 +#**/ + + +#Descripcion: +# Si Repositorio es el global (REPO) realiza un deploy. +# Si Repositorio es local (CACHE) realiza un restoreGitImage CACHE +# El deploy, si detecta que el cliente no tiene una CACHE o no tiene espacio suficiente consulta el engine.cfg RESTOREPROTOCOLNOCACHE + + + +PROG="$(basename $0)" +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$PROG" "$PROG [REPO|CACHE] imagen ndisk npart GIT [clone|checkout]:[total|user]" \ + "$PROG REPO Ubuntu20 1 2 GIT clone:total" \ + "$PROG CACHE Windows20 1 1 GIT checkout:user" + exit 0 +fi + + +if [ $# -lt 4 ]; then + ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion GIT [opciones protocolo] ]" + exit $? +fi + +# El protocolo tiene que se GIT +[ "${5^^}" == "GIT" ] || ogRaiseError $OG_ERR_OUTOFLIMIT "$PROG: único protocolo permitido GIT" || exit $? + +# Asignación de variables (repositorio y protocolo se convierten a mayúsculas). +TIME1=$SECONDS +REPO="${1^^}" +REPO=${REPO:-"REPO"} +IMGNAME="$2" +DISK="$3" +PART="$4" +PROTO="${5^^}" +PROTOOPT="${6:-checkout:total}" + +# Unidad organizativa. +[ "$ogunit" != "" ] && OGUNIT="$ogunit" + +#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 +[ "$(ogGetCaller)" == "EjecutarScript" ] || echo -n "" > $OGLOGSESSION + +# Registro de inicio de ejecución +ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*" + +# Si el origen(pariticion) esta bloqueada salir. +ogIsLocked $DISK $PART && exit $(ogRaiseError session $OG_ERR_LOCKED "$MSG_PARTITION, $DISK $PART"; echo $?) + +#ogEcho log session "$MSG_HELP_ogUnmount $DISK $PART" +#ogUnmount $DISK $PART 2>/dev/null + +# Valor por defecto para el repositorio. +if [ "$REPO" == "$(ogGetIpAddress)" -o "$REPO" == "CACHE" ]; then + REPO="CACHE" +else + ogCheckIpAddress "$REPO" + if [ $? -eq 0 -o "$REPO" == "REPO" ]; then + # Si falla el cambio -> salimos con error repositorio no valido + ogChangeRepo $REPO ${OGUNIT} || exit $(ogRaiseError $OG_ERR_NOTFOUND "$REPO $OGUNIT"; echo $?) + REPO="REPO" + fi +fi + +# Comprobamos que existe la imagen +ogExistGitImage $REPO "$IMGNAME" || ogRaiseError log session $OG_ERR_NOTFOUND "$REPO $IMGNAME" || exit $? + +#Informacioin previa de la imagen +INFOFILE=$(ogGetPath $REPO ".$IMGNAME.img.json") +IMGSIZE=$(jq .size $INFOFILE|tr -d \") + +ogEcho log session "[1] REPO=$REPO IMG-BRANCH=$IMGNAME SIZE=$IMGSIZE (KB)" + +# Procesar repositorio. +if [ $REPO == "REPO" ]; then + ogEcho log session "[2] updateGitCache "$REPO" \"/$IMGNAME\" $PROTO $PROTOOPT" + TIME2=$SECONDS + updateGitCache "$REPO" "$IMGNAME" "$PROTO" "$PROTOOPT" + RETVAL=$? + TIME2=$[SECONDS-TIME2] + ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateGitCache $[TIME2/60]m $[TIME2%60]s" + case $RETVAL in + 0) + ogEcho log session "[50] updateGitCache (OK)" + ;; + 15|16) + # no se permite usar la cache (no existe(15) o no espacio sufiente (16). Se consulta engine.cfg para RESTOREPROTOCOLNOCACHE [ multicast unicast none ] + ogEcho log session "[50] $MSG_ERR_NOTCACHE ; $MSG_ERR_CACHESIZE " + ogEcho log session "[50] $MSG_SCRIPTS_CHECK_ENGINE: RESTOREPROTOCOLNOTCACHE=$RESTOREPROTOCOLNOTCACHE " + case $RETVAL in + 15) + ogEcho log session "[100] $MSG_ERR_NOTCACHE" + ogRaiseError session $OG_ERR_NOTCACHE "NOT CACHE" + exit $? + ;; + 16) + ogEcho log session "[100] $MSG_ERR_CACHESIZE " + ogRaiseError session $OG_ERR_CACHESIZE "CACHE FULL" + exit $? + ;; + esac # del segundo RETAVAL + ;; + *) + # Error desconocido + exit $RETVAL + ;; + esac +fi + +TIME3=$SECONDS + +# Si existe, ejecuta script personalizado "restoreImageCustom"; si no, llama al genérico "restoreImage". +if which restoreGitImageCustom &>/dev/null; then + ogEcho log session "[55] $MSG_HELP_ogRestoreGitImage: restoreGitImageCustom CACHE \"$IMGNAME\" $DISK $PART $PROTO $PROTOOPT" + restoreGitImageCustom "$IMGNAME" $DISK $PART $PROTO $PROTOOPT +else + ogEcho log session "[55] $MSG_HELP_ogRestoreGitImage: restoreGitImage CACHE \"$IMGNAME\" $DISK $PART $PROTO $PROTOOPT" + restoreGitImage CACHE "$IMGNAME" $DISK $PART $PROTO $PROTOOPT +fi +RETVAL=$? + +# Mostrar resultados. +RESUMERESTOREIMAGE=$(grep -m 1 "Total Time:" $OGLOGCOMMAND) +ogEcho log session " [ ] $RESUMERESTOREIMAGE " +# Si la transferencia ha dado error me salgo. +if [ $RETVAL -ne 0 ] ; then + ogRaiseError session $OG_ERR_IMAGE "$REPO $IMGNAME" 2>&1 + # Muestro registro de fin de ejecución si no viene de Ejecutar Script + [ "$(ogGetCaller)" == "EjecutarScript" ] || ogEcho log session "$MSG_INTERFACE_END $OG_ERR_IMAGE" + exit $OG_ERR_IMAGE +fi +TIME3=$[SECONDS-TIME3] +ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME3/60]m $[TIME3%60]s" + +# Si existe, ejecuta script personalizado de postconfiguración "configureOsCustom"; si no, llama al genérico "configureOs". +if which configureOsCustom &>/dev/null; then + ogEcho log session "[90] configureOsCustom" + configureOsCustom "$DISK" "$PART" "$REPO" "$IMGNAME" +else + ogEcho log session "[90] $MSG_SCRIPTS_OS_CONFIGURE " + configureOs "$DISK" "$PART" +fi + +TIME=$[SECONDS-TIME1] +ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" + +# Registro de fin de ejecución +# Si se ha llamado desde ejecutar script no lo muestro para no repetir. +if [ "$(ogGetCaller)" != "EjecutarScript" ] ; then + ogEcho log session "$MSG_INTERFACE_END $RETVAL" + exit $RETVAL +fi 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" diff --git a/client/shared/scripts/updateGitCache b/client/shared/scripts/updateGitCache new file mode 100755 index 00000000..8ceab2a4 --- /dev/null +++ b/client/shared/scripts/updateGitCache @@ -0,0 +1,89 @@ +#!/bin/bash +#/** +# updateGitCache +#@brief Actualiza la cache del cliente con imagen tipo git +#@param 1 REPO Origen del fichero. -accesible por nfs-samba- +#@param 2 str_fichero nombre del fichero a actualizar. +#@param 3 str_protoco. GIT +#@ejemplo: updateGitCache 172.17.36.11 imagen1 GIT +#@return +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTCACHE No existe cache -15- +#@todo si existe la imagen sólo actualizar +#@date 2019/12/19 +#*/ ## + +TIME=$SECONDS +PROG="$(basename $0)" +if [ $# -lt 3 ]; then + ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_IMGNAME GIT" + exit $? +fi + +#Carga del configurador del engine +[ -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 + +if ! [ "$(ogGetCaller)" == "deployGitImage" ]; then + echo -n "" > $OGLOGSESSION; + + # Registro de inicio de ejecución + ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*" +fi + +REPOSITORIO="${1^^}" +IMGNAME="$2" +PROTOCOLO="${3^^}" +[ "$PROTOCOLO" == "GIT" ] || ogRaiseError "$PROG: protocolo $PROTOCOLO" || exit $? +GITDIR=${GITDIR:-"git"} + +# Unidad organizativa. +[ "$ogunit" != "" ] && OGUNIT="$ogunit/" + +# Si es una ip y es distinta a la del recurso samba cambiamos de REPO. +ogCheckIpAddress $REPOSITORIO +if [ $? == 0 -o $REPOSITORIO == "REPO" ] ; then + # Si falla el cambio -> salimos con error repositorio no valido + ogChangeRepo $REPOSITORIO $OGUNIT || exit $(ogRaiseError $OG_ERR_NOTFOUND $REPOSITORIO; echo $?) + REPOSITORIO="REPO" +fi +REPOIP=$(ogGetRepoIp) +ogEcho log session $REPOSITORIO $REPOIP $PROTOCOLO $OPTPROTOCOLO + +# Si el repositorio local CACHE no existe error 15. +if ! $(ogFindCache >/dev/null); then + ogRaiseError session $OG_ERR_NOTCACHE "CACHE" + exit $? +fi + + + +# Comprobar si existe la imagen en el repo remoto +ogExistGitImage REPO "$IMGNAME" || ogRaiseError log session $OG_ERR_NOTFOUND "REPO $IMGNAME" || exit $? + +# Si no existe el directorio de git lo creamos +ogMountCache +[ -d $OGCAC$OGIMG/$GITDIR ] || mkdir $OGCAC$OGIMG/$GITDIR + +# Copiamos la información de la imagen +ogCopyFile REPO "/.$IMGNAME.img.json" CACHE / || ogRaiseError log session $OG_ERR_NOTFOUND "REPO .$IMGNAME.img.json" + +# Comprobar si existe la imagen en el repo local para actualizar o empezar de cero +#FALTA si existe en cache la actualizamos. +ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_DOUPDATE" +ogExistGitImage CACHE "$IMGNAME" && echo "La imagen ya está bajada" && exit 0 +ogEcho log session ogPullImage $IMGNAME $DISK $PART +#ogExecAndLog command ogPullImage $IMGNAME $DISK $PART +ogPullImage $IMGNAME +RETVAL=$? +[ $RETVAL -eq 0 ] || ogRaiseError log session || exit $? + +# FALTA: comprobar que ha ido bien + +TIME1=$[SECONDS-TIME] + +ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL $[TIME1/60]m $[TIME1%60]s" +TIME2=$SECONDS |