PostHeaderIcon 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

 

 

image_print

Laisser un commentaire