Un role est une unité réutilisable qui regroupe tasks, variables, fichiers et templates autour d’une responsabilité (installer PostgreSQL, déployer un agent…), selon une arborescence de répertoires conventionnelle — Ansible charge automatiquement chaque sous-dossier sans configuration explicite.
Arborescence standard
roles/health-agent/
├── tasks/
│ └── main.yml # liste de tasks exécutées quand le role est appelé
├── defaults/
│ └── main.yml # variables par défaut, faible précédence (facilement surchargées)
├── vars/
│ └── main.yml # variables du role, forte précédence
├── templates/
│ └── config.json.j2 # fichiers Jinja2, utilisés via le module `template`
├── files/
│ └── health-agent.py # fichiers statiques, copiés tels quels via `copy`
├── handlers/
│ └── main.yml # tasks déclenchées par `notify`
└── meta/
└── main.yml # dépendances vers d'autres roles
Seul tasks/main.yml est obligatoire ; les autres dossiers sont chargés automatiquement s’ils existent.
Exemple réel — role health-agent
# roles/health-agent/tasks/main.yml
- name: Déployer la configuration du health agent
ansible.builtin.template:
src: config.json.j2 # cherché automatiquement dans templates/
dest: /etc/health-agent/config.json
owner: root
group: root
mode: "0644"
- name: Déployer le programme du health agent
ansible.builtin.copy:
src: health-agent.py # cherché automatiquement dans files/
dest: /usr/local/bin/health-agent.py
mode: "0755"Un role référence ses propres templates/ et files/ par leur nom seul (src: config.json.j2) — pas besoin de chemin complet, Ansible les résout à partir de la structure du role.
Appeler des roles depuis un playbook
- name: Construire l'image PostgreSQL avec health agent
hosts: all
become: true
roles:
- postgresql
- health-agentLes roles s’exécutent dans l’ordre déclaré : ici postgresql avant health-agent, car l’agent dépend du service PostgreSQL déjà présent.
En relation avec
- Architecture — Vue d’ensemble — hub architecture
- Playbooks et tasks — ce que contient
tasks/main.yml - Variables et handlers —
defaults/vsvars/,handlers/ - Jinja2 dans Ansible — les fichiers de
templates/