Ansible propose plusieurs emplacements pour définir une variable, avec un ordre de précédence — utile pour comprendre pourquoi une valeur écrase une autre.
defaults vs vars
# roles/health-agent/defaults/main.yml — faible précédence, pensé pour être surchargé
health_agent_port: 8080
health_agent_path: /healthz
health_agent_timeout_seconds: 3
health_agent_command:
- runuser
- -u
- postgres
- --
- psql
- --dbname=postgres
- --no-psqlrc
- --quiet
- --command=SELECT 1;| Emplacement | Précédence | Usage |
|---|---|---|
roles/*/defaults/main.yml | La plus faible | Valeurs par défaut d’un role, destinées à être surchargées par l’appelant |
roles/*/vars/main.yml | Plus forte que defaults | Constantes internes au role, pas censées être modifiées de l’extérieur |
Variables du playbook (vars:) | Plus forte encore | Spécifique à un play |
-e / --extra-vars en CLI | La plus forte | Surcharge tout le reste |
Dans le projet, health_agent_port vit dans defaults/ précisément pour rester facile à surcharger si un autre déploiement veut un port différent, sans toucher au role.
Utiliser une variable
- name: Déployer la configuration du health agent
ansible.builtin.template:
src: config.json.j2
dest: /etc/health-agent/config.json{
"port": {{ health_agent_port }}
}Syntaxe {{ variable }} — voir Jinja2 dans Ansible pour le détail du moteur de template.
Handlers — réagir à un changement
tasks:
- name: Déployer la configuration
ansible.builtin.template:
src: config.json.j2
dest: /etc/health-agent/config.json
notify: Redémarrer le health agent
handlers:
- name: Redémarrer le health agent
ansible.builtin.systemd_service:
name: health-agent
state: restartedUn handler ne s’exécute que si une task qui le notify a effectivement changé quelque chose (changed), et seulement une fois à la fin du play même si plusieurs tasks le notifient. C’est le mécanisme standard pour « redémarrer le service si sa config a changé, sinon ne rien faire ».
En relation avec
- Roles — où vivent
defaults/,vars/,handlers/ - Playbooks et tasks —
notifyposé sur une task - Jinja2 dans Ansible — rendu des variables dans les templates