"Ajout expl_transfert_dir.sh"

This commit is contained in:
Doug Le Tough 2017-07-22 13:22:19 +02:00
parent ff979be0fb
commit 031d8db355
4 changed files with 436 additions and 1 deletions

View File

@ -24,7 +24,6 @@
# @OPT: o:domain:domain:1/1::::
# @OPT: f:backend_host:backend_host:1/1::::
# @OPT: o:backend_port:backend_port:1/1::::
# @OPT: f:enable_vhost:enable_vhost:1/1:false:::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:

270
bin/expl_transfert_dir.sh Normal file
View File

@ -0,0 +1,270 @@
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : expl_transfert_dir.sh
# Auteur : Doug Le Tough
# Date : 22-07-2017
# Version : 1.0.0
# Objet : Permet le transfert de répertoire 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:::
# @OPT: f:dst_user:dst_user:1/1:asr:::
# @OPT: f:dst_group:dst_group:1/1:asr:::
# @OPT: f:dst_mode:dst_mode:1/1:755:::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> expl_transfert_dir.sh -src_host <VM1> -dst_host <VM2> -src_dir <DIR1> -dst_dir <DIR2> [-recursive true] [-create true] [-dst_user <USER>] [-dst_group <GROUP>] [-dst_mode <MODE>]
##
## ex: expl_transfert_dir.sh -src_host marian -dst_host jimmy -src_dir /etc/httpd -dst_dir /home/doug -recursive true -create true -dst_user doug -dst_group wheel -dst_mode 644
##
## 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 si l'option -create ne vaut pas true, le script remontera
## une erreur.
##
## Si le répertoire de destination existe et l'option -create vaut true, le transfert aura lieu normalement.
##
## Tous les noms de répertoires doivent être des chemins absolus.
##
## Les options -dst_user, -dst_group et -dst_mode permettent de gérer les droits et permissions sur le
## répertoire copié
##
##-----------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------
# 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
#
##################################################################################
function check_hosts
{
for HOST in ${src_host} ${dst_host}
do
if [ $(host ${HOST} | grep "Host ${HOST} not found: 3(NXDOMAIN)" | wc -l) -eq 1 ]; then
ERROR="${HOST} n'est pas un nom d'hôte valide"
fct_erreur 2
fi
done
}
function check_dirs
{
fct_message "Vérification du répertoire source ${src_dir} sur ${src_host}" -color jaune
if [ $(ssh ${src_host} "sudo find ${ROOT_SRC_DIR} -maxdepth 1 -type d -name ${BASE_SRC_DIR} | wc -l") -eq 0 ]; then
ERROR="Le répoertoire ${src_host}:${src_dir} n'existe pas"
fi
if [ "${create}" != "true" ]; then
fct_message "Vérification du répertoire destination ${dst_dir} sur ${dst_host}" -color jaune
if [ $(ssh ${dst_host} "sudo find ${ROOT_DST_DIR} -maxdepth 1 -type d -name ${BASE_DST_DIR} | wc -l") -eq 0 ]; then
ERROR="Le répoertoire ${dst_host}:${dst_dir} n'existe pas"
fi
fi
}
function create_dst_dir
{
fct_message "Création du répertoire de destination ${dst_host}:${dst_dir}" -color jaune
ssh ${dst_host} "sudo mkdir -p ${dst_dir}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création du répertoire de destination"
fct_erreur 2
fi
}
function get_src_archive
{
fct_message "Création de l'archive /tmp/${ARCHIVE_NAME} du répertoire du répertoire ${src_host}:${src_dir}" -color jaune
TAR_OPTIONS="--no-recursive"
if [ "${recursive}" == "true" ]; then
fct_message " * Option d'archivage récursif activée"
TAR_OPTIONS=""
fi
ssh ${src_host} "sudo tar -C ${ROOT_SRC_DIR} ${TAR_OPTIONS} -cvzf /tmp/${ARCHIVE_NAME} ${BASE_SRC_DIR}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de l'archive du répertoire source (1)"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
ssh ${src_host} "sudo chown asr: /tmp/${ARCHIVE_NAME}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de l'archive du répertoire source (2)"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
fct_message "Récupération de l'archive /tmp/${ARCHIVE_NAME} depuis ${src_host}" -color jaune
scp ${src_host} /tmp/${ARCHIVE_NAME} /tmp
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la récupération de l'archive du répertoire source"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function cp_archive
{
fct_message "Copie de l'archive locale /tmp/${ARCHIVE_NAME} vers ${dst_host}:/tmp/${ARCHIVE_NAME}" -color jaune
scp /tmp/${ARCHIVE_NAME} ${dst_host}:/tmp/${ARCHIVE_NAME}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la copie de l'archive"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function untar_archive
{
fct_message "Décompression de l'archive /tmp/${ARCHIVE_NAME} vers ${dst_host}:${dst_dir}" -color jaune
ssh ${dst_host} "sudo tar -C ${dst_dir} -xvzf /tmp/${ARCHIVE_NAME}"
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la décompression de l'archive"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function set_rights
{
fct_message "Application des droits ${dst_user}:${dst_group} sur ${dst_host}:${dst_dir}" -color jaune
ssh ${dst_host} "sudo chown -R ${dst_user}:${dst_group} ${dst_dir}"
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'application des droits"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function set_permissions
{
fct_message "Application des permission ${dst_mode} sur ${dst_host}:${dst_dir}" -color jaune
ssh ${dst_host} "sudo chmod -R ${dst_mode} ${dst_dir}"
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'application des permissions"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function rm_archives
{
fct_message "Suppression de l'archive /tmp/${ARCHIVE_NAME} sur ${src_host}" -color jaune
ssh ${src_host} "sudo rm -Rf /tmp/${ARCHIVE_NAME}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la suppression de l'archive"
fct_erreur 2
fi
fct_message "Suppression de l'archive locale /tmp/${ARCHIVE_NAME}" -color jaune
sudo rm -Rf /tmp/${ARCHIVE_NAME}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la suppression de l'archive"
fct_erreur 2
fi
fct_message "Suppression de l'archive /tmp/${ARCHIVE_NAME} sur ${dst_host}" -color jaune
ssh ${dst_host} "sudo rm -Rf /tmp/${ARCHIVE_NAME}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la suppression de l'archive"
fct_erreur 2
fi
}
#-----------------------------------------------------------------------
# Traitement
#-----------------------------------------------------------------------
ROOT_SRC_DIR=$(dirname ${src_dir})
BASE_SRC_DIR=$(basename ${src_dir})
ROOT_DST_DIR=$(dirname ${dst_dir})
BASE_DST_DIR=$(basename ${dst_dir})
# 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
check_hosts
check_dirs
if [ "${create}" == "true" ]; then
create_dst_dir
fi
get_src_archive
cp_archive
untar_archive
set_rights
set_permissions
rm_archives
fct_erreur 0

163
bin/transfert.sh Executable file
View File

@ -0,0 +1,163 @@
#!/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

View File

@ -0,0 +1,3 @@
1 | erreur | stop | Sortie du script |
2 | erreur | stop | ${ERROR} |
3 | erreur | exec | rm_archives |