infrastructure/pve01.wheatley.in/templates/talos/main.tf

88 lines
1.9 KiB
Terraform
Raw Normal View History

2025-11-15 20:49:31 +01:00
provider "proxmox" {
endpoint = var.proxmox_endpoint
api_token = var.proxmox_api_token
2025-11-27 16:37:46 +01:00
ssh {
agent = true
username = "root"
}
2025-11-15 20:49:31 +01:00
}
2025-11-27 16:37:46 +01:00
2025-11-15 20:49:31 +01:00
locals {
2025-11-18 22:14:35 +01:00
talos_versions = ["1.11.5"]
2025-11-15 20:49:31 +01:00
}
data "http" "schematic" {
url = "https://factory.talos.dev/schematics"
method = "POST"
request_body = file("${path.module}/schematic.yaml")
request_headers = {
"Content-Type" = "application/x-yaml"
}
}
locals {
schematic_id = jsondecode(data.http.schematic.response_body)["id"]
storagepool = "nvme-fastpool"
}
2025-11-27 16:37:46 +01:00
resource "proxmox_virtual_environment_download_file" "talos-image" {
2025-11-15 20:49:31 +01:00
for_each = toset(local.talos_versions)
2025-11-27 16:37:46 +01:00
node_name = "pve01"
datastore_id = "local"
content_type = "iso"
2025-11-15 20:49:31 +01:00
2025-11-27 16:37:46 +01:00
url = "https://factory.talos.dev/image/${local.schematic_id}/v${each.value}/nocloud-amd64-secureboot.raw.gz"
file_name = "talos-${each.value}-nocloud-amd64-secureboot.img"
decompression_algorithm = "gz"
2025-11-15 20:49:31 +01:00
}
resource "proxmox_virtual_environment_vm" "talos-template" {
2025-11-27 16:37:46 +01:00
depends_on = [proxmox_virtual_environment_download_file.talos-image]
for_each = toset(local.talos_versions)
2025-11-15 20:49:31 +01:00
2025-11-27 16:37:46 +01:00
template = true
vm_id = 10000 + tonumber(replace(each.value, ".", ""))
name = "talos-template-${each.value}"
node_name = "pve01"
tags = ["tofu"]
bios = "ovmf"
on_boot = true
machine = "q35"
2025-11-15 20:49:31 +01:00
operating_system {
type = "l26"
}
agent {
enabled = true
}
cpu {
cores = 2
sockets = 1
type = "x86-64-v2-AES"
}
memory {
dedicated = 2048
}
disk {
datastore_id = local.storagepool
interface = "virtio0"
2025-11-27 16:37:46 +01:00
file_id = proxmox_virtual_environment_download_file.talos-image[each.value].id
2025-11-15 20:49:31 +01:00
file_format = "raw"
}
efi_disk {
datastore_id = local.storagepool
file_format = "raw"
type = "4m"
}
tpm_state {
datastore_id = local.storagepool
version = "v2.0"
}
network_device {
bridge = "vmbr1"
}
}