Files
Infra-LAB/terraform/IT-Konoha/vms-application.tf
T

103 lines
2.6 KiB
Terraform

# =============================================================================
# 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 }
}