feat(fastpass): Talos cluster provisioning and bootstrap

- Terraform: VM provisioning, Unifi DHCP, Technitium DNS
- talhelper: cluster config for 6-node Talos cluster
- Cilium 1.19.4 CNI with Talos-compatible security context
- docs: city-hall setup guide and bootstrap runbook
This commit is contained in:
2026-05-17 16:08:19 -05:00
parent 9f3ac95d8d
commit 97e9889251
16 changed files with 1205 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
# ─── Provider Authentication ─────────────────────────────────────────────────
# Passed through from the cluster root module — not declared here since
# provider config lives in the root module's providers.tf.
# ─── Node Identity ───────────────────────────────────────────────────────────
variable "hostname" {
type = string
description = "Node hostname (e.g., space-mountain). Used as the Proxmox VM name."
}
variable "vm_id" {
type = number
description = "Proxmox VM ID. Convention: {third_octet}{fourth_octet:03d} (e.g., 10.1.71.66 → 71066)."
}
variable "node_role" {
type = string
description = "Role of the node in the cluster. Used for tagging."
validation {
condition = contains(["controlplane", "worker"], var.node_role)
error_message = "node_role must be 'controlplane' or 'worker'."
}
}
# ─── Proxmox Placement ───────────────────────────────────────────────────────
variable "target_node" {
type = string
description = "Proxmox node to place this VM on (e.g., main-street-usa, tomorrowland, fantasyland)."
}
variable "datastore" {
type = string
description = "Proxmox storage pool for the VM disk."
default = "liberty-tree"
}
# ─── Boot Image ──────────────────────────────────────────────────────────────
variable "iso_file_id" {
type = string
description = "Proxmox file ID for the Talos ISO (e.g., local:iso/talos-v1.9.5-metal-amd64.iso). Output from proxmox_virtual_environment_download_file."
}
# ─── Hardware ────────────────────────────────────────────────────────────────
variable "cpu_cores" {
type = number
description = "Number of vCPU cores."
}
variable "memory_mb" {
type = number
description = "RAM in megabytes."
}
variable "disk_size" {
type = number
description = "OS disk size in gigabytes. Talos manages its own partition layout."
}
# ─── Network ─────────────────────────────────────────────────────────────────
variable "bridge" {
type = string
description = "Proxmox network bridge."
default = "vmbr0"
}