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_tmp

echo « Création d’un DUMP de base »
mysqldump rundeck >> $HOMEBACKUPDIRECTORY/backup_tmp/rundeck.sql

echo « Récupération de la liste des projets en cours… »
rm -f list_projet.tmp
rd projects list | grep -v « # » >> list_projet.tmp

lineone=`head -1 list_projet.tmp | cut -c5-100 >> list_projet.tmp`
sed -i 1s/.*/$lineone/ list_projet.tmp

echo « 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.tmp

echo « Arret de Rundeck en cours… »
sudo service rundeckd stop

echo « 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_tmp

echo « 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 $BACKUPDIRECTORY

echo « 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 stop

echo « Récupération du dernier backup »
FILETORESTORE=`ls -1t /srv/rundeckconfbackup | head -1`
cp -R $BACKUPDIRECTORY/$FILETORESTORE .
sudo tar -xf $FILETORESTORE

echo « Importation du DUMP de base »
mysql rundeck < ~/backup_tmp/rundeck.sql

echo « 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.tmp

lineone=`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/rundeck

echo « Restauration terminée »
cd ..

sudo rm -Rf ~/backup_tmp
if [ -f $FILETORESTORE ]; then
sudo rm -f $FILETORESTORE
fi