Introduction
Dans le lab précédent, vous avez exécuté une seule commande (ansible ... -m ping). Cette méthode est utile pour effectuer des vérifications rapides, mais la véritable puissance d’Ansible réside dans les playbooks.
Un playbook est un fichier texte qui contient des instructions d’automatisation. Contrairement à un script shell classique, un playbook se concentre généralement sur l’état final souhaité plutôt que sur chaque commande exécutée à bas niveau.
Ce modèle fondé sur l’état souhaité est l’une des notions les plus importantes d’Ansible. Au lieu d’indiquer « exécuter exactement ces commandes », vous décrivez généralement la condition qui doit être vraie à la fin de l’automatisation.
Les playbooks sont écrits en YAML, un format de données lisible par les humains. Cela facilite la relecture, le partage et la maintenance de l’automatisation.
Dans ce lab, vous allez rédiger un playbook qui transforme un serveur en serveur web en :
- installant Nginx (un serveur web très répandu) ;
- vérifiant que le service Nginx est en cours d’exécution.
Vous exécuterez ensuite ce playbook pour configurer votre machine locale.
Créer le fichier du playbook
Commencez par créer le fichier du playbook. Par convention, le playbook principal est souvent nommé site.yml.
Vérifiez d’abord que vous vous trouvez dans le répertoire du projet :
cd ~/project
Créez ensuite un fichier nommé site.yml et ouvrez-le avec l’éditeur de texte nano :
nano site.yml
Tout en haut du fichier, saisissez trois tirets. Ils marquent le début d’un document YAML.
---
Règles YAML à retenir :
- L’indentation est essentielle ! Utilisez des espaces (généralement 2), et non des tabulations. Si l’indentation est incorrecte, Ansible signalera une erreur.
- Enregistrez souvent le fichier. Dans
nano, appuyez surCtrl+O, puis surEntréepour enregistrer, mais laissez le fichier ouvert pour les étapes suivantes.
Définir le play
Un playbook se compose d’un ou de plusieurs « plays ». Un play associe un groupe d’hôtes aux tâches que vous souhaitez exécuter sur ces hôtes.
Cette association entre un groupe d’hôtes et des tâches permet au même playbook de s’appliquer aussi bien à une seule machine qu’à plusieurs. La logique reste centralisée, tandis que l’inventaire détermine où elle s’applique.
Dans votre fichier site.yml, ajoutez les lignes suivantes sous ---.
---
- hosts: webservers
become: yes
Comprendre le code :
- hosts: webservers: indique à Ansible « exécuter ces instructions sur chaque serveur répertorié dans le groupe[webservers]de mon inventaire ».become: yes: revient à saisirsudoavant une commande. Cette directive donne à Ansible les privilèges root nécessaires pour installer des logiciels.
Vérifiez que - hosts commence tout au début de la ligne, sans espace avant le tiret.
Enregistrez le fichier (Ctrl+O, Entrée).
Ajouter une tâche d’installation
Vous devez maintenant indiquer à Ansible quoi faire. Pour cela, ajoutez une liste de tâches. Chaque tâche utilise un module.
Comme vous travaillez sous Ubuntu, vous allez utiliser le module apt pour installer Nginx.
Modifiez site.yml afin d’obtenir le contenu suivant :
---
- hosts: webservers
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
Comprendre le code :
tasks:: commence la liste des tâches.- name: ...: fournit une description destinée aux humains. Elle s’affichera à l’écran lors de l’exécution du playbook.apt:: appelle le moduleapt.name: nginx: indique le paquet souhaité.state: present: constitue la partie « déclarative » essentielle. Vous ne dites pas « installez-le maintenant », mais « assurez-vous qu’il est présent ».- S’il est absent, Ansible l’installe.
- S’il est déjà installé, Ansible ne fait rien. Cette propriété s’appelle l’idempotence.
L’idempotence est essentielle à la gestion de la configuration. Elle signifie que vous pouvez exécuter la même automatisation plusieurs fois en toute sécurité et obtenir des résultats cohérents, sans effets secondaires dupliqués.
Vérifiez l’indentation :
tasksdoit être aligné surbecome.- namedoit être indenté de 2 espaces.aptdoit être aligné surname.nameetstatedoivent être davantage indentés sousapt.
Enregistrez le fichier.
Ajouter une tâche de gestion du service
Installer le logiciel ne suffit pas : vous devez également vérifier que le programme est en cours d’exécution. Pour cela, utilisez le module service.
Cet exemple montre aussi comment les playbooks expriment l’état du système par couches. Une tâche vérifie que le paquet existe, tandis qu’une autre vérifie que le service est actif. Ensemble, elles décrivent l’état final que l’hôte doit atteindre.
Ajoutez une deuxième tâche à votre liste dans site.yml.
---
- hosts: webservers
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Start nginx
service:
name: nginx
state: started
Comprendre le code :
service:: ce module gère les services système, commesystemctl.state: started: vérifie que le service est en cours d’exécution. S’il est arrêté, Ansible le démarre.
Important : le - de la deuxième tâche doit être exactement aligné sur celui de la première tâche.
Enregistrez le fichier, puis quittez nano (Ctrl+X, puis Y, puis Entrée).
Exécuter le playbook
Voici le moment de lancer votre automatisation !
Utilisez la commande ansible-playbook. Vous devez lui indiquer quel playbook exécuter (site.yml) et quel inventaire utiliser (hosts.ini).
Exécutez la commande suivante :
ansible-playbook site.yml -i hosts.ini
Observez la sortie. Vous verrez :
- Gathering Facts : Ansible commence par vérifier les informations du système.
- Install nginx : l’état
changeds’affiche en jaune, car Ansible a dû installer le paquet. - Start nginx : l’état
changeds’affiche en jaune si Ansible a dû démarrer le service.
Si vous exécutez exactement la même commande une deuxième fois, la sortie s’affichera en vert et indiquera ok. Cela signifie que tout se trouve déjà dans l’état souhaité et qu’Ansible n’a rien modifié.
Vérifiez enfin manuellement que Nginx est en cours d’exécution :
systemctl status nginx
Vous devriez voir « Active: active (running) ».
Récapitulatif
Dans ce lab, vous avez rédigé votre premier playbook Ansible. Vous avez appris à :
- Utiliser la syntaxe YAML : structurer un playbook avec une indentation correcte.
- Définir des plays : indiquer
hosts(où exécuter les tâches) etbecome(utiliser sudo). - Définir des tâches : utiliser des modules comme
apt(pour installer) etservice(pour démarrer). - Comprendre l’idempotence : exécuter le playbook plusieurs fois de manière sûre et stable.
Vous êtes passé de l’exécution manuelle de commandes à la définition de votre « infrastructure as code ».


