La théorie, c’est bien. Mais un inventaire réel, en production, ressemble rarement aux exemples propres à trois hôtes qu’on a vus jusqu’ici. Voici un inventaire tel qu’on pourrait le croiser chez Nordika, une fois son parc de serveurs Docker bien installé :
all:
hosts:
nrd-abd-lyon-1:
ansible_host: 10.0.8.12
nrd-app-supervision-1:
nrd-dck-app-1:
ansible_host: 10.0.9.20
nrd-dck-app-2:
ansible_host: 10.0.9.21
nrd-dck-infra-net-1:
ansible_host: 10.0.9.5
nrd-rproxy-dmz-1:
ansible_host: 172.16.1.3
children:
docker-servers:
hosts:
nrd-dck-app-1:
nrd-dck-app-2:
nrd-dck-infra-net-1:
nrd-rproxy-dmz-1:
adguard_instances:
hosts:
doh1:
doh2:Décortiquons trois détails qu’on ne voit jamais dans un exemple pédagogique simplifié, mais qu’on croise tout le temps en vrai.
Détail 1 : un hôte sans ansible_host
Regardez nrd-app-supervision-1 : contrairement à ses voisins, il n’a aucune ligne ansible_host en dessous.
Ce n’est pas un oubli. Quand ansible_host n’est pas précisé, Ansible utilise directement le nom de l’hôte tel qu’il apparaît dans l’inventaire comme cible de connexion — ici, il va essayer de joindre une machine nommée nrd-app-supervision-1, en comptant sur la résolution DNS ou sur le fichier /etc/hosts du nœud de contrôle pour la retrouver.
C’est un raccourci courant quand tous vos serveurs sont déjà enregistrés dans un DNS interne : pas besoin de dupliquer l’IP dans l’inventaire, le nom suffit. Le même principe s’applique à doh1 et doh2 dans le groupe adguard_instances.
⚠️ Piège classique pour un débutant qui reprend cet inventaire : si votre DNS ne connaît pas le nom, la connexion échoue avec une erreur de résolution, pas une erreur Ansible. Le réflexe à avoir :
ping nrd-app-supervision-1depuis le nœud de contrôle avant de blâmer Ansible.
Détail 2 : une convention de nommage cachée dans les noms
Regardez bien les noms d’hôtes : nrd-dck-app-1, nrd-dck-infra-net-1, nrd-rproxy-dmz-1. Ce n’est pas aléatoire — c’est une convention de nommage qui encode plusieurs informations directement dans le nom :
nrd-: Nordika (l’entreprise)dck/rproxy/abd: son rôle (docker, reverse-proxy, annuaire…)app/infra/dmz: sa fonction ou sa zone réseau-1,-2: son numéro dans la série
Ce n’est pas une obligation d’Ansible, c’est une pratique d’organisation qui permet, rien qu’en lisant ansible-inventory --list, de savoir à quoi sert chaque machine sans aller consulter une documentation à part. Sur un parc de cinquante serveurs, ce genre de convention fait gagner un temps précieux.
Détail 3 : un groupe qui vit hors de all
Regardez la fin du fichier : adguard_instances est déclaré au même niveau que all, pas à l’intérieur de all.children. C’est parfaitement valide en YAML pour Ansible : tout top-level key est traité comme un groupe. Ça permet de définir un groupe complètement séparé de la hiérarchie principale, pratique si doh1/doh2 n’ont pas vocation à hériter des variables définies sous all.vars.
Ce qu’il faut retenir
- Un hôte sans
ansible_hostn’est pas cassé : il s’appuie sur la résolution DNS du nom lui-même. - Une convention de nommage cohérente dans l’inventaire vaut toutes les documentations séparées.
- Un groupe peut exister en dehors de
all— utile pour des ensembles de machines complètement indépendants du reste de la flotte.
Dans la prochaine leçon, on aborde un piège fréquent chez les débutants : mettre trop de configuration directement dans l’inventaire, alors que certaines données n’ont rien à y faire.