9.1 : Tags : exécuter une partie du playbook

Nordika arrive à un playbook de plus en plus complet : installation, configuration, utilisateurs, sécurité… Plusieurs dizaines de tâches, potentiellement plusieurs minutes d’exécution. Mais si vous voulez juste retester la partie « configuration Apache » sans repasser par toute l’installation système, tout rejouer à chaque fois devient vite pénible. C’est exactement le problème que les tags résolvent.

Le principe : étiqueter des tâches

Un tag est une étiquette qu’on colle sur une ou plusieurs tâches, pour pouvoir les cibler précisément à l’exécution :

---
- name: Déployer l'infrastructure Nordika
  hosts: webservers
  become: yes

  tasks:
    - name: Installer Apache
      ansible.builtin.apt:
        name: apache2
        state: present
      tags: install

    - name: Déployer le VirtualHost
      ansible.builtin.template:
        src: nordika.conf.j2
        dest: /etc/apache2/sites-available/nordika.conf
      tags: config

    - name: Créer les comptes utilisateurs
      ansible.builtin.user:
        name: "{{ item }}"
        state: present
      loop:
        - alice
        - bob
      tags: users

Exécuter uniquement certains tags

ansible-playbook playbook_nordika.yaml -i inventaire.yaml --tags config

Seule la tâche taguée config s’exécute — l’installation et la création des comptes sont complètement ignorées, sans même être évaluées.

Combiner plusieurs tags

ansible-playbook playbook_nordika.yaml -i inventaire.yaml --tags "config,users"

Exécute les tâches taguées config ou users.

Exclure un tag avec --skip-tags

À l’inverse, pour tout exécuter sauf une partie précise :

ansible-playbook playbook_nordika.yaml -i inventaire.yaml --skip-tags users

Utile, par exemple, pour rejouer tout le playbook d’infrastructure sans retoucher à la gestion des comptes, qui suit peut-être un cycle de validation séparé chez Nordika.

Une tâche peut avoir plusieurs tags

- name: Déployer le VirtualHost
  ansible.builtin.template:
    src: nordika.conf.j2
    dest: /etc/apache2/sites-available/nordika.conf
  tags:
    - config
    - apache

Cette tâche s’exécute aussi bien avec --tags config qu’avec --tags apache.

Le tag spécial always

Un tag particulier existe : always. Une tâche taguée always s’exécute systématiquement, même si vous filtrez sur un autre tag qui ne la concerne pas — typiquement utile pour une vérification de base qui doit toujours avoir lieu, quel que soit le sous-ensemble demandé :

- name: Vérifier la connectivité avant toute chose
  ansible.builtin.ping:
  tags: always

Lister les tags disponibles sans exécuter

Pratique pour explorer un playbook qu’on découvre, ou qu’on a écrit soi-même il y a longtemps et un peu oublié :

ansible-playbook playbook_nordika.yaml -i inventaire.yaml --list-tags

Tagger un rôle entier

Souvenez-vous des rôles vus en section 6 : on peut tagger un rôle complet directement dans son appel, plutôt que tâche par tâche à l’intérieur du rôle :

---
- name: Déployer l'infrastructure Nordika
  hosts: webservers
  become: yes
  roles:
    - role: apache
      tags: apache

Ce qu’il faut retenir

  • --tags cible uniquement les tâches concernées ; --skip-tags fait l’inverse.
  • Une tâche peut porter plusieurs tags à la fois.
  • Le tag always s’exécute quoi qu’il arrive, même en filtrant sur un autre tag.
  • --list-tags permet d’explorer les tags disponibles sans rien exécuter.

Dans la prochaine leçon, on regarde comment accélérer l’exécution elle-même sur un grand nombre de machines : les stratégies et le parallélisme.