Definir des variables
# Dans le playbook (vars)
---
- name: Deployer l'application
hosts: webservers
vars:
app_name: myapp
app_port: 8080
app_user: deploy
packages:
- nginx
- python3
- git
tasks:
- name: Installer les paquets
apt:
name: "{{ packages }}"
state: present
- name: Creer l'utilisateur
user:
name: "{{ app_user }}"
shell: /bin/bash
Fichiers de variables externes
# vars/app.yml
app_name: myapp
app_port: 8080
database:
host: db.example.com
port: 5432
name: myapp_prod
# Dans le playbook
---
- name: Deployer l'application
hosts: webservers
vars_files:
- vars/app.yml
- vars/secrets.yml
Variables enregistrees (register)
# Capturer la sortie d'une commande
- name: Verifier la version de Python
command: python3 --version
register: python_version
- name: Afficher la version
debug:
msg: "Python installe : {{ python_version.stdout }}"
# Utiliser le resultat dans une condition
- name: Installer Python si absent
apt:
name: python3
state: present
when: python_version.rc != 0
Priorite des variables
Ansible applique un ordre de priorite strict (du plus faible au plus fort) :
- Valeurs par defaut du role (defaults/main.yml)
- Variables d'inventaire (group_vars, host_vars)
- Variables du play (vars, vars_files)
- Variables de tache (set_fact, register)
- Variables en ligne de commande (-e / --extra-vars)
# Passer une variable en ligne de commande (priorite maximale)
ansible-playbook site.yml -e "app_port=9090"
ansible-playbook site.yml --extra-vars "env=production version=2.1"
Regle : Les variables passees avec
-e ont toujours la priorite la plus haute et ecrasent toutes les autres.