124 lines
3.3 KiB
Terraform
124 lines
3.3 KiB
Terraform
variable "proxmox_endpoint" {
|
|
description = "Proxmox URL endpoint"
|
|
type = string
|
|
}
|
|
|
|
variable "proxmox_api_token" {
|
|
description = "Proxmox API token"
|
|
type = string
|
|
sensitive = true
|
|
}
|
|
|
|
variable "proxmox_ssh_username" {
|
|
description = "Proxmox SSH username"
|
|
type = string
|
|
sensitive = true
|
|
}
|
|
|
|
variable "proxmox_ssh_password" {
|
|
description = "Proxmox SSH password"
|
|
type = string
|
|
sensitive = true
|
|
}
|
|
|
|
variable "vm_attr" {
|
|
description = "VM attributes per role. max_per_node = 0 means unlimited VMs per node."
|
|
type = map(object({
|
|
ram = number
|
|
cpu = number
|
|
vlan = number
|
|
count = number
|
|
max_per_node = number
|
|
}))
|
|
default = {
|
|
"master" = { ram = 2048, cpu = 2, vlan = 66, count = 3, max_per_node = 1 }
|
|
"worker" = { ram = 4096, cpu = 2, vlan = 66, count = 3, max_per_node = 0 }
|
|
}
|
|
|
|
validation {
|
|
condition = alltrue([for v in values(var.vm_attr) : v.count >= 1])
|
|
error_message = "Each role must deploy at least 1 VM."
|
|
}
|
|
|
|
validation {
|
|
condition = alltrue([for v in values(var.vm_attr) : v.max_per_node >= 0])
|
|
error_message = "max_per_node must be 0 (unlimited) or a positive number."
|
|
}
|
|
|
|
validation {
|
|
condition = length([for v in values(var.vm_attr) : v if v.max_per_node == 1]) == 1
|
|
error_message = "Exactly one role must have max_per_node = 1 (the control-plane role)."
|
|
}
|
|
}
|
|
|
|
variable "master_cpu" {
|
|
description = "Master role CPU override. null keeps the vm_attr default."
|
|
type = number
|
|
default = null
|
|
|
|
validation {
|
|
condition = var.master_cpu == null || var.master_cpu >= 1
|
|
error_message = "master_cpu must be null or at least 1."
|
|
}
|
|
}
|
|
|
|
variable "master_ram" {
|
|
description = "Master role RAM override in GiB (converted to MiB internally). null keeps the vm_attr default."
|
|
type = number
|
|
default = null
|
|
|
|
validation {
|
|
condition = var.master_ram == null || var.master_ram >= 1
|
|
error_message = "master_ram must be null or at least 1 GiB."
|
|
}
|
|
}
|
|
|
|
variable "master_vlan" {
|
|
description = "Master role VLAN override. null keeps the vm_attr default."
|
|
type = number
|
|
default = null
|
|
|
|
validation {
|
|
condition = var.master_vlan == null || var.master_vlan >= 1
|
|
error_message = "master_vlan must be null or at least 1."
|
|
}
|
|
}
|
|
|
|
variable "worker_cpu" {
|
|
description = "Worker role CPU override. null keeps the vm_attr default."
|
|
type = number
|
|
default = null
|
|
|
|
validation {
|
|
condition = var.worker_cpu == null || var.worker_cpu >= 1
|
|
error_message = "worker_cpu must be null or at least 1."
|
|
}
|
|
}
|
|
|
|
variable "worker_ram" {
|
|
description = "Worker role RAM override in GiB (converted to MiB internally). null keeps the vm_attr default."
|
|
type = number
|
|
default = null
|
|
|
|
validation {
|
|
condition = var.worker_ram == null || var.worker_ram >= 1
|
|
error_message = "worker_ram must be null or at least 1 GiB."
|
|
}
|
|
}
|
|
|
|
variable "worker_vlan" {
|
|
description = "Worker role VLAN override. null keeps the vm_attr default."
|
|
type = number
|
|
default = null
|
|
|
|
validation {
|
|
condition = var.worker_vlan == null || var.worker_vlan >= 1
|
|
error_message = "worker_vlan must be null or at least 1."
|
|
}
|
|
}
|
|
|
|
variable "vm_env" {
|
|
description = "VM environment"
|
|
type = string
|
|
default = "prod"
|
|
} |