Migration provider bpg, templates cloud-init propres, cluster k3s HA (control-plane)
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
# =============================================================================
|
||||
# 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 }
|
||||
}
|
||||
Reference in New Issue
Block a user