
Les tags Ansible permettent de cibler ou d'ignorer un sous-ensemble de tâches lors de l'exécution d'un playbook. Vous écrivez un playbook complet qui installe + configure + démarre + teste, et au runtime vous décidez de ne lancer que la partie configuration : ansible-playbook site.yml --tags configuration. Pas besoin d'écrire 5 playbooks séparés ni de commenter des blocs entiers.
Cette page couvre tout : la syntaxe d'application, l'exécution sélective via --tags et --skip-tags, les tags spéciaux (always, never, tagged, untagged), l'héritage depuis un play vers ses tâches, et les pièges classiques (tag mal orthographié qui passe silencieusement).
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Appliquer un tag à une tâche, un bloc, un play ou un rôle ;
- Exécuter un sous-ensemble avec
--tags <liste>; - Ignorer des tâches avec
--skip-tags <liste>; - Les tags spéciaux :
always(toujours exécuté),never(jamais sauf demande),tagged,untagged; - Le comportement d'héritage d'un tag posé au niveau play ou bloc.
Appliquer un tag
Section intitulée « Appliquer un tag »Un tag est une étiquette apposée sur une tâche via tags: :
tasks: - name: Installer nginx ansible.builtin.dnf: name: nginx state: present tags: - install - nginx
- name: Configurer nginx ansible.builtin.template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf tags: - configuration - nginx
- name: Démarrer nginx ansible.builtin.systemd: name: nginx state: started tags: - service - nginxForme courte (un seul tag) :
- name: Installer nginx ansible.builtin.dnf: name: nginx tags: installExécuter un sous-ensemble avec --tags
Section intitulée « Exécuter un sous-ensemble avec --tags »# Exécuter uniquement les tâches taguées 'install'ansible-playbook site.yml --tags install
# Plusieurs tags : unionansible-playbook site.yml --tags "install,service"
# Tag uniqueansible-playbook site.yml --tags configurationSortie : Ansible exécute uniquement les tâches qui ont au moins un des tags listés. Les autres apparaissent en skipped dans le PLAY RECAP.
Ignorer des tâches avec --skip-tags
Section intitulée « Ignorer des tâches avec --skip-tags »# Tout exécuter SAUF les tâches taguées 'install'ansible-playbook site.yml --skip-tags install
# Plusieurs tags à skipansible-playbook site.yml --skip-tags "install,configuration"Cas typique : sur une fleet déjà installée, vous skippez l'install pour ne refaire que la configuration.
Les tags spéciaux
Section intitulée « Les tags spéciaux »Une tâche taguée always s'exécute toujours, même si vous précisez --tags <autre> :
- name: Vérifier les prérequis (toujours exécuté) ansible.builtin.command: which python3 tags: alwaysCas typique : vérifications en début de play (DNS, reachability, version OS) qui doivent toujours tourner.
Une tâche taguée never ne s'exécute jamais sauf si vous demandez explicitement son tag :
- name: Reset complet de la base (destructif) ansible.builtin.command: dropdb mydb tags: - never - reset-dbPour la lancer : ansible-playbook site.yml --tags reset-db. Sans --tags reset-db, la tâche est toujours skippée. Idéal pour les opérations destructives que vous voulez pouvoir lancer sciemment.
tagged et untagged
Section intitulée « tagged et untagged »tagged: matche toutes les tâches qui ont au moins un tag.untagged: matche toutes les tâches qui n'ont aucun tag.
# Lancer uniquement les tâches avec au moins un tagansible-playbook site.yml --tags tagged
# Lancer uniquement les tâches sans tagansible-playbook site.yml --tags untaggedCas pratique : vérifier qu'aucune tâche n'a été oubliée sans tag pour audit.
Héritage des tags
Section intitulée « Héritage des tags »Un tag posé au niveau play s'applique automatiquement à toutes ses tâches :
- name: Déployer nginx hosts: webservers become: true tags: nginx # tag posé au niveau play
tasks: - name: Installer ansible.builtin.dnf: name: nginx state: present # hérite implicitement du tag 'nginx'
- name: Démarrer ansible.builtin.systemd: name: nginx state: started tags: service # ce tag s'AJOUTE au tag 'nginx' héritéIdem au niveau bloc :
- block: - name: Installer A ... - name: Installer B ... tags: install # s'applique aux deux tâches du blockEt au niveau rôle :
roles: - role: nginx tags: nginx # s'applique à toutes les tâches du rôle nginxCas pratique — playbook multi-stages
Section intitulée « Cas pratique — playbook multi-stages »Un playbook avec 4 stages distincts qu'on peut lancer indépendamment :
- name: Déploiement complet hosts: webservers become: true
tasks: - name: Installer nginx ansible.builtin.dnf: name: nginx tags: install
- name: Configurer nginx ansible.builtin.template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf tags: configuration
- name: Démarrer nginx ansible.builtin.systemd: name: nginx state: started enabled: true tags: service
- name: Tester nginx ansible.builtin.uri: url: http://localhost tags: testLancements possibles :
# Toutansible-playbook site.yml
# Première install seulementansible-playbook site.yml --tags install
# Reconfig + restartansible-playbook site.yml --tags "configuration,service"
# Tout sauf tests (pour aller vite)ansible-playbook site.yml --skip-tags test
# Tests seuls (smoke test post-deploy)ansible-playbook site.yml --tags testLister les tags d'un playbook
Section intitulée « Lister les tags d'un playbook »Pour voir tous les tags utilisés dans un playbook avant de lancer :
ansible-playbook site.yml --list-tagsAffiche la liste des tags définis. Pratique pour découvrir un playbook hérité.
ansible-playbook site.yml --list-tasks --tags configurationListe les tâches qui s'exécuteraient avec --tags configuration, sans rien lancer. Le dry-run des dry-runs.
Conventions de nommage
Section intitulée « Conventions de nommage »Privilégiez des tags orthogonaux : nom de service + type d'opération + phase. Évitez les redondances :
| Catégorie | Tags typiques |
|---|---|
| Service | nginx, postgres, redis, firewall |
| Type d'opération | install, configuration, service, monitoring, test |
| Phase de déploiement | pre-deploy, deploy, post-deploy, rollback |
| Environnement | prod, staging, dev (rarement) |
Anti-patterns : step1, step2, task42, tmp, xyz. Pas descriptifs.
Pièges fréquents
Section intitulée « Pièges fréquents »| Symptôme | Cause | Fix |
|---|---|---|
--tags configurations (pluriel) ne fait rien | Typo silencieuse — Ansible ne signale pas | Toujours --list-tags avant pour vérifier |
Tag always ignoré quand on utilise --tags X | Faux — always s'exécute aussi | Vérifier que la tâche a bien le tag, pas un bloc parent |
Tag never exécuté quand on lance le playbook complet | Faux — never est toujours skippé sauf demande explicite | Vérifier qu'il n'y a pas un autre tag (sans never) sur la tâche |
--skip-tags X skippe aussi les tâches taguées always | Faux — always est skippé uniquement par --skip-tags always | Ne pas s'en inquiéter, comportement attendu |
| Tag posé sur un play, mais des tâches ne sont pas matchées | Vérifiez qu'il n'y a pas un autre play sans tag dans le même playbook | Vérifier la totalité du playbook |
Performance : --tags X reste lent | Ansible parse tout le playbook avant de filtrer | Aucun fix simple — accepter le coût de parsing |
À retenir
Section intitulée « À retenir »- Un tag est une étiquette apposée sur une tâche, un bloc, un play ou un rôle.
--tags <liste>exécute uniquement les tâches taguées ;--skip-tags <liste>ignore les tâches taguées.- Les tags
alwayss'exécutent toujours,neverjamais sauf demande explicite. - Un tag posé au niveau play, bloc ou rôle s'hérite à toutes les tâches enfants.
--list-tagset--list-tasks --tags Xsont les commandes de dry-run pour valider votre intention avant exécution.- Conventions : tags orthogonaux et descriptifs (service + type d'opération + phase), pas
step1/step2.
Pratiquer dans le lab
Section intitulée « Pratiquer dans le lab »Cette page a un lab d'accompagnement : labs/ecrire-code/tags/ dans
stephrobert/ansible-training. Il contient
un README.md guidé, un Makefile (make verify lance les tests), et un
challenge final auto-évalué : playbook multi-tags avec always / never / configuration ciblés via --tags configuration.
Une fois le lab provisionné :
cd ~/Projets/ansible-training/labs/ecrire-code/tags/
cat README.md # tuto pas à pascat challenge/README.md # consigne du challenge finalpytest -v challenge/tests/ # lancer les tests testinfraSi les tests passent, vous maîtrisez les concepts couverts dans ce guide. En
cas de blocage, docs/troubleshooting.md
à la racine du repo couvre les pièges fréquents (rate-limit SSH, clé absente,
collection manquante).