Tags : executer des taches specifiques
---
- name: Configurer le serveur
hosts: webservers
become: yes
tasks:
- name: Installer les paquets
apt:
name:
- nginx
- php-fpm
state: present
tags:
- install
- packages
- name: Deployer la configuration
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
tags:
- config
- nginx
- name: Deployer l'application
git:
repo: https://github.com/user/app.git
dest: /var/www/app
tags:
- deploy
- app
# Executer uniquement les taches avec le tag "config"
ansible-playbook site.yml --tags config
# Executer plusieurs tags
ansible-playbook site.yml --tags "install,config"
# Exclure des tags
ansible-playbook site.yml --skip-tags deploy
# Lister les tags disponibles
ansible-playbook site.yml --list-tags
Gestion des erreurs
# Ignorer une erreur
- name: Supprimer un fichier qui n'existe peut-etre pas
file:
path: /tmp/optional-file.txt
state: absent
ignore_errors: yes
# Bloc try/rescue/always
- name: Deployer l'application avec rollback
block:
- name: Deployer la nouvelle version
git:
repo: https://github.com/user/app.git
dest: /var/www/app
version: "{{ new_version }}"
- name: Redemarrer l'application
service:
name: myapp
state: restarted
rescue:
- name: Revenir a la version precedente
git:
repo: https://github.com/user/app.git
dest: /var/www/app
version: "{{ old_version }}"
- name: Redemarrer avec l'ancienne version
service:
name: myapp
state: restarted
always:
- name: Envoyer une notification
debug:
msg: "Deploiement termine (succes ou rollback)"
Bonnes pratiques de nommage et organisation
# 1. Toujours nommer les taches
- name: Installer Nginx # BON
- apt: name=nginx state=present # MAUVAIS (pas de name)
# 2. Utiliser le format YAML complet
# BON
- name: Installer Nginx
apt:
name: nginx
state: present
# MAUVAIS (format inline)
- apt: name=nginx state=present
# 3. Structure de projet recommandee
project/
ansible.cfg
inventory/
group_vars/
host_vars/
roles/
playbooks/
files/
templates/
# 4. Un playbook par fonction
playbooks/
site.yml # Playbook principal
webservers.yml # Specifique aux serveurs web
dbservers.yml # Specifique aux BDD
monitoring.yml # Specifique au monitoring
Resume des bonnes pratiques
- Utilisez des modules specifiques plutot que shell/command
- Nommez toujours vos taches de facon descriptive
- Testez avec
--check --diffavant d'appliquer - Utilisez des tags pour organiser et cibler l'execution
- Separez les secrets dans des fichiers chiffres avec Vault
- Organisez votre code en roles reutilisables
- Versionnez votre code Ansible dans Git
- Utilisez des blocs block/rescue/always pour la gestion d'erreurs
Conseil final : Lancez toujours
ansible-playbook --check --diff en premier sur un environnement de staging avant la production.