37 lines
1.2 KiB
HCL
37 lines
1.2 KiB
HCL
# 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
|
|
})
|
|
}
|