#!/bin/bash

# Nicolas Charbonnier 03.09.2010 contact@nicolascharbonnier.fr #
# Ce script à pour vocation de deployer n'importe quel script sur autant de servers souhaiter #
# il fonctionne de la maniere suivante #

# 1. il va copier en local le script a installer sur les servers distant depuis le serveur central via des copies rsync ou scp over ssh via des clefs #
# 2. il lancera le script en local via le tunnel ssh depuis le server central #
# 3. il supprimera le script en local #

# Autre solution :

# 1. les scripts seront sur un partage NFS / http
# 2. depuis le server central, qui se connectera en ssh via les clefs, il lancera la commande sur chaque serveur qui lancera le script en local
# 3. la liste de server sera un fichier txt a modifier en fonction de ses besoins : "ici : /root/scripts/list_servers_linux", on pourrait aussi faire appel a la fonction read pour lire le fichier txt en entree, ceci est une possibilite interessante. #

## Personnellement je prefere la seconde solution, moins intrusive, et permet de log les connections depuis le partage NFS du serveur central

## dans cet exemple nous allons travailler sur un partage NFS.
## cependant rien n'empeche de retoucher un peu le script pour travailler sur un partage HTTP en fonction de la politique de securite de l'infra ##

## Variables specifiques : A MODIFIER ##
MAIL=mail@corp.fr
ssh_key=~/.ssh/id_rsa
SERV_DEPLOY=linuxadmin.corp.fr
LIST_SERV_TO_INSTALL=/root/scripts/server_linux_liste.test
NFS_SHARE=linuxadmin.corp.fr:/repo/scripts/
HTTP_SHARE=http://linuxadmin.bnf.fr/mrepo/scripts/
MONTAGE_TEMP_CLIENT=/mnt_deploy

## Variables generales (ne pas toucher) ##

liste_serv_cible=`cat $LIST_SERV_TO_INSTALL`



## PART 1 : connection ssh sur les servers client, puis montage des NFS, lancement du script, puis demontage NFS ##
echo -e "la liste de servers cible sont : \n$liste_serv_cible"

echo " quel script voulez vous lancer ?"
read script_to_deploy

## LE SCRIPT A DEPLOYER SERA DONNER A LA REPONSE CI-DESSUS ##
## ex : testdeploy.sh

## on monte le partage NFS sur un repertoire temporaire specialement creer pour le script ##
for i in `cat $LIST_SERV_TO_INSTALL`; do ssh -i $ssh_key $i 'mkdir '$MONTAGE_TEMP_CLIENT' && mount '$NFS_SHARE $MONTAGE_TEMP_CLIENT' && sh '$MONTAGE_TEMP_CLIENT'/'$script_to_deploy'' ; done;

## puis on demonte et supprime le repertoire ##
for i in `cat $LIST_SERV_TO_INSTALL`; do ssh -i $ssh_key $i 'umount '$MONTAGE_TEMP_CLIENT' && rm -rf '$MONTAGE_TEMP_CLIENT'' ; done;

echo -e "le scripts : $script_to_deploy a ete deploye sur les serveurs suivant : \n$liste_serv_cible" | mailx -s "deploiement script de masse" $MAIL

exit