Files
iac-homelab/terraform/prod/02-monitoring-services.tf
2025-06-09 11:58:11 +02:00

76 lines
1.9 KiB
HCL

# Fichier: terraform/environments/prod/02-monitoring-services.tf
# 1. On cherche TOUS les templates disponibles sur le noeud Proxmox
data "proxmox_virtual_environment_vms" "all_templates" {
node_name = var.target_node
tags = ["template"] # On suppose que tous tes templates ont le tag "template"
}
# 2. On transforme la liste de templates en une map pratique pour les retrouver par OS
locals {
# Liste des tags d'OS que nous utilisons
known_os_tags = toset(["ubuntu", "alpine", "rocky", "debian"])
# Crée une map du type : { "ubuntu" = { vm_id = 101, name = "ubuntu-..." }, "alpine" = { ... } }
template_map = {
for t in data.proxmox_virtual_environment_vms.all_templates.vms :
one(setintersection(local.known_os_tags, t.tags)) => t
}
}
# 3. On crée nos VMs en utilisant la syntaxe correcte
resource "proxmox_virtual_environment_vm" "monitoring_vms" {
for_each = var.monitoring_vms
name = "${each.key}.lab.home.arnodo.fr"
node_name = var.target_node
tags = ["terraform-managed", "monitoring", each.value.os]
on_boot = true
agent {
enabled = true
}
cpu {
cores = each.value.cores
type = lookup(each.value, "cpu_type", "qemu64")
}
memory {
dedicated = each.value.memory
}
disk {
interface = "scsi0"
datastore_id = "local-lvm"
size = each.value.disk_gb
}
network_device {
bridge = "vmbr0"
model = "virtio"
}
# Bloc de clonage utilisant l'ID du template trouvé dynamiquement
clone {
vm_id = local.template_map[each.value.os].vm_id
}
# Bloc d'initialisation (Cloud-Init) simplifié
initialization {
# Configuration réseau
ip_config {
ipv4 {
address = "${each.value.ip}/24"
gateway = each.value.gateway
}
}
# Configuration de l'utilisateur
user_account {
username = "damien" # Ou un autre utilisateur par défaut
keys = [file(var.admin_ssh_public_key_path)]
}
}
}