Files
cluster-knaster/platform/proxmox/tofu/main.tf
T

154 lines
3.5 KiB
Terraform
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GPU-Mappings, GPU-VMs und Infra-LXC aus sites/<site>/proxmox.yaml.
# Nicht gegen einen echten Cluster getestet – beim gemeinsamen Deployment zuerst `tofu plan`.
resource "proxmox_virtual_environment_hardware_mapping_pci" "gpu" {
for_each = local.site.pci_mappings
name = each.key
map = [{
node = each.value.node
path = each.value.path
id = each.value.id
subsystem_id = each.value.subsystem_id
iommu_group = each.value.iommu_group
}]
}
resource "proxmox_virtual_environment_vm" "gpu" {
for_each = local.site.vms
name = each.key
node_name = each.value.node
vm_id = each.value.vmid
tags = ["knaster", each.value.role, each.value.driver_generation]
machine = "q35"
bios = "ovmf"
on_boot = true
clone {
vm_id = local.site.cluster.template_vmid
full = true
}
cpu {
cores = each.value.cores
type = "host"
}
# PCI-Passthrough pinnt den gesamten RAM → kein Ballooning
memory {
dedicated = each.value.memory_mb
floating = 0
}
efi_disk {
datastore_id = local.site.cluster.storage_vm
type = "4m"
}
disk {
datastore_id = local.site.cluster.storage_vm
interface = "scsi0"
size = each.value.disk_gb
discard = "on"
ssd = true
}
# Modelle: eigenes Disk-Image, nicht repliziert, nicht gesichert (ADR-0002)
disk {
datastore_id = local.site.cluster.storage_vm
interface = "scsi1"
size = each.value.models_disk_gb
discard = "on"
ssd = true
backup = false
replicate = false
}
hostpci {
device = "hostpci0"
mapping = proxmox_virtual_environment_hardware_mapping_pci.gpu[each.value.gpu].name
pcie = true
rombar = true
}
network_device {
bridge = local.site.cluster.bridge
vlan_id = local.site.cluster.vlan_svc
}
initialization {
datastore_id = local.site.cluster.storage_vm
ip_config {
ipv4 {
address = each.value.ip
gateway = local.site.cluster.gateway
}
}
dns {
servers = [local.site.cluster.dns]
}
user_account {
username = "knaster"
keys = [local.ssh_key]
}
}
}
resource "proxmox_virtual_environment_container" "infra" {
for_each = local.site.containers
node_name = each.value.node
vm_id = each.value.vmid
tags = ["knaster", "infra"]
unprivileged = true
start_on_boot = true
features {
nesting = true # Docker im LXC
}
cpu {
cores = each.value.cores
}
memory {
dedicated = each.value.memory_mb
}
disk {
datastore_id = local.site.cluster.storage_vm
size = each.value.disk_gb
}
operating_system {
template_file_id = "${local.site.cluster.storage_iso}:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst"
type = "debian"
}
network_interface {
name = "eth0"
bridge = local.site.cluster.bridge
vlan_id = local.site.cluster.vlan_svc
}
initialization {
hostname = each.key
ip_config {
ipv4 {
address = each.value.ip
gateway = local.site.cluster.gateway
}
}
user_account {
keys = [local.ssh_key]
}
}
}
resource "proxmox_virtual_environment_haresource" "infra" {
for_each = { for k, v in local.site.containers : k => v if try(v.ha, false) }
resource_id = "ct:${each.value.vmid}"
state = "started"
comment = "knaster ${each.key}"
depends_on = [proxmox_virtual_environment_container.infra]
}