Objectifs
- Comprendre le rôle d’Ansible dans une chaîne d’outils DevOps et sa différence avec Terraform.
- Découvrir l’architecture “sans agent” d’Ansible.
- Écrire un inventaire pour lister les machines à gérer.
- Écrire un playbook simple pour exécuter une série de tâches sur ces machines.
Ansible vs. Terraform : Deux outils complémentaires
- Terraform est un outil de provisionnement. Son rôle est de créer l’infrastructure de base : les serveurs, les réseaux, les bases de données…
- Ansible est un outil de gestion de configuration. Son rôle est de configurer des serveurs existants : installer des logiciels, déployer une application, gérer des fichiers de configuration, démarrer des services…
Le workflow typique est d’utiliser Terraform pour créer un serveur, puis d’utiliser Ansible pour le configurer.
L’architecture “sans agent”
C’est la grande force d’Ansible. Vous n’avez rien à installer sur les serveurs que vous voulez gérer (les “nœuds cibles”). Ansible fonctionne en se connectant à vos machines via SSH et en exécutant des petits scripts Python temporaires pour effectuer les tâches.
Cela le rend très léger et facile à mettre en place.
Les concepts clés d’Ansible
1. L’inventaire (Inventory)
C’est un fichier texte (au format INI ou YAML) qui liste les serveurs que vous souhaitez gérer. Vous pouvez les regrouper pour appliquer des configurations différentes.
Fichier inventory.ini :
[webservers]
server1.exemple.com
server2.exemple.com
[dbservers]
db1.exemple.com
2. Le Playbook
C’est un fichier YAML qui décrit une série de tâches à exécuter sur un groupe de serveurs. Il se lit comme une “pièce de théâtre” (un “play”).
3. La Tâche (Task) et le Module
Chaque tâche dans un playbook est une action individuelle. Elle utilise un module Ansible, qui est un outil spécialisé pour une action précise.
- Module
apt: Gère les paquets sur Debian/Ubuntu. - Module
copy: Copie un fichier vers la machine cible. - Module
service: Gère un service (démarrer, arrêter…).
Exemple : Installer Nginx sur des serveurs web
Ce playbook va se connecter à tous les serveurs du groupe webservers et s’assurer que Nginx est installé et démarré.
Fichier playbook.yml :
- name: Installer et configurer un serveur web Nginx
hosts: webservers # Cible les serveurs du groupe [webservers] de l'inventaire
become: true # Exécute les tâches avec des privilèges root (via sudo)
tasks:
- name: S'assurer que Nginx est installé à la dernière version
ansible.builtin.apt:
name: nginx
state: latest
update_cache: yes
- name: S'assurer que le service Nginx est démarré et activé au boot
ansible.builtin.service:
name: nginx
state: started
enabled: yes
Lancer le playbook
La commande ansible-playbook exécute le playbook.
-i: Spécifie le fichier d’inventaire.
ansible-playbook -i inventory.ini playbook.yml
Ansible va se connecter en SSH à server1 et server2, exécuter les tâches, et vous afficher un résumé des changements.
L’idempotence
C’est un concept clé. Les modules Ansible sont idempotents : si vous lancez le playbook ci-dessus une deuxième fois, Ansible verra que Nginx est déjà installé et que le service tourne déjà. Il ne fera aucun changement. Un playbook idempotent ne modifie le système que si c’est nécessaire pour atteindre l’état désiré.
Bonnes pratiques
- Rendez vos playbooks idempotents. C’est le comportement par défaut de la plupart des modules, mais il faut y faire attention lorsque vous écrivez des tâches plus complexes.
- Utilisez des “rôles” (Ansible Roles) pour organiser vos playbooks en structures réutilisables et partageables.
- Stockez les données sensibles (mots de passe, clés) dans Ansible Vault, un outil de chiffrement intégré.
Exercices
-
Installez Ansible :
- Suivez les instructions sur le site officiel. Sur la plupart des systèmes Linux, c’est
sudo apt install ansibleousudo dnf install ansible.
- Suivez les instructions sur le site officiel. Sur la plupart des systèmes Linux, c’est
-
Créez votre premier inventaire :
- Créez un fichier
inventory.iniet ajoutez-y une section[local]avec une seule ligne :localhost ansible_connection=local. Cela permet à Ansible de s’exécuter sur votre propre machine.
- Créez un fichier
-
Ping de test :
- Écrivez un playbook
ping.ymlqui ciblelocalet utilise le modulepingpour vérifier la connexion.- name: Test de connexion hosts: local tasks: - name: Ping la machine locale ansible.builtin.ping: - Lancez-le avec
ansible-playbook -i inventory.ini ping.yml. Vous devriez voir une sortie “SUCCESS” avec “pong”.
- Écrivez un playbook
-
Installez un paquet :
- Écrivez un playbook
install.ymlqui ciblelocalet utilise le moduleapt(oudnf/yumselon votre système) pour installer un paquet simple commehtop. N’oubliez pasbecome: true. - Lancez le playbook. Il vous demandera probablement votre mot de passe
sudo. - Vérifiez que
htopest bien installé. - Relancez le playbook et observez qu’Ansible ne fait aucun changement.
- Écrivez un playbook