Manual, documented bare-metal Proxmox install + cloud-init template build (deliberately not automated — a fragile one-time step). Terraform/OpenTofu config creates rn-platform-01/rn-lab-host-01 from that template via the bpg/proxmox provider, with configurable (not hardcoded) VM sizing. Validated: tofu fmt, tofu init -backend=false (real provider download), tofu validate -> Success. No paid state backend required (local state).
67 lines
2.3 KiB
Terraform
67 lines
2.3 KiB
Terraform
variable "proxmox_api_url" {
|
|
description = "e.g. https://proxmox.example.internal:8006/api2/json"
|
|
type = string
|
|
}
|
|
variable "proxmox_api_token" {
|
|
description = "Proxmox API token (user@realm!tokenid=uuid) — never committed, see terraform.tfvars.example"
|
|
type = string
|
|
sensitive = true
|
|
}
|
|
variable "proxmox_tls_insecure" {
|
|
description = "Set true only if the Proxmox host uses a self-signed cert with no CA to trust"
|
|
type = bool
|
|
default = false
|
|
}
|
|
variable "proxmox_node" {
|
|
description = "Proxmox node name (e.g. 'pve')"
|
|
type = string
|
|
}
|
|
variable "vm_template_name" {
|
|
description = "Name of the pre-built cloud-init Ubuntu 22.04 template (see infra/terraform/README.md prerequisites)"
|
|
type = string
|
|
default = "ubuntu-22.04-cloudinit"
|
|
}
|
|
variable "vm_disk_datastore" {
|
|
description = "Proxmox storage/datastore for VM disks — set once real disk layout is decided (docs/PHASE4_PRODUCTION_INFRASTRUCTURE.md §4)"
|
|
type = string
|
|
default = "local-zfs"
|
|
}
|
|
variable "ssh_public_key" {
|
|
description = "Public key injected via cloud-init for the rootnode-deploy user"
|
|
type = string
|
|
}
|
|
variable "management_cidr" {
|
|
description = "Same value as infra/ansible/group_vars/production.yml's management_cidr — used for the VM firewall's SSH allow rule at the Proxmox level too, if managed there"
|
|
type = string
|
|
}
|
|
|
|
# ── rn-platform-01 sizing — baseline/recommended/max-growth (Phase 4 §3) ──────────────────
|
|
variable "platform_vm" {
|
|
description = "rn-platform-01 sizing. 'baseline' is the default; bump via terraform.tfvars once real hardware/load data exists."
|
|
type = object({
|
|
cores = number
|
|
memory = number # MB
|
|
disk_gb = number
|
|
})
|
|
default = {
|
|
cores = 4
|
|
memory = 16384
|
|
disk_gb = 100
|
|
}
|
|
}
|
|
|
|
# ── rn-lab-host-01 sizing — majority of host resources, per the Phase 4 spec ───────────────
|
|
variable "lab_host_vm" {
|
|
description = "rn-lab-host-01 sizing. Deliberately NOT a final number — see docs/CAPACITY_PLANNING.md; this default is a conservative starting point for a 16c/32t/128GB class host, not a target."
|
|
type = object({
|
|
cores = number
|
|
memory = number # MB
|
|
disk_gb = number
|
|
})
|
|
default = {
|
|
cores = 24
|
|
memory = 98304
|
|
disk_gb = 500
|
|
}
|
|
}
|