| Limite | Impact |
|---|---|
| Complexité limitée | Impossible pour les scénarios multi-étapes |
| Pas de reproductibilité facile | Nécessite de re-taper les commandes |
| Difficile à versionner | Pas de fichier Git structuré |
| Peu lisible | Enchaînement complexe dans une seule ligne |
Commentaires avec
--- # Début de document YAML recommandé
key: value # Clé-valeur
item1 # Liste
item2
nested: # Objet imbriqué
subkey: subvalue
| Règle | Bon | Mauvais |
|---|---|---|
| Indentation | 2 espaces | Tabulations |
| Guillemets | Non obligatoires sauf caractères spéciaux | Toujours utiliser systématiquement |
| Listes | Tirets (-) avec indentation |
Crochets [item1, item2] |
| Booléens | yes, no, true, false |
1, 0 |
CORRECT
users:
name: alice
role: admin
name: bob
role: developer
INCORRECT (tabulations, mélange styles)
users:
- name: alice
- name: bob
name: Nom du playbook (descriptif)
hosts: webservers # Cible : hôte, groupe ou motif
become: yes # Élévation de privilège (sudo)
gather_facts: yes # Collecte des facts système
vars: # Variables locales (optionnel)
http_port: 80
max_clients: 200
pre_tasks: # Tâches avant les autres (optionnel)
- name: Vérifier l'espace disque
shell: df -h / | grep -q "80%"
tasks: # Tâches principales
- name: Installation nginx
apt:
name: nginx
state: present
- name: Copie de la configuration
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Redémarrage nginx # Notifie un handler
- name: Démarrage du service
service:
name: nginx
state: started
enabled: yes
handlers: # Handlers déclenchés par notify
- name: Redémarrage nginx
service:
name: nginx
state: restarted
post_tasks: # Tâches finales (optionnel)
- name: Vérification HTTP
uri:
url: http://localhost/
status_code: 200
Exécution normale
ansible-playbook site.yml
Avec confirmation avant chaque hôte
ansible-playbook site.yml --limit webservers
Mode simulation (dry-run) - ne change rien
ansible-playbook site.yml --check
Voir les différences générées
ansible-playbook site.yml --diff
Verbosité accrue
ansible-playbook site.yml -v`
ansible-playbook site.yml -vv
ansible-playbook site.yml -vvv
Exécution depuis une sous-directory
cd /opt/playbooks && ansible-playbook site.yml
Passer des variables en ligne de commande
ansible-playbook site.yml -e "http_port=8080"
Exclusion de certains hôtes
ansible-playbook site.yml --exclude=web01
Un playbook est idempotent si son exécution multiple produit le même résultat qu'une seule exécution.
Exemple idempotent :
name: Installer nginx
apt:
name: nginx
state: present # Si présent -> OK, si absent -> INSTALLATION
Première exécution : CHANGED -> nginx installé
Deuxième exécution : OK -> nginx déjà présent
Exemple NON idempotent :
name: Créer un fichier avec timestamp
lineinfile:
path: /tmp/test.txt
line: "{{ ansible_date_time.iso8601 }}"
Chaque exécution modifie le fichier -> TOUJOURS CHANGED
state: quand applicable (present, absent, started, stopped)shell/command qui modifient systématiquement--check avant déploiement