
Un inventaire dynamique est généré à chaque exécution d’Ansible — pas un fichier que vous éditez à la main. Quand vous créez une nouvelle VM, un nouvel hôte cloud, ou ajoutez une machine dans NetBox, Ansible la voit immédiatement sans aucune action manuelle de votre part. C’est la promesse qui rend l’IaC complète : provisionner avec Terraform, configurer avec Ansible, sans étape intermédiaire de mise à jour d’inventaire.
Cette section couvre les 5 sources les plus utilisées : libvirt/KVM (homelab), AWS EC2 (cloud public le plus répandu), Proxmox (homelab et PME), NetBox (IPAM/DCIM) et les scripts custom (fallback quand aucun plugin officiel n’existe).
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Le principe d’un plugin d’inventaire et la différence avec un fichier statique.
- Activer un plugin dans
ansible.cfg(enable_plugins). - Choisir entre les 5 sources principales selon votre infrastructure.
- Créer une VM KVM et la voir apparaître automatiquement dans Ansible (lab
inventaires/dynamique-kvm). - Écrire un script custom qui retourne le format JSON attendu par Ansible.
Prérequis
Section intitulée « Prérequis »- Avoir validé la section Inventaires statiques.
- Comprendre la commande
ansible-inventory --listet son format JSON.
Statique vs dynamique — le déclic
Section intitulée « Statique vs dynamique — le déclic »Un inventaire statique est un fichier texte (hosts.yml, hosts.ini) que vous maintenez à la main. Vous ajoutez/retirez des hôtes en éditant ce fichier — drift garanti dès que l’infra évolue plus vite que les commits.
Un inventaire dynamique est un plugin qui interroge une source externe (API, fichier, base de données) à chaque commande Ansible et retourne la liste des hôtes en JSON. Pas d’édition manuelle, pas de drift.
Schéma simplifié :
Statique : hosts.yml → Ansible (lit le fichier)
Dynamique : Plugin libvirt → API libvirt → hosts JSON → Ansible Plugin AWS → API AWS → hosts JSON → Ansible Script custom → votre logique → hosts JSON → AnsibleLes 5 sources principales
Section intitulée « Les 5 sources principales »1. libvirt/KVM (homelab et test)
Section intitulée « 1. libvirt/KVM (homelab et test) »Plugin community.libvirt.libvirt : interroge l’API libvirt locale et retourne toutes les VMs visibles. Idéal pour un homelab avec Proxmox ou KVM bare-metal. Démontré en détail dans le lab inventaires/dynamique-kvm.
Avantage : zéro coût, fonctionne en local, pas besoin de credentials cloud. Limite : ne retourne pas les IPs (à compléter via fichier statique ou compose Jinja).
2. AWS EC2 (cloud public majoritaire)
Section intitulée « 2. AWS EC2 (cloud public majoritaire) »Plugin amazon.aws.aws_ec2 : retourne toutes les instances EC2 d’une région ou d’un compte, groupées par tags, par VPC, par AZ. Standard de fait dès qu’on touche à AWS.
Avantage : groupage automatique par tag (tag_Environment_prod devient un groupe), filtres puissants.
Limite : credentials AWS nécessaires (IAM user ou role assume).
3. Proxmox (homelab pro et PME)
Section intitulée « 3. Proxmox (homelab pro et PME) »Plugin community.general.proxmox : interroge l’API Proxmox VE et retourne les VMs et conteneurs LXC, avec leurs IPs si l’agent QEMU est installé. Très complet pour un parc homelab/PME.
Avantage : retourne VM + IP en une seule API call (avantage majeur sur libvirt). Limite : nécessite un token Proxmox + agent QEMU côté VM pour les IPs.
4. NetBox (IPAM/DCIM source de vérité)
Section intitulée « 4. NetBox (IPAM/DCIM source de vérité) »Plugin netbox.netbox.nb_inventory : NetBox est la source de vérité d’infrastructure (IPAM, DCIM, racks, devices, virtualization). Le plugin retourne les hôtes selon leurs filtres NetBox (status active, role, site, tenant).
Avantage : NetBox sert déjà de référentiel central — pas de duplication. Filtres très fins. Limite : nécessite NetBox déployé + token API. Surcoût pour un petit parc.
5. Script custom (fallback universel)
Section intitulée « 5. Script custom (fallback universel) »Quand aucun plugin officiel n’existe (CMDB maison, fichier exotique, API legacy), un script qui retourne le JSON Ansible attendu fait l’affaire. Bash, Python, Go — peu importe le langage tant que la sortie est conforme.
Avantage : fonctionne partout, complètement personnalisable. Limite : à maintenir vous-même. Pas de cache automatique. Risque de bugs.
Choisir la bonne source
Section intitulée « Choisir la bonne source »| Situation | Source recommandée |
|---|---|
| Homelab bare-metal/KVM | libvirt (lab inventaires/dynamique-kvm) |
| Homelab Proxmox | Proxmox (VM + IP en une call) |
| Cloud AWS | AWS EC2 |
| Cloud Azure | azure.azcollection.azure_rm |
| Cloud GCP | google.cloud.gcp_compute |
| Parc on-prem avec NetBox | NetBox (source de vérité) |
| API maison ou CMDB exotique | Script custom |
| Mix on-prem + cloud | Plusieurs -i combinés |
Le parcours en 5 pages
Section intitulée « Le parcours en 5 pages »1. Comprendre les concepts
Section intitulée « 1. Comprendre les concepts »2. Implémenter sur votre homelab KVM
Section intitulée « 2. Implémenter sur votre homelab KVM »3. Comprendre les autres sources
Section intitulée « 3. Comprendre les autres sources »4. Fallback — script custom
Section intitulée « 4. Fallback — script custom »Pièges courants
Section intitulée « Pièges courants »| Symptôme | Cause | Fix |
|---|---|---|
| Plugin non trouvé | Pas activé dans ansible.cfg | [inventory] enable_plugins = community.libvirt.libvirt, ... |
| Inventaire vide | Credentials manquants ou filtre trop restrictif | ansible-inventory -i ... --list -vvv pour voir l’API call |
| Plugin lent (>5s) | Pas de cache | Activer cache: true dans la config plugin |
auto plugin essaie de parser comme YAML statique | Fichier ne contient pas plugin: <nom> au top | Vérifier le fichier de config plugin |
| Hôtes dupliqués entre statique et dynamique | Aucun problème si les variables matchent | Sinon mettre les variables dans host_vars/ (chargé après les deux) |
À retenir
Section intitulée « À retenir »- Inventaire dynamique = généré à chaque commande, pas un fichier édité.
- 5 sources principales : libvirt/KVM, AWS EC2, Proxmox, NetBox, script custom.
community.libvirt.libvirt= idéal homelab, démontré en labinventaires/dynamique-kvm.amazon.aws.aws_ec2= standard de fait sur AWS.- NetBox = source de vérité unifiée si vous l’avez déjà déployée.
- Script custom = fallback quand aucun plugin officiel n’existe.
- Hors-périmètre RHCE mais incontournable en production.