L'inventaire
L'inventaire est la source de vérité des machines que gère Ansible. Sa conception conditionne la flexibilité et la maintenabilité du projet sur le long terme. Un inventaire mal structuré se paie en variables dispersées et en playbooks conditionnels illisibles.
Formats : INI vs YAML
Le format INI est simple pour les petits inventaires :
[web]
web01.example.com
web02.example.com
[db]
db01.example.com ansible_port=2222 ansible_user=dbadmin
[prod:children]
web
dbLe format YAML est plus verbeux mais plus lisible sur les inventaires complexes :
all:
children:
prod:
children:
web:
hosts:
web01.example.com:
web02.example.com:
db:
hosts:
db01.example.com:
ansible_port: 2222
ansible_user: dbadminVariables d'inventaire : inline vs fichiers
Les variables peuvent être définies directement dans l'inventaire (déconseillé pour tout ce qui dépasse quelques variables) ou dans des fichiers dédiés :
inventory/
├── hosts.ini
├── group_vars/
│ ├── all.yml # variables pour tous les hôtes
│ ├── web.yml # variables pour le groupe web
│ └── prod/
│ ├── vars.yml # variables prod
│ └── vault.yml # secrets chiffrés (Ansible Vault)
└── host_vars/
└── web01.example.com.yml # variables spécifiques à un hôteExemple de group_vars/web.yml :
nginx_worker_processes: 4
nginx_keepalive_timeout: 65
app_domain: example.comVariables de connexion courantes
ansible_host: IP ou hostname réel (si différent du nom dans l'inventaire)ansible_port: port SSH (défaut : 22)ansible_user: utilisateur SSHansible_ssh_private_key_file: clé SSH spécifiqueansible_become_user: utilisateur cible pour l'élévation (défaut : root)ansible_python_interpreter: chemin Python sur la cible (utile si non standard)
Inventaire dynamique
Un inventaire statique devient ingérable dès que l'infrastructure est élastique (cloud, VMs créées à la demande). L'inventaire dynamique est un script ou un plugin qui génère la liste des hôtes à la volée, en interrogeant une source externe.
Deux mécanismes :
- Script exécutable : retourne du JSON sur stdout quand appelé avec
--list - Plugin d'inventaire : classe Python intégrée à Ansible, configurée via un fichier YAML
Exemple avec AWS EC2 (collection amazon.aws) :
# inventory/aws_ec2.yml
plugin: amazon.aws.aws_ec2
regions:
- eu-west-1
filters:
tag:Environment: prod
keyed_groups:
- key: tags.Role
prefix: roleansible-inventory -i inventory/aws_ec2.yml --listLes plugins pour Netbox, VMware, Azure, GCP, ou une API maison sont couverts dans la section Expertise.
Inspecter l'inventaire
# Lister tous les hôtes
ansible-inventory --list
# Format lisible
ansible-inventory --graph
# Variables d'un hôte spécifique
ansible-inventory --host web01.example.com