# ============================================================================= # VMs applicatives — patron générique (map + for_each) # ============================================================================= # Remplace l'ancien srv_docker_530.tf. Même structure que k3s-control-plane.tf : # une entrée dans `local.nodes` = une VM. Facile à dupliquer pour un futur # groupe de VMs (copier ce fichier, changer le nom des locals/resource/output). # # Actuellement vide de VM "vivante" : .20 (Immich) a été retiré du state # Terraform (modifiée à la main, cf. historique) et .21 a été détruite lors # du nettoyage du pool ZFS. Ajouter une entrée dans `local.nodes` pour toute # nouvelle VM applicative à déployer sur ce modèle. # ============================================================================= variable "nodes_sshkeys_file" { description = "Fichier de clés SSH autorisées (cluster + poste de travail)" type = string default = "./sshkeys.pub" } locals { # Exemple de structure attendue pour une future VM : # "srv-jellyfin" = { # node_name = "pve03" # vm_id = 533 # ip = "192.168.30.22" # gateway = "192.168.30.254" # vlan_id = 530 # datastore_id = "local-lvm" # cores = 2 # memory = 2048 # disk_size = 20 # } nodes = {} } resource "proxmox_virtual_environment_vm" "nodes" { for_each = local.nodes name = each.key node_name = each.value.node_name vm_id = each.value.vm_id clone { vm_id = 9000 # template debian13-cloudinit-template (stockage partagé VMs_NFS) full = true } agent { enabled = true } cpu { cores = each.value.cores sockets = 1 type = "x86-64-v2" } memory { dedicated = each.value.memory } scsi_hardware = "virtio-scsi-single" disk { datastore_id = each.value.datastore_id interface = "scsi0" size = each.value.disk_size iothread = true } network_device { bridge = "vmbr0" model = "virtio" vlan_id = each.value.vlan_id } initialization { datastore_id = each.value.datastore_id ip_config { ipv4 { address = "${each.value.ip}/24" gateway = each.value.gateway } } user_account { username = "root" keys = [for line in split("\n", replace(trimspace(file(var.nodes_sshkeys_file)), "\r", "")) : line if line != ""] } } operating_system { type = "l26" } stop_on_destroy = true } output "nodes_ips" { value = { for k, v in local.nodes : k => v.ip } }