tuto | sauvegardez vos instances rundeck
Article publiée le 15 Août 2017
Suite à la rédaction du précédent article concernant l’installation et la configuration d’une instance rundeck (https://journaldunadminlinux.fr/tuto-installez-et-configurer-rundeck-ordonnanceur-opensource/), vous trouverez ci-dessous un outil permettant de sauvegarder entièrement votre instance rundeck.
1) Installation des prérequis
Les scripts de backups/restore que j’ai écrit utilisent le client en ligne de commande rundeck: « rd »
Installation sous Debian/Ubuntu
echo « deb https://dl.bintray.com/rundeck/rundeck-deb / » | sudo tee -a /etc/apt/sources.list
curl « https://bintray.com/user/downloadSubjectPublicKey?username=bintray » > /tmp/bintray.gpg.key
apt-key add – < /tmp/bintray.gpg.key
apt-get -y install apt-transport-https
apt-get -y update
apt-get -y install rundeck-cli
Installation sous RedHat/Centos
wget https://bintray.com/rundeck/rundeck-rpm/rpm -O bintray.repo
sudo mv bintray.repo /etc/yum.repos.d/
yum install rundeck-cli
Une fois l’installation terminée, éditez le fichier .profile du compte qui fera le backup et rajoutez y les lignes suivantes:
export RD_URL=http://<ip ou dns de votre machine rundeck>/api/20
export RD_USER=<login rundeck>
export RD_PASSWORD=<password rundeck>
2) Script de sauvegarde
Le user qui lance ce script doit avoir les privilèges root (sudo)
Ci-dessous un script de sauvegarde:
#!/bin/bash
# Variables utiles
DATE=`date +%Y%m%d`# répertoire où les sauvegardes seront déposées
BACKUPDIRECTORY= » »# Repertoire home du user qui fera les backups
HOMEBACKUPDIRECTORY= »/ »
mkdir backup_tmpecho « Création d’un DUMP de base »
mysqldump rundeck >> $HOMEBACKUPDIRECTORY/backup_tmp/rundeck.sqlecho « Récupération de la liste des projets en cours… »
rm -f list_projet.tmp
rd projects list | grep -v « # » >> list_projet.tmplineone=`head -1 list_projet.tmp | cut -c5-100 >> list_projet.tmp`
sed -i 1s/.*/$lineone/ list_projet.tmpecho « Sauvegarde des projets en cours… »
while read PROJET
do
rd jobs list -f $HOMEBACKUPDIRECTORY/backup_tmp/jobs_$PROJET.xml -p $PROJET 2> /dev/null
done < list_projet.tmp
rm -f list_projet.tmpecho « Arret de Rundeck en cours… »
sudo service rundeckd stopecho « Copie des répertoires logs et data »
sudo cp -r /var/lib/rundeck/data $HOMEBACKUPDIRECTORY/backup_tmp
sudo cp -r /var/lib/rundeck/logs $HOMEBACKUPDIRECTORY/backup_tmp
sudo cp -r /var/rundeck $HOMEBACKUPDIRECTORY/backup_tmpecho « Démarrage de Rundeck en cours… »
sudo service rundeckd start
sudo tar -czvf backuprundeck$DATE.tar.gz backup_tmp/*echo « Déplacement du backup vers le serveur NFS »
sudo mv backuprundeck$DATE.tar.gz $BACKUPDIRECTORYecho « Suppression du répertoire temporaire »
sudo rm -Rf backup_tmp
3) Script de restauration
#!/bin/bash
# répertoire où les sauvegardes sont déposées
BACKUPDIRECTORY= » »echo « Arret de rundeck »
sudo service rundeckd stopecho « Récupération du dernier backup »
FILETORESTORE=`ls -1t /srv/rundeckconfbackup | head -1`
cp -R $BACKUPDIRECTORY/$FILETORESTORE .
sudo tar -xf $FILETORESTOREecho « Importation du DUMP de base »
mysql rundeck < ~/backup_tmp/rundeck.sqlecho « Démarrage de rundeck »
sudo service rundeckd start# Rundeck est long à démarrer…
sleep 90# Purge de tout les projets avant une resto propre
echo « Purge de la conf rundeck en cours… »
rd projects list | grep -v « # » >> list_projet.tmplineone=`head -1 list_projet.tmp | cut -c5-100 >> list_projet.tmp`
sed -i 1s/.*/$lineone/ list_projet.tmp
while read file
do
PROJET=`echo $file | cut -d « _ » -f2 | cut -d « . » -f1` 2>/dev/null
rd projects delete -p $PROJET -y 2>/dev/null
done < list_projet.tmp
rm -f list_projet.tmp
# On récupère le nom du projet via le nom du fichier XML et pour on importe le ou les jobs
cd ~/backup_tmp
for file in `ls *.xml`
do
PROJET=`echo $file | cut -d « _ » -f2 | cut -d « . » -f1`
echo « Restauration du projet $PROJET »
rd projects create -p $PROJET 2>/dev/null
rd jobs load -f $file -p $PROJET 2>/dev/null
done
# On recopies le répertoire /var/lib/rundeck ainsi que les logs des JOBS
echo « Copie des logs en cours »
sudo cp -R ~/backup_tmp/logs /var/lib/rundeck
echo « Copie des datas en cours »
sudo cp -R ~/backup_tmp/data /var/lib/rundeck && sudo chown -R rundeck:rundeck /var/lib/rundeck
sudo cp -R ~/backup_tmp/rundeck /var/ && sudo chown -R rundeck:rundeck /var/rundeckecho « Restauration terminée »
cd ..sudo rm -Rf ~/backup_tmp
if [ -f $FILETORESTORE ]; then
sudo rm -f $FILETORESTORE
fi