L'ensemble des scripts et bibliothèques bash utilisés pour maintenir l'infrastructure du Tetalab. Ce socle Bash est une version légère et adaptée du socle Bash essentiellement développé par Emmanuel Confrère, éminent DBA Calédonien.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
socle_bash/bin/transfert.sh

163 lines
5.8 KiB

#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : expl_transfert_files.sh
# Auteur : Doug Le Tough
# Date : 22-07-2017
# Version : 1.0.0
# Objet : Permet le transfert de répertoires entre VM
#
#------------------------------------------------------------------------------------------------------------------
# Mise a jour :
#
# 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production
#
#------------------------------------------------------------------------------------------------------------------
# Dependances : Aucune
#
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# @OPT: o:src_host:src_host:1/1::::
# @OPT: o:dst_host:dst_host:1/1::::
# @OPT: o:src_dir:src_dir:1/1::::
# @OPT: o:dst_dir:dst_dir:1/1::::
# @OPT: f:recursive:recursive:1/1:false:::
# @OPT: f:create:create:1/1:false:::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> expl_transfert_files.sh -src_host <VM1> -dst_host <VM2> -src_dir <DIR1> -dst_dir <DIR2>
##
## ex: expl_transfert_files.sh -src_host marian -dst_host jimmy -src_dir /etc/httpd -dst_dir /home/doug [-recursive true] [-create true]
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur sousetsuken
##
## Fonctionnement:
## ---------------
## Récupère sur sousetsuken depuis src_host le contenu du répertoire src_dir et le copie dans le répertoire dst_dir
## sur dst_host
##
## Si l'option facultative -recursive est positionnée à true, la récupération sera récursive.
## Par défaut cette option vaut false.
##
## Si l'option facultative -create est positionnée à true, le répertoire de destination sera créé.
## Par défaut cette option vaut false.
##
## Si le répertoire de destination n'existe pas et l'option -create ne vaut pas true, le script remontera une erreur.
##
##
##-----------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------
# Initialisation de l'environement
#------------------------------------------------------------------------------------------------------------------
if [ "${USER}" != "asr" ]; then
ERROR="Seul l'utilisateur asr peut utiliser ce script"
echo -e "\033[91m${ERROR}\033[0m"
exit 1
fi
source /etc/profile.d/tetalab.sh
if [ ! -f ${NC_EXPL_CFG}/init.conf ]; then
echo "Le fichier d'initialisation du socle \${NC_EXPL_CFG}/init.conf n'éxiste pas !"
echo "Arrêt du script par sécurité"
exit 250
fi
source ${NC_EXPL_CFG}/init.conf
##################################################################################
#
# Main
#
##################################################################################
# controle de l'utilisateur
if [ ! ${USER} == "asr" ]; then
rouge "Seul l'utilisateur asr peut utiliser ce script"
exit 1
fi
# Controle du nombre d'arguments
if [ ! $# -eq 2 ]; then
usage
exit 1
fi
# Controle de la validité des arguments
if [ ! $(expr index $1 ':/') -gt 0 ] || [ ! $(expr index $2 ':/') -gt 0 ]; then
rouge "Erreur dans les arguments."
usage
exit 1
fi
SOURCE_HOST=$(echo $1 | cut -d: -f1)
DEST_HOST=$(echo $2 | cut -d: -f1)
SOURCE_PATH=$(echo $1 | cut -d: -f2)
DEST_PATH=$(echo $2 | cut -d: -f2)
# Génère une chaine aléatoire
RND=$(dd if=/dev/urandom bs=3 count=40 2>/dev/null | md5sum | cut -d' ' -f1)
# Le nom de l'archive contenant les documents à récupérer
ARCHIVE_NAME=${RND}.tgz
jaune "Récupération sur ${SOURCE_HOST} de ${SOURCE_PATH} et copie vers ${DEST_HOST} vers ${DEST_PATH}:"
jaune "Création de l'archive distante ${TETALABTMP}/${ARCHIVE_NAME}"
ssh ${SOURCE_HOST} "sudo tar -cvzf ${TETALABTMP}/${ARCHIVE_NAME} ${SOURCE_PATH}"
if [ ! $? -eq 0 ]; then
rouge "Erreur lors de la création de l'archive ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} à partir de ${SOURCE_PATH}"
delete_archive
exit 1
fi
jaune "Modification des droits et permissions sur l'archive ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME}:"
ssh ${SOURCE_HOST} "sudo chown -v asr: ${TETALABTMP}/${ARCHIVE_NAME}"
if [ ! $? -eq 0 ]; then
rouge "Erreur lors de la modification des droits et permissions sur l'archive $SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME}"
delete_archive
exit 1
fi
jaune "Rappatriement de l'archive distante ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} sur $(hostname)"
scp ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} ${TETALABTMP}/${ARCHIVE_NAME}
if [ ! $? -eq 0 ]; then
rouge "Erreur lors du rappatriement de l'archive ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} dans $(hostname):${TETALABTMP}/${ARCHIVE_NAME}"
delete_archive
exit 1
fi
jaune "Copie de l'archive locale ${TETALABTMP}/${ARCHIVE_NAME} vers ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}"
scp ${TETALABTMP}/${ARCHIVE_NAME} ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}
if [ ! $? -eq 0 ]; then
rouge "Erreur lors de la copie de l'archive locale ${TETALABTMP}/${ARCHIVE_NAME} vers ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}"
delete_archive
exit 1
fi
jaune "Extraction du contenu de l'archive ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME} dans ${DEST_HOST}:${DEST_PATH}"
ssh ${DEST_HOST} "sudo tar -C ${DEST_PATH} -xvzf ${TETALABTMP}/${ARCHIVE_NAME}"
if [ ! $? -eq 0 ]; then
rouge "Erreur lors de la copie de la décompression de l'archive ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}"
delete_archive
exit 1
fi
delete_archive
vert "Ok"
exit 0