# inventory.tf # On fusionne toutes nos ressources VM en une seule map locals { all_lab_vms = merge( proxmox_virtual_environment_vm.monitoring_vms, ) } locals { # On boucle sur chaque VM créée par Terraform pour enrichir les données. vms_with_metadata = { for key, vm in local.all_lab_vms : key => { # On garde les informations de base name : vm.name ip_address : var.monitoring_vms[key].ip proxmox_node : vm.node_name # On trouve le tag de l'OS de manière robuste # - setintersection compare les tags de la VM avec notre liste d'OS connus. # - Le résultat est une liste avec l'élément commun (ex: ["ubuntu"]). # - one() prend cet unique élément et échoue si on trouve 0 ou plus d'un OS, ce qui est une sécurité. os_distro : one(setintersection(local.known_os_tags, toset(vm.tags))) } } } # Création du fichier d'inventaire pour Ansible resource "local_file" "ansible_inventory" { filename = "${path.module}/../../ansible/inventory/01_lab_hosts.yml" # On envoie notre nouvelle map enrichie au template ! content = templatefile("${path.module}/templates/inventory.yml.tftpl", { vms = local.vms_with_metadata # On utilise la nouvelle variable locale }) }