Automatiser avec Ansible
C'est quoi Ansible ?
Ansible est un outil d'automatisation informatique (créé par Red Hat). Imaginons que l'on est le chef d'orchestre, et que nos serveurs sont les musiciens. Au lieu d'aller voir chaque musicien un par un pour lui dire quoi jouer (taper des commandes à la main), on leur distribue une partition. Ils la lisent et jouent tous en rythme.
Les 3 grands principes d'Ansible
-> Sans agent (Agentless) : Son utilité première, on a pas besoin d'installer un logiciel "Ansible" sur nos PC cible (un Proxmox, pfSense ou encore Debian). Ansible se connecte simplement à eux via SSH.
-> Idempotent : Ça signifie : "Si c'est déjà fait, ne touche à rien". Donc si on demande à Ansible "Installe le serveur web Nginx", il va d'abord vérifier. S'il n'y est pas, il l'installe. S'il y est déjà, il dit "OK, je passe à la suite". On pourrait lancer le script 100 fois, ça ne cassera jamais le serveur.
-> Le format YAML : Les instructions (les "Playbooks") sont écrites en YAML, un langage très lisible par les humains.
Le vocabulaire de base
-> Le Control Node : Notre PC personnel (celui depuis lequel on lance Ansible).
-> L'Inventory (Inventaire) : Un simple fichier texte où on liste les adresses IP de nos serveurs.
-> Les Playbooks : Nos scripts/recettes qui décrivent ce que l'on veux configurer.
Utiliser Ansible proprement
Pour préparer son installation avec Ansible, on doit préparer trois fichiers de base pour faire fonctionner le tout
Le fichier Inventaire (inventory.yml ou hosts)
Comme dit plus tôt, c'est le fichier ou l'on liste les adresses IP et qui permet de regrouper les serveurs pour ne cibler que certaines machines.
* Exemple de groupes : serveurs_web, bases_de_donnees, hyperviseurs.
Les Modules
On y ajoute les "outils" intégrés à Ansible qui nous permettrons d'interagir avec le système.
* apt ou yum : Pour gérer les paquets/logiciels.
* service ou systemd : Pour démarrer/arrêter des services.
* copy ou template : Pour envoyer et modifier des fichiers de configuration.
* user : Pour créer des comptes utilisateurs.
Le Playbook (script.yml)
C'est la que tout se joue donc. Elle est écrite en YAML et regroupe une liste de "Tasks" (tâches) qui font appel aux modules pour configurer les serveurs de l'inventaire.
Le Flux de Travail (Workflow)
- Préparation SSH : On génère une clé SSH sur le "Control Node" et on l'envoie sur les serveurs cibles pour permettre une connexion sans mot de passe.
- Écriture : On rédige l'Inventaire et le Playbook.
- Test de connexion : On vérifie qu'Ansible voit bien tout le monde avec la commande :
ansible all -m ping -i inventory.yml - Exécution : On lance le déploiement général avec la commande :
ansible-playbook -i inventory.yml script.yml
Simple