fix(terraform): align VM config with real Proxmox state

This commit is contained in:
2026-03-12 20:39:58 +02:00
parent 8c20384333
commit 3af951d6ff
3 changed files with 47 additions and 3 deletions

View File

@@ -56,11 +56,27 @@ terraform output -json kubeconfig | jq -r '.homelab' > ~/.kube/config
terraform output -json talosconfig | jq -r '.homelab' > ~/.talos/config
```
## Talos Factory Image
The ISO is built via [Talos Image Factory](https://factory.talos.dev) with a custom schematic that includes:
- **QEMU guest agent** (`qemu-guest-agent` system extension)
- **i915** Intel iGPU firmware extension
**Schematic ID:** `aa948be975ffec096205160edd988ee6d949d72c20a39ca5844fc0a2a3fc8415`
**Installer reference:** `factory.talos.dev/metal-installer/aa948be975ffec096205160edd988ee6d949d72c20a39ca5844fc0a2a3fc8415:v1.12.5`
Download URL pattern:
```
https://factory.talos.dev/image/<schematic-id>/<version>/metal-amd64.iso
```
## Notes
- The Talos ISO resource has `prevent_destroy = true` to avoid accidental re-download
- Control plane node has `allowSchedulingOnControlPlanes = true` (single-node cluster)
- State files (`terraform.tfstate`, `terraform.tfstate.backup`, `terraform.tfvars`, `talosconfig`) are gitignored
- `gpu_mapping` is optional per cluster; omit it to skip PCI passthrough
## Next Steps

View File

@@ -2,8 +2,10 @@ resource "proxmox_virtual_environment_download_file" "talos_iso" {
content_type = "iso"
datastore_id = "local"
node_name = "pve"
url = "https://github.com/siderolabs/talos/releases/download/v1.12.3/metal-amd64.iso"
file_name = "talos-v1.12.3-metal-amd64.iso"
# Factory image with QEMU guest agent + i915 (Intel iGPU) extensions
# Schematic: aa948be975ffec096205160edd988ee6d949d72c20a39ca5844fc0a2a3fc8415
url = "https://factory.talos.dev/image/aa948be975ffec096205160edd988ee6d949d72c20a39ca5844fc0a2a3fc8415/v1.12.5/metal-amd64.iso"
file_name = "talos-v1.12.5-factory-metal-amd64.iso"
lifecycle {
prevent_destroy = true
@@ -16,8 +18,10 @@ resource "proxmox_virtual_environment_vm" "talos-vm" {
name = "talos-${each.key}-node0"
tags = ["terraform", "talos", each.key]
node_name = "pve"
on_boot = true
bios = "ovmf"
machine = "i440fx"
boot_order = ["scsi0", "ide3"]
cpu {
@@ -28,8 +32,14 @@ resource "proxmox_virtual_environment_vm" "talos-vm" {
dedicated = each.value.memory
}
agent {
enabled = true
type = "virtio"
}
network_device {
mac_address = each.value.mac_address
firewall = false
}
cdrom {
@@ -41,10 +51,27 @@ resource "proxmox_virtual_environment_vm" "talos-vm" {
interface = "scsi0"
size = each.value.disk_size_gb
datastore_id = each.value.datastore_id
aio = "io_uring"
cache = "none"
discard = "on"
ssd = true
}
efi_disk {
datastore_id = each.value.datastore_id
pre_enrolled_keys = false
}
dynamic "hostpci" {
for_each = each.value.gpu_mapping != null ? [each.value.gpu_mapping] : []
content {
device = "hostpci0"
mapping = hostpci.value
}
}
serial_device {
device = "socket"
}
}

View File

@@ -18,5 +18,6 @@ variable "clusters" {
mac_address = string
ip_address = string
datastore_id = string
gpu_mapping = optional(string)
}))
}