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 pingCombiner 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 pingIci, 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 pingCible 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 pingCible 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 pingCible 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-1Le 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.yamlCe qu’il faut retenir
| Symbole | Effet |
|---|---|
: | Union (ou) |
:! | Exclusion |
:& | Intersection (et) |
* | Joker sur le nom |
--limit | Restreint 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.