#!/bin/bash -e

#
# vmBackup.sh
#
# Script per il backup di un generico servizio erogato da una vm Proxmox
#

# Importa la definizione delle utilities di interesse generale
source $scriptsForBackupLocation/utilities.sh

# Importa la definizione dei messaggi di log
source $scriptsForBackupLocation/logMessages.sh

#
# Parametri
#
# caller:	nome dello script chiamante
# vm:           identificativo Proxmox della vm che eroga il
#               servizio
# serviceDataAreaPath:
#               path dell'area dati di servizio
# localServiceBufferPath:
#               path del buffer locale di servizio
# vmBackupName:
#               nome del file per il backup della vm
# dataBackupName:
#               nome del file per il backup dell'area dati di servizio
# logFileName:
#               nome del file di log all'interno del buffer locale di
#               servizio
#               credenziali di accesso alla directory remota di servizio
# remoteServiceDirCredentials:
# remoteServiceDirPath:
#               path della directory remota di servizio
# remoteBackupDirName:
#               nome della directory remota di backup
# maxNoOfBackups:
#               max numero di backup nella cartella remota di servizio
#
	
# Controlla che il numero dei parametri sia corretto
checkParams $# 11 "$(dateTime) $msgIncorrectParameterNumber \
                                        <caller> \
                                        <vm> \
                                        <serviceDataAreaPath> \
                                        <localServiceBufferPath> \
                                        <vmBackupName> \
                                        <dataBackupName> \
                                        <localFileName> \
                                        <remoteServiceDirCredentials> \
                                        <remoteServiceDirPath> \
                                        <remoteBackupDirName> \
                                        <MaxNoOfBackups> \
                                        <logFileName>"
                                        
# inizializza le variabili mnemoniche per i parametri
caller=$1
vm=$2            
serviceDataAreaPath=$3            
localServiceBufferPath=$4
vmBackupName=$5
dataBackupName=$6
logFileName=$7				
remoteServiceDirCredentials=$8			
remoteServiceDirPath=$9	
remoteBackupDirName=${10}		    
MaxNoOfBackups=${11}
            
# Traccia l'ingresso nello script
appendToLog "$(dateTime) $msgIntoTheScript" \
                         "$localServiceBufferPath/$logFileName"

# Traccia il chiamante lo script
appendToLog "$(dateTime) $msgScriptCaller $caller" \
            "$localServiceBufferPath/$logFileName"

# Traccia il nome della vm 
appendToLog "$(dateTime) $msgVmId $vm" \
            "$localServiceBufferPath/$logFileName"
                       
# acquisisce lo stato corrente della vm
currentVmStatus=$(vmStatus $vm)
            
# Traccia lo stato corrente della vm
appendToLog "$(dateTime) $msgCurrentVmStatus \
             $currentVmStatus" \
            "$localServiceBufferPath/$logFileName"
            
# ricorda lo stato della vm precedente all'inizio
# del backup
vmStatusBeforeBackuping=$currentVmStatus

# Se la vm è accesa la spegne
if test $currentVmStatus = "running"
then
   qm stop $vm
   currentVmStatus=$(vmStatus $vm)
fi

# Traccia lo stato della vm durante l'esecuzione del backup
appendToLog "$(dateTime) $msgVmStatusDuringBackup \
             $currentVmStatus" \
            "$localServiceBufferPath/$logFileName"
                       
# Effettua il backup della vm nel buffer locale di servizio
$scriptsForBackupLocation/serviceVmBackup.sh \
                                         "$vm" \
                                         "$localServiceBufferPath" \
                                         "$vmBackupName" \
                                         "$logFileName"

# Gestisce l'assenza dell'area dati di servizio
if test "$serviceDataAreaPath" != "NULL"
then
# Effettua il backup dell'are dati di servizio nel buffer locale di
# servizio
$scriptsForBackupLocation/serviceDataBackup.sh \
                                        "$serviceDataAreaPath" \
                                        "$localServiceBufferPath" \
                                        "$dataBackupName" \
                                        "$logFileName"
fi
                                        
# Ripristina lo stato della vm precedente al backup
if test $vmStatusBeforeBackuping = "running"
then
   qm start $vm
fi
                                        
# acquisisce lo stato della vm
currentVmStatus=$(vmStatus $vm)

# Traccia lo stato della vm al termine del backup
appendToLog "$(dateTime) $msgVmrStatusAfterBackup \
             $currentVmStatus" \
            "$localServiceBufferPath/$logFileName"
            
# salva il backup della vm, quello dell'area dati di servizio,
# se prevista, e il relativo file di log, contenuti nel buffer locale
# di servizio, nella directory remota di backup
$scriptsForBackupLocation/serviceBackupSaving.sh \
                                        "$remoteServiceDirCredentials" \
                                        "$remoteServiceDirPath" \
                                        "$remoteBackupDirName" \
                                        "$localServiceBufferPath" \
                                        "$logFileName"

# Traccia l'uscita dallo script
appendToLog "$(dateTime) $msgOutOfTheScript" \
            "$localServiceBufferPath/$logFileName"                                       
exit

                                        
                                  


