Rundeck et Ansible
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 ↗
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.
Vous pouvez obtenir l’adresse de votre container mysql avec la commande suivante:
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 :
Il faut ensuite taper cette commande, en n’oubliant pas de modifier les chemins des volumes :
Rundeck va se lancer en background. Pour suivre le démarrage il suffit de taper la commande suivante :
Une fois que vous voyez le message vous pouvez ouvrir votre navigateur ne cliquant sur le lien affiché :
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.