L'inventaire dynamique Ansible interroge l'API de Proxmox VE pour lister automatiquement vos VMs et conteneurs, au lieu de maintenir un fichier d'inventaire à la main. À chaque exécution, Ansible récupère l'état réel du cluster (machines, adresses IP, tags, statut) via le plugin community.general.proxmox. Ce guide configure ce plugin avec un token API, teste l'inventaire, puis l'enrichit pour récupérer les IP et grouper les machines par tags. Pour administrateurs qui automatisent un Proxmox avec Ansible.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer un token API Proxmox pour Ansible.
- Configurer le plugin
community.general.proxmox. - Lister VMs et conteneurs avec
ansible-inventory --graph. - Récupérer les IP via le
qemu-guest-agentet grouper par tags. - Cibler ces groupes dans un playbook.
Prérequis
Section intitulée « Prérequis »- Un Proxmox VE accessible (idéalement provisionné avec Terraform).
- Ansible installé et la collection community.general.
- Des VMs avec le
qemu-guest-agentactif pour remonter les adresses IP.
Pourquoi un inventaire dynamique
Section intitulée « Pourquoi un inventaire dynamique »Un inventaire statique (un fichier listant les hôtes) se désynchronise dès qu'une VM est créée, détruite ou change d'IP. L'inventaire dynamique supprime ce problème : il reflète en temps réel l'état du cluster Proxmox. Ansible cible toujours les bonnes machines, sans maintenance manuelle, ce qui est indispensable dès que l'infrastructure bouge souvent.
Créer un token API pour Ansible
Section intitulée « Créer un token API pour Ansible »Le plugin se connecte à Proxmox avec un token API, plus sûr qu'un mot de passe (révocable, périmètre limité). Créez un utilisateur dédié et son token :
pveum user add ansible@pvepveum user token add ansible@pve inventory --privsep 0pveum acl modify / --users ansible@pve --roles PVEAuditorLe rôle PVEAuditor suffit : l'inventaire n'a besoin que de lire l'état du cluster. Notez le token_id (inventory) et le secret affiché, il ne sera plus jamais réaffiché.
Configurer le plugin Proxmox
Section intitulée « Configurer le plugin Proxmox »Installez la collection si nécessaire :
ansible-galaxy collection install community.generalCréez un fichier d'inventaire dont le nom se termine par .proxmox.yml (par exemple inventory.proxmox.yml) :
plugin: community.general.proxmoxurl: https://proxmox.exemple.lan:8006user: ansible@pvetoken_id: inventorytoken_secret: "votre-secret-de-token"validate_certs: falseL'option validate_certs: false accepte le certificat auto-signé par défaut de Proxmox.
Tester l'inventaire
Section intitulée « Tester l'inventaire »La commande --graph affiche les groupes générés automatiquement par le plugin :
ansible-inventory -i inventory.proxmox.yml --graph@all: |--@ungrouped: |--@proxmox_all_lxc: |--@proxmox_all_qemu: | |--test.exemple.lan |--@proxmox_all_running: | |--test.exemple.lan |--@proxmox_all_stopped: |--@proxmox_nodes: | |--devbox1 |--@proxmox_devbox1_qemu: | |--test.exemple.lanLe plugin crée d'office des groupes par type (qemu, lxc), par statut (running, stopped) et par nœud. Pratique pour cibler, par exemple, toutes les VMs en marche.
Récupérer les IP et grouper par tags
Section intitulée « Récupérer les IP et grouper par tags »Par défaut, l'inventaire ne connaît pas l'adresse IP des machines. On la dérive des interfaces remontées par le qemu-guest-agent, et on crée des groupes à partir des tags Proxmox :
want_proxmox_nodes_ansible_host: truecompose: ansible_host: proxmox_agent_interfaces[1]["ip-addresses"][0].split('/')[0]keyed_groups: - key: proxmox_tags_parsed separator: ""groups: ubuntu_servers: "'ubuntu' in (proxmox_tags_parsed | list)"composecalculeansible_hostà partir de la première IP de la seconde interface (la première étantlo).keyed_groupscrée un groupe par tag (une VM taguéeubunturejoint le groupeubuntu).groupsdéfinit un groupe conditionnelubuntu_servers.
Relancez avec --list pour voir les facts récupérés (extrait) :
"test.exemple.lan": { "ansible_host": "192.168.3.167", "proxmox_status": "running", "proxmox_tags_parsed": ["ubuntu"], "proxmox_vmid": 100, "proxmox_vmtype": "qemu"}Chaque machine remonte des dizaines de facts (proxmox_cores, proxmox_memory, proxmox_node...), exploitables dans vos playbooks.
Simplifier avec ansible.cfg
Section intitulée « Simplifier avec ansible.cfg »Pour éviter de répéter -i inventory.proxmox.yml, créez un ansible.cfg :
[defaults]inventory = ./inventory.proxmox.ymlhost_key_checking = Falseforks = 10
[ssh_connection]pipelining = TrueCibler les groupes dans un playbook
Section intitulée « Cibler les groupes dans un playbook »L'inventaire dynamique prend tout son sens dans un playbook qui vise un groupe plutôt que des hôtes nommés. Ici, le groupe ubuntu (créé depuis le tag) :
---- name: Configuration des serveurs Ubuntu hosts: ubuntu gather_facts: true become: true
tasks: - name: Mettre à jour le cache APT ansible.builtin.apt: update_cache: true cache_valid_time: 3600ansible-playbook playbook.ymlPLAY RECAP *********************************************************************test.exemple.lan : ok=2 changed=0 unreachable=0 failed=0Le playbook s'applique automatiquement à toute machine taguée ubuntu dans Proxmox, sans jamais éditer d'inventaire.
À retenir
Section intitulée « À retenir »- L'inventaire dynamique reflète l'état réel du cluster Proxmox, sans fichier d'hôtes à maintenir.
- Le plugin
community.general.proxmoxse connecte via un token API (rôlePVEAuditorsuffisant). - Le fichier d'inventaire doit se terminer par
.proxmox.yml. - Le
composerécupère l'IP via leqemu-guest-agent; sans agent, pas d'ansible_host. keyed_groupstransforme les tags Proxmox en groupes Ansible directement ciblables.
FAQ : questions fréquentes sur l'inventaire dynamique Proxmox
Section intitulée « FAQ : questions fréquentes sur l'inventaire dynamique Proxmox »Un inventaire généré depuis l'API
Un inventaire dynamique est construit automatiquement en interrogeant l'API de Proxmox VE, au lieu d'un fichier d'hôtes écrit à la main. Le plugincommunity.general.proxmox récupère, à chaque exécution :- la liste des VMs et conteneurs ;
- leur statut (running, stopped) et leur nœud ;
- leurs tags et leurs adresses IP.
L'agent invité est requis
L'inventaire dérive l'IP des interfaces remontées par leqemu-guest-agent. Si l'agent n'est pas installé ou pas actif dans la VM :proxmox_agent_interfacesest vide ;- le
composequi calculeansible_hostrenvoienull.
qemu-guest-agent dans chaque VM (et cocher l'option Agent côté Proxmox). L'IP remonte alors automatiquement.PVEAuditor en lecture seule
L'inventaire n'a besoin que de lire l'état du cluster : le rôlePVEAuditor suffit, inutile de donner des droits d'écriture.pveum user add ansible@pve
pveum user token add ansible@pve inventory --privsep 0
pveum acl modify / --users ansible@pve --roles PVEAuditor
Un token API est préférable à un mot de passe : il est révocable et à périmètre limité. Conservez le secret affiché à la création, il n'est plus jamais réaffiché.keyed_groups sur les tags
Le plugin transforme les tags Proxmox en groupes Ansible viakeyed_groups :keyed_groups:
- key: proxmox_tags_parsed
separator: ""
groups:
ubuntu_servers: "'ubuntu' in (proxmox_tags_parsed | list)"
keyed_groups: chaque tag devient un groupe (une VM taguéeubunturejoint le groupeubuntu).groups: définit des groupes conditionnels nommés (ubuntu_servers).