
Un playbook Ansible est un fichier YAML qui décrit, sous forme de plays, les tâches à exécuter sur un groupe d'hôtes pour les configurer et les déployer de façon idempotente. Cette sous-section couvre l'écriture des playbooks au-delà du cas trivial. Vous y apprenez la structure d'un play complet (avec pre_tasks, post_tasks, handlers, roles, environment), la vue d'ensemble des collections built-in, le déclenchement précis des handlers via notify: et listen:, l'usage des tags pour cibler un sous-ensemble de tâches, le check mode pour les dry-runs, le parallélisme (forks, serial, strategy), les tâches asynchrones et la délégation (delegate_to, run_once).
C'est la couche opérationnelle de l'écriture de code Ansible, celle où vous passez du "playbook qui marche" au "playbook qui passe à l'échelle, gère les erreurs, et tourne en CI".
Cette page fait partie de la formation Ansible, le hub qui couvre Ansible de la découverte à la certification.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- L'anatomie complète d'un play et de ses 12 mots-clés (
hosts,become,gather_facts,vars,vars_files,pre_tasks,tasks,post_tasks,handlers,roles,environment,strategy) ; - Les collections built-in :
ansible.builtin,ansible.posix,community.general, quoi prendre où ; - Les handlers et leur déclenchement (
notify:,listen:,meta: flush_handlers) ; - Les tags pour exécuter ou ignorer des sous-ensembles de tâches (
--tags,--skip-tags,always,never) ; - Le check mode (
--check) et le diff mode (--diff) pour les dry-runs sécurisés ; - Le parallélisme :
forks,serial(rolling updates),throttle,strategy: linear|free|host_pinned; - Les tâches asynchrones :
async:,poll:,async_statuspour les opérations longues ; - La délégation :
delegate_to,local_action,run_once(cas typique : drain de load-balancer).
Prérequis
Section intitulée « Prérequis »- Avoir lu les pages YAML pour Ansible, Structure d'un projet et Style guide de la sous-section Fondations ;
- Avoir validé le premier playbook (anatomie de base, idempotence).
Le parcours en 9 pages
Section intitulée « Le parcours en 9 pages »La place dans la RHCE EX294
Section intitulée « La place dans la RHCE EX294 »| Objectif RHCE | Couvert par |
|---|---|
| Créer playbooks simples et avancés | Plays et tasks |
| Connaître les modules de base | Modules built-in |
| Utiliser handlers | Handlers |
| Utiliser tags | Tags |
| Mode check et diff | Check mode et diff |
| Gérer le parallélisme | Parallélisme et stratégies |
| Gérer le rolling update | Parallélisme et stratégies (serial:) |
Réutiliser du code (import_* / include_*) | Import vs Include |
L'asynchrone et la délégation ne sont pas explicitement à l'examen mais sont indispensables en production réelle.
FAQ : questions fréquentes
Section intitulée « FAQ : questions fréquentes »tasks/, handlers/, vars/, templates/, defaults/) qu'un playbook inclut via roles:. En résumé : le playbook décide, le rôle empaquette la logique réutilisable.ansible-playbook, un inventaire et le fichier du playbook :ansible-playbook -i inventory.ini site.yml
Options utiles : --limit web (cibler des hôtes), --tags deploy (n'exécuter que certaines tâches), -v (verbosité), --check (simulation sans modification).hosts: la cible (groupe ou motif d'inventaire)become,vars,gather_facts: options du playtasks: les modules à exécuterhandlers: tâches déclenchées parnotify:roles,pre_tasks,post_tasks: pour structurer
--check : Ansible simule l'exécution sans appliquer de changement. Ajoutez --diff pour voir précisément ce qui serait modifié (contenu de fichiers, lignes de config) :ansible-playbook -i inventory.ini site.yml --check --diff
C'est la façon sûre de valider avant la vraie exécution. Note : certains modules dynamiques ne supportent pas parfaitement le check mode.- Une commande ad hoc lance une action unique et ponctuelle en une ligne, sans fichier :
ansible web -m pingouansible web -m service -a "name=nginx state=restarted". Rien n'est versionné. - Un playbook est un fichier YAML réutilisable et idempotent qui décrit un état complet, se commite dans Git et se rejoue sans risque.
- name: Déployer l'application
ansible.builtin.copy:
src: app.jar
dest: /opt/app/app.jar
tags: [deploy]
Puis on cible à l'exécution :ansible-playbook -i inventory.ini site.yml --tags deploy
ansible-playbook -i inventory.ini site.yml --skip-tags deploy
Deux tags spéciaux : always (joué même sans --tags, sauf --skip-tags always) et never (jamais joué sauf demande explicite).import_tasks: inclusion statique, résolue au parsing du playbook. Les tags etwhense propagent à chaque tâche importée.include_tasks: inclusion dynamique, résolue à l'exécution. Nécessaire dès qu'on inclut dans une boucle ou selon une variable calculée en cours de route.- Rôle : pour un ensemble complet (tâches, handlers, templates, defaults), appelé via
roles:ouinclude_role. C'est la forme réutilisable la plus aboutie.
ansible-core et l'écriture de playbooks sont entièrement gratuits, installables via pip install ansible ou le paquet de votre distribution. Red Hat commercialise Ansible Automation Platform (AAP), une offre payante qui ajoute une interface web, le RBAC, un catalogue de contenu certifié et le support. AAP n'est pas nécessaire pour écrire, versionner et exécuter des playbooks : la ligne de commande ansible-playbook suffit.