Aller au contenu
Infrastructure as Code medium

Inventaires dynamiques Ansible : KVM, AWS, Proxmox, NetBox, scripts custom

8 min de lecture

Logo Ansible

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).

  • 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.
  • Avoir validé la section Inventaires statiques.
  • Comprendre la commande ansible-inventory --list et son format JSON.

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 → Ansible

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).

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).

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.

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.

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.

SituationSource recommandée
Homelab bare-metal/KVMlibvirt (lab inventaires/dynamique-kvm)
Homelab ProxmoxProxmox (VM + IP en une call)
Cloud AWSAWS EC2
Cloud Azureazure.azcollection.azure_rm
Cloud GCPgoogle.cloud.gcp_compute
Parc on-prem avec NetBoxNetBox (source de vérité)
API maison ou CMDB exotiqueScript custom
Mix on-prem + cloudPlusieurs -i combinés
SymptômeCauseFix
Plugin non trouvéPas activé dans ansible.cfg[inventory] enable_plugins = community.libvirt.libvirt, ...
Inventaire videCredentials manquants ou filtre trop restrictifansible-inventory -i ... --list -vvv pour voir l’API call
Plugin lent (>5s)Pas de cacheActiver cache: true dans la config plugin
auto plugin essaie de parser comme YAML statiqueFichier ne contient pas plugin: <nom> au topVérifier le fichier de config plugin
Hôtes dupliqués entre statique et dynamiqueAucun problème si les variables matchentSinon mettre les variables dans host_vars/ (chargé après les deux)
  • 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 lab inventaires/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.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn