Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== Déployer un fichier sur plusieurs serveurs ====== <label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2020/01/27 09:50// Pour copier un fichier depuis un poste vers un serveur, on peut utiliser la commande ''scp''. Cependant, quand il s'agit de copier ce fichier sur plusieurs serveurs, cela peut rapidement devenir rébarbatif. Le script suivant permet d'automatiser ces transferts. <sxh bash>#!/bin/bash ##################################################################### # # Script de déploiement de fichier sur les serveurs # # Par Nicolas THOREZ # ##################################################################### #### Déclarations des fonctions ##### # Fonction d'aide display-help() { # Affichage de l'aide echo "Aide pour deploy-file.sh" echo "" echo "Script de déploiement de fichier sur les serveurs." echo "" echo "Usage : ./deploy-file.sh [-f|--file] fichier_source [-d|--destination] serveur_de_destination [-v|--verbose]" echo "" echo "Demande d'aide : ./deploy-file.sh [-h|--help]" echo "" echo "Paramètres et arguments :" echo "" echo "-h, --help Affiche cette aide." echo "" echo "-v, --verbose Active le mode verbeux." echo "" echo "-f, --file Chemin absolu du fichier à déployer." echo " Obligatoire." echo "" echo "-d, --destination Nom du ou des serveurs sur lesquels déployer le fichier." echo " Facultatif." echo " Les noms doivent être séparés par des virgules (,)." echo " Si aucun nom n'est indiqué, le fichier sera déployer sur tous les serveurs renseignés dans le fichier ./servers.list ." echo "" exit 2 } # Fonction d'affichage verbeux et d'inscription des logs add-log() { # Variables pour la coloration syntaxique du mode verbeux GOOD="\e[92m" CRIT="\e[91m" WARN="\e[93m" INFO="\e[96m" OFF="\e[39m" # Variable date et heure DATE=$(date '+%Y/%m/%d %H:%M:%S') # Gestion des arguments pour la fonction while [[ $# -gt 0 ]] do LOG_PARAM="$1" case $LOG_PARAM in # fichier de logs -f|--file) LOG="$2" shift shift ;; # Niveau de log -l|--level) LEVEL="$2" shift shift ;; # Message -m|--message) MESSAGE="$2" shift shift ;; # Autres *) echo -e "$DATE $CRIT[CRIT]$OFF Erreur d'arguments pour la fonction$CRIT add-log$OFF. Merci de vérifier votre code." esac done # Enregistrement dans le fichier log if [ -f $LOG ] then echo "$DATE [$LEVEL] $MESSAGE" >> $LOG else touch $LOG echo "$DATE [$LEVEL] $MESSAGE" >> $LOG fi # Affichage console en cas de mode verbeux if [ "$VERBOSE" == "TRUE" ] then case $LEVEL in "GOOD") echo -e "$DATE $GOOD[GOOD]$OFF $MESSAGE" ;; "WARN") echo -e "$DATE $WARN[WARN]$OFF $MESSAGE" ;; "CRIT") echo -e "$DATE $CRIT[CRIT]$OFF $MESSAGE" ;; "INFO") echo -e "$DATE $INFO[INFO]$OFF $MESSAGE" ;; esac fi } ##### Traitement des arguments en entrée ##### while [[ $# -gt 0 ]] do PARAM="$1" case $PARAM in # aide "-h"|"--help") display-help shift ;; # mode verbeux "-v"|"--verbose") VERBOSE="TRUE" shift ;; # client "-f"|"--file") FILE="$2" shift shift ;; # projet "-d"|"--destination") DESTINATION="$2" shift shift ;; # autres options non déterminées *) display-help shift ;; esac done ##### Déclaration des variables ##### # Liste de tous les serveurs ALL_SERVERS=/usr/local/batch/servers.list # Fichier log LOG_FILE=/usr/local/batch/deploy.log add-log -f $LOG_FILE -l "INFO" -m "Début de l'exécution du script." ##### Vérification des arguments en entrée ##### # Vérification de FILE if [ -z $FILE ] then add-log -f $LOG_FILE -l "CRIT" -m "Aucun fichier source indiqué." display-help else if [ -r $FILE ] then add-log -f $LOG_FILE -l "INFO" -m "SOURCE = $FILE" else add-log -f $LOG_FILE -l "CRIT" -m "Fichier source illisible." exit 2 fi fi # Vérification de DESTINATION if [ -z $DESTINATION ] then add-log -f $LOG_FILE -l "INFO" -m "Aucun serveur spécifié, déploiement sur tous les serveurs." ALL="TRUE" else add-log -f $LOG_FILE -l "INFO" -m "CIBLE = $DESTINATION" ALL="FALSE" fi ##### Traitement ##### if [ "$ALL" == "TRUE" ] then # Déploiement sur tous les serveurs while read SERVER do # Copie du fichier sur le serveur cible scp $FILE $SERVER:$FILE > /dev/null # Vérification de la copie if [[ $? -eq 0 ]] then add-log -f $LOG_FILE -l "GOOD" -m "Fichier déployé sur $SERVER" else add-log -f $LOG_FILE -l "WARN" -m "Erreur de copie vers $SERVER" fi done < $ALL_SERVERS else # Déploiement vers les serveurs spécifiés for SERVER in `echo $DESTINATION | tr "," " "` do # Copie du fichier sur le serveur cible scp $FILE $SERVER:$FILE > /dev/null # Vérification de la copie if [[ $? -eq 0 ]] then add-log -f $LOG_FILE -l "GOOD" -m "Fichier déployé sur $SERVER" else add-log -f $LOG_FILE -l "WARN" -m "Erreur de copie vers $SERVER" fi done fi # Fin du traitement add-log -f $LOG_FILE -l "INFO" -m "Fin du déploiement"</sxh> Ce script copiera le fichier source, indiqué par le paramètre ''-f'', vers les serveurs indiqué par le paramètre ''-d'' et séparés par une vigule (exemple : ''serveur1,serveur2,serveur3''). Si aucun serveur n'est indiqué, le script utilisera le fichier servers.list comme liste de serveurs de destination. Ce fichier doit contenir un serveur par ligne. L'option ''-v'' permet d'avoir une sortie sur la console. Toutes les actions du script sont enregistrés dans le fichier deploy.log. ~~DISCUSSION~~ linux_deploy.txt Dernière modification : 2021/03/05 16:19de nekan