2.5 : Patterns d’hôtes et –limit

Jusqu’ici, on a ciblé soit toute la flotte (all), soit un groupe entier (webservers). Mais il arrive régulièrement qu’on ait besoin de quelque chose de plus précis : un seul serveur en particulier, plusieurs groupes à la fois, ou tout sauf une machine. C’est là qu’interviennent les patterns d’hôtes.

Cibler un hôte précis

Rien de plus simple : le nom de l’hôte tel qu’il apparaît dans l’inventaire.

ansible nrd-dck-app-1 -i inventaire.yaml -m ping

Combiner plusieurs cibles avec :

Pour cibler deux groupes (ou hôtes) en même temps, on les sépare par : — c’est l’équivalent d’un « ou » :

ansible webservers:databases -i inventaire.yaml -m ping

Ici, Ansible contacte tous les hôtes de webservers, plus tous ceux de databases.

Exclure une cible avec :!

Pour cibler un groupe entier sauf une machine précise, on utilise :! :

ansible webservers:!nrd-dck-app-2 -i inventaire.yaml -m ping

Cible tous les serveurs web, sauf nrd-dck-app-2.

L’intersection avec :&

Pour ne cibler que les hôtes qui appartiennent à la fois à deux groupes, on utilise :& :

ansible docker-servers:&webservers -i inventaire.yaml -m ping

Cible uniquement les machines qui sont à la fois dans docker-servers ET dans webservers — utile si un serveur peut cumuler plusieurs rôles.

Les wildcards (jokers)

Si votre convention de nommage est cohérente (comme on l’a vu en 2.3 avec nrd-dck-app-1, nrd-dck-app-2…), vous pouvez cibler par motif :

ansible "nrd-dck-*" -i inventaire.yaml -m ping

Cible toutes les machines dont le nom commence par nrd-dck-, peu importe leur groupe.

⚠️ Pensez à mettre le pattern entre guillemets dans votre terminal : sans ça, le shell risque d’interpréter le * lui-même avant qu’Ansible ne le voie.

--limit : restreindre sans changer le playbook

Tout ce qu’on vient de voir avec ansible fonctionne aussi avec ansible-playbook, mais dans ce cas, le pattern se passe via l’option --limit, sans toucher au fichier du playbook lui-même.

Imaginons un playbook qui cible hosts: docker-servers :

ansible-playbook playbook_update.yaml -i inventaire.yaml --limit nrd-dck-app-1

Le playbook reste écrit pour tout le groupe docker-servers, mais cette exécution précise ne touche que nrd-dck-app-1. Extrêmement pratique pour tester une modification sur une seule machine avant de la relancer sur toute la flotte.

# Test sur une seule machine
ansible-playbook playbook_update.yaml -i inventaire.yaml --limit nrd-dck-app-1

# Une fois validé, on relance sur tout le groupe
ansible-playbook playbook_update.yaml -i inventaire.yaml

Ce qu’il faut retenir

SymboleEffet
:Union (ou)
:!Exclusion
:&Intersection (et)
*Joker sur le nom
--limitRestreint une exécution sans modifier le playbook

Ces patterns deviennent particulièrement utiles une fois que votre inventaire compte plusieurs dizaines de machines : plutôt que de créer un nouveau groupe à chaque besoin ponctuel, un bon pattern d’hôte fait souvent l’affaire en une ligne.