summaryrefslogtreecommitdiffstats
path: root/client/shared/scripts/restoreGitImage
diff options
context:
space:
mode:
authorIrina Gómez <irinagomez@us.es>2021-07-04 09:25:19 +0200
committerIrina Gómez <irinagomez@us.es>2021-07-04 09:25:19 +0200
commit4e21f5b7865c6a254c573624f7a1435b5cae2f92 (patch)
treec614571cdbb00899a0b40be82b5098be9782a117 /client/shared/scripts/restoreGitImage
parentd113a88a8e6fe6d466a611458cfcc21ab2595520 (diff)
#918 Scripts to create and restore git-synced images.
They follow the same procedure as monolithic images. They use the same postconfiguration file.
Diffstat (limited to 'client/shared/scripts/restoreGitImage')
-rwxr-xr-xclient/shared/scripts/restoreGitImage111
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"