Un playbook est un fichier YAML qui décrit un ou plusieurs plays : chaque play cible un groupe de machines (hosts) et exécute une liste de tasks dans l’ordre.


Structure minimale

---
- name: Construire l'image PostgreSQL avec health agent
  hosts: all
  become: true
 
  roles:
    - postgresql
    - health-agent
CléRôle
nameDescription humaine du play, affichée dans les logs
hostsGroupe ou machine ciblé (all, web, 10.0.0.5…)
becomeExécute les tasks en sudo (privilege escalation)
rolesListe de rôles à appliquer, dans l’ordre
tasksAlternative à roles : liste de tasks directement dans le playbook

Anatomie d’une task

- name: Installer PostgreSQL et Python
  ansible.builtin.apt:
    name:
      - postgresql
      - python3
    state: present
    update_cache: true

Une task = un nom lisible + un module (ansible.builtin.apt) + ses paramètres. Le module fait le travail réel ; la task ne fait que l’invoquer avec des arguments.


Modules courants

ModuleRôle
ansible.builtin.apt / yum / packageInstaller des paquets
ansible.builtin.systemd_serviceGérer un service (enable, start, restart)
ansible.builtin.copyCopier un fichier tel quel vers la cible
ansible.builtin.templateCopier un fichier après rendu Jinja2 (voir Jinja2 dans Ansible)
ansible.builtin.fileCréer un répertoire, changer des permissions
ansible.builtin.userCréer/gérer un utilisateur système

Idempotence en pratique

- name: Activer et démarrer PostgreSQL
  ansible.builtin.systemd_service:
    name: postgresql
    enabled: true
    state: started

state: started ne redémarre pas un service déjà démarré — le module vérifie l’état réel avant d’agir. Rejouer cette task ne casse rien et n’a aucun effet si le service tourne déjà.


En relation avec