2026-07-16 03:25:30 -03:00

75 lines
1.9 KiB
HCL

locals {
control_planes = sort([
for name, node in var.nodes : name
if node.role == "control-plane"
])
workers = sort([
for name, node in var.nodes : name
if node.role == "worker"
])
ssh_managed_nodes = sort([
for name, node in var.nodes : name
if node.managed
])
ssh_node_hosts = {
for name, node in var.nodes : name => node.ip
if node.managed
}
ssh_node_users = {
for name, node in var.nodes : name => node.ssh_user
if node.managed && try(node.ssh_user, null) != null && node.ssh_user != var.default_ssh_user
}
required_node_labels = {
for name, node in var.nodes : name => node.labels
if length(node.labels) > 0
}
ignore_unavailable_nodes = sort([
for name, node in var.nodes : name
if node.ignore_unavailable
])
ananke_inventory = {
ssh_user = var.default_ssh_user
ssh_port = var.default_ssh_port
ssh_config_file = var.default_ssh_config_file
ssh_identity_file = var.default_ssh_identity_file
ssh_node_hosts = local.ssh_node_hosts
ssh_node_users = local.ssh_node_users
ssh_managed_nodes = local.ssh_managed_nodes
control_planes = local.control_planes
workers = local.workers
startup = {
required_node_labels_mode = "validate"
required_node_labels = local.required_node_labels
ignore_unavailable_nodes = local.ignore_unavailable_nodes
}
}
}
resource "kubernetes_labels" "node" {
for_each = local.required_node_labels
api_version = "v1"
kind = "Node"
field_manager = var.label_field_manager
force = var.force_node_label_conflicts
metadata {
name = each.key
}
labels = each.value
}
resource "local_file" "ananke_inventory_fragment" {
filename = var.ananke_inventory_fragment_path
file_permission = "0640"
content = "# Generated by Terraform. Do not add secrets here.\n${yamlencode(local.ananke_inventory)}"
}