Aller au contenu principal

Rundeck et Ansible

· 4 minutes de lecture
Stéphane ROBERT
Consultant DevOps

Nous n'avons pas tous les moyens d'utiliser Ansible Tower pour gérer notre infrastructure c'est pourquoi je me suis intéressé à Rundeck. Rundeck permet de lancer des tâches automatisées sur l'ensemble de l'infrastructure. Et pourquoi pas le coupler à Ansible via son plugin.

Utilisation de docker

Docker est le meilleur moyen pour automatiser l'installation d'un produit aussi complexe que Rundeck. En effet, la configuration de l'ensemble ansible-rundeck pour qu'il fonctionne n'est pas si simple.

Je suis parti de l'image Debian-Slim et non Alpine car près de nombreux essais la compilation d'Ansible sur Alpine n'est pas fiable. Après quelques recherches j'ai trouvé quelques exemples de configuration fonctionnant mais aucune utilisant le plugin ansible.

J'utilise ce mini-pc à la maison pour faire tourner mon instance Rundeck. En effet impossible de trouver toutes les librairies pour le mettre sur un Pi. Ce rundeck me sert à gérer la conf de mes raspberry pi.

Je vous propose d'utiliser mon repo gitlab

git clone git@gitlab.com:Bob74/rundeck-ansible.git

Quelques explications sur le fonctionnement

Dans cette configuration j'utilise mysql qui tourne aussi dans un container docker, mais je fais le choix de ne pas d'utiliser une nouvelle occurence (pas assez de mémoire sur mon poste de dev). Il suffit de suivre cette documentation pour créer la base rundeck.

Une fois la base créée, il faut modifier la config de rundeck pour indiquer où se trouve cette base. Ca se passe dans le fichier files/rundeck-config.properties.

 Database connexion
dataSource.url=jdbc:mysql://172.20.0.1:3309/rundeck?autoReconnect=true&useSSL=false
dataSource.username=rundeckuser
dataSource.password=rundeckpassword
dataSource.driverClassName=com.mysql.jdbc.Driver

Vous pouvez obtenir l'adresse de votre container mysql avec la commande suivante:

 docker inspect new-api_db_1 |grep -i gateway

            "Gateway": "",
            "IPv6Gateway": "",
                    "Gateway": "172.20.0.1",
                    "IPv6Gateway": "",

Pour changer les mots de passes et les users il faut éditer le fichier [framework.properties](https://docs.rundeck.com /docs/administration/configuration/config-file-reference.html#framework-properties) ou le fichier realm.properties.

Dans cette configuration admin permet de configurer Rundeck alors qu'user lui permet de lancer les jobs. si vous voulez brancher votre AD il faut regarder de ce coté. Dans le répertoire files j'ai mis des fichiers d'exemple.

Pour la partie persistence des données il faut utiliser plusieurs volumes :

  • data dans le cas ou n'utilise pas de Bdd comme mysql mais une une base H2
  • logs pour le stockage des logs d'exécution des jobs
  • playbooks pour le stockage de vos playbooks
  • var pour le stockage des fichiers temporaires.
  • ssh ou stocker votre clé pour vous connecter aux autres serveurs via ansible (il faudra bien sur au préalable ajouter la clé publique dans les fichiers authorized_keys du compte root sur tous vos serveurs)

Lancement de Rundeck

Il faut dans un premier temps créé les répertoires qui seront montés dans des volumes :

mkdir playbooks var data logs
 Pour afficher votre répertoire que vous ajouterez devant chaque volume
pwd
/home/bob/Projets/rundeck-perso

Il faut ensuite taper cette commande, en n'oubliant pas de modifier les chemins des volumes :

docker run --name rundeck -d -p 4440:4440 -v /home/bob/Projets/rundeck-perso/data:/var/lib/rundeck/data -v /home/bob/Projets/rundeck-perso/logs:/var/lib/rundeck/logs -v /home/bob/Projets/rundeck-perso/var:/var/rundeck -v /home/bob/Projets/rundeck-perso/playbooks:/root/playbooks -v /home/bob/Projets/rundeck-perso/ssh:/root/.ssh rundeck-perso:latest

Rundeck va se lancer en background. Pour suivre le démarrage il suffit de taper la commande suivante :

docker logs -f rundeck

Une fois que vous voyez le message vous pouvez ouvrir votre navigateur ne cliquant sur le lien affiché :

Grails application running at http://localhost:4440 in environment: production

Vous devez obtenir cet affichage :

Le user mot de passe par défaut est admin/password

Configuration de rundeck pour lancer des playbooks

Avant Je vous conseille de lire ce billet.

Il faut juste créer un projet et un job comme ceci qui permet de lancer le playbook test.yml que vous adapterez au besoin. Pour le job il faut prendre Ansible Playbook Workflow Node Step, d'indiquer où se trouve votre playbook. Dans mon exemple ca ne lance qu'une commande mysql qui va récupérer les machines de la cmdb qui sont up. Avec mon précédent billet vous pourrez lancer des playbooks sur d'autres serveurs. Vous pouvez aussi indiquez dans votre job où se trouve votre inventaire.

Sauvegardez le workflow ansible et votre job et il est prêt à être lancé.

Je vous laisse en vous disant à plus pour de nouvelles aventures.

La suite de la formation ansible dans de prochains billets.