titan-iac/terraform/atlas/variables.tf
2026-07-16 03:25:30 -03:00

94 lines
3.0 KiB
HCL

variable "kubeconfig_path" {
type = string
description = "Kubeconfig used by the Kubernetes provider for Atlas day-zero/declarative resources."
default = "~/.kube/config"
}
variable "kubeconfig_context" {
type = string
description = "Optional kubeconfig context. Leave null to use the kubeconfig current-context."
default = null
}
variable "default_ssh_user" {
type = string
description = "Default SSH user emitted into the generated Ananke inventory fragment."
default = "atlas"
}
variable "default_ssh_port" {
type = number
description = "Default SSH port emitted into the generated Ananke inventory fragment."
default = 2277
}
variable "default_ssh_config_file" {
type = string
description = "Default SSH config file emitted into the generated Ananke inventory fragment."
default = "/home/atlas/.ssh/config"
}
variable "default_ssh_identity_file" {
type = string
description = "Default SSH identity file emitted into the generated Ananke inventory fragment."
default = "/home/atlas/.ssh/id_ed25519"
}
variable "ananke_inventory_fragment_path" {
type = string
description = "Where Terraform writes the generated non-secret Ananke inventory fragment."
default = "generated/ananke.inventory.yaml"
}
variable "node_label_field_manager" {
type = string
description = "Kubernetes server-side apply field manager for Terraform-owned node labels."
default = "terraform-atlas-node-labels"
}
variable "force_node_label_conflicts" {
type = bool
description = "Set true only during a deliberate node-label adoption if Kubernetes field ownership conflicts."
default = false
}
variable "nodes" {
type = map(object({
ip = string
role = string
managed = optional(bool, true)
ignore_unavailable = optional(bool, false)
ssh_user = optional(string)
ssh_port = optional(number)
ssh_config_file = optional(string)
ssh_identity_file = optional(string)
labels = optional(map(string), {})
}))
description = "Atlas host and Kubernetes node inventory. role is control-plane, worker, or recovery."
validation {
condition = alltrue([
for node in values(var.nodes) : contains(["control-plane", "worker", "recovery"], node.role)
])
error_message = "Each node role must be one of: control-plane, worker, recovery."
}
}
variable "render_flux_day_zero_manifests" {
type = bool
description = "Render day-zero Flux manifests from the existing clusters/atlas/flux-system artifacts."
default = false
}
variable "apply_flux_day_zero_manifests" {
type = bool
description = "Dangerous: apply rendered day-zero Flux manifests with kubectl. Keep false for steady state."
default = false
}
variable "flux_day_zero_output_path" {
type = string
description = "Rendered Flux day-zero manifest path when render_flux_day_zero_manifests is true."
default = "generated/flux-day-zero.yaml"
}