Talos on Proxmox WIP

This commit is contained in:
2026-09-01 17:31:47 -04:00
parent aedb670c35
commit ae8bf2926f
13 changed files with 170 additions and 11 deletions
+5 -3
View File
@@ -1,4 +1,6 @@
data "proxmox_vm" "ch01" { data "proxmox_virtual_environment_nodes" "hvc01" {}
id = 100
node_name = "hv01" data "proxmox_virtual_environment_node" "hvc01" {
for_each = toset(data.proxmox_virtual_environment_nodes.hvc01.names)
node_name = each.value
} }
+31
View File
@@ -0,0 +1,31 @@
# resource "proxmox_virtual_environment_file" "cloud_init_user_data" {
# for_each = toset(var.vm_guests)
# content_type = "snippets"
# datastore_id = "local"
# file_mode = 0666
# node_name = each.value.host
# overwrite = true
# source_raw {
# data = templatefile()
# file_name = "cloud_init_user_data_${each.value.name}.yml"
# }
# timeout_upload = 10
# upload_mode = "stream"
# }
resource "proxmox_virtual_environment_file" "talos_iso" {
for_each = data.proxmox_virtual_environment_node.hvc01
content_type = "iso"
datastore_id = "local"
node_name = each.value.id
overwrite = false
source_file {
# checksum =
file_name = "talos_${local.talos_version}.iso"
insecure = false
min_tls = "1.2"
path = data.talos_image_factory_urls.this.urls.iso_secureboot
}
timeout_upload = 120
# upload_mode = # N/A, has no effect when content_type = iso
}
+16
View File
@@ -0,0 +1,16 @@
customization:
systemExtensions:
officialExtensions:
- siderolabs/amd-ucode
- siderolabs/amdgpu
- siderolabs/i915
- siderolabs/intel-ucode
- siderolabs/lldpd
- siderolabs/nfs-utils
- siderolabs/nfsd
- siderolabs/nfsrahead
- siderolabs/nut-client
- siderolabs/nvme-cli
- siderolabs/qemu-guest-agent
- siderolabs/xe
bootloader: sd-boot
+5
View File
@@ -0,0 +1,5 @@
locals {
hv01_id = [ for node in data.proxmox_virtual_environment_node.hvc01 : node if node.node_name == "hv01"][0].id
# Validate talos_version variable
talos_version = [ for version in data.talos_image_factory_versions.this.talos_versions : version if version == var.talos_version][0]
}
+13 -4
View File
@@ -1,6 +1,15 @@
output "ch01" { # output "ch01" {
description = "Container Host 01 VM details" # description = "Container Host 01 VM details"
value = { # value = {
status = data.proxmox_vm.ch01.status # status = data.proxmox_vm.ch01.status
# }
# }
output "talos_schematic_id" {
value = talos_image_factory_schematic.this.id
} }
output "debug" {
description = "For debugging resource or data key values"
value = data.talos_image_factory_urls.this.urls
} }
Binary file not shown.
+16
View File
@@ -5,4 +5,20 @@ provider "proxmox" {
random_vm_ids = true random_vm_ids = true
random_vm_id_start = 10000 random_vm_id_start = 10000
random_vm_id_end = 99999 random_vm_id_end = 99999
ssh {
username = "ladmin"
agent = true
node_address_source = "dns"
node {
name = "hv01"
address = "hv01.balsillie.house"
port = 22
} }
node {
name = "hv02"
address = "hv02.balsillie.house"
port = 22
}
}
}
provider "talos" {}
+2
View File
@@ -0,0 +1,2 @@
talos_version = "v1.13.9"
cluster_endpoint = "https://k8s01.balsillie.house:6443"
+19
View File
@@ -0,0 +1,19 @@
resource "talos_machine_secrets" "this" {
talos_version = local.talos_version
}
resource "talos_image_factory_schematic" "this" {
schematic = file("${path.root}/files/talos_image_schematic.yml")
}
data "talos_image_factory_versions" "this" {
filters = {
stable_versions_only = true
}
}
data "talos_image_factory_urls" "this" {
talos_version = local.talos_version
schematic_id = talos_image_factory_schematic.this.id
platform = "nocloud"
}
@@ -0,0 +1,27 @@
cluster:
id: <CLUSTER_ID>
secret: <CLUSTER_SECRET>
token: <BOOTSTRAP_TOKEN>
endpoint: https://<LOAD_BALANCER_IP>:6443
machine:
type: controlplane
token: <JOIN_TOKEN>
kubelet:
image: ghcr.io/siderolabs/kubelet:v1.29.0
install:
disk: /dev/sda
image: ghcr.io/siderolabs/installer:v1.6.0
bootLOADER: grub
network:
interfaces:
- interface: eth0
dhcp: true
nameservers:
- 8.8.8.8
sysctls:
fs.inotify.max_user_watches: "1048576"
features:
rbac: true
stableHostname: true
appArmor: true
+4
View File
@@ -6,6 +6,10 @@ terraform {
source = "registry.terraform.io/bpg/proxmox" source = "registry.terraform.io/bpg/proxmox"
version = ">= 0.111.1" version = ">= 0.111.1"
} }
talos = {
source = "registry.terraform.io/siderolabs/talos"
version = "0.11.0"
}
} }
backend "local" { backend "local" {
+18
View File
@@ -0,0 +1,18 @@
variable "vm_guests" {
type = list(object({
name = string
host = string
ipv4_address = string
role = string
cpu = number
memory = number
}))
}
variable "talos_version" {
type = string
}
variable "cluster_endpoint" {
type = string
}
+10
View File
@@ -0,0 +1,10 @@
vm_guests = [
{
cpu = 1
host = "hv01"
ipv4_address = "10.96.10.61"
memory = 4096
name = "k8s01-cp01"
role = "talos_control_plane"
}
]