maidn-talos-proxmox/terraform/talconfig_generator.tf

79 lines
3.2 KiB
HCL

# Generate talconfig.yaml from your terraform variables and locals
resource "local_file" "talconfig" {
filename = "${path.module}/../generated/talconfig.yaml"
content = templatefile("${path.module}/templates/talconfig.yaml.tpl", {
# Cluster configuration
cluster_name = var.cluster_name
cluster_endpoint = local.cluster_endpoint
cluster_domain = var.cluster_domain
talos_version = var.talos_version
talos_factory_schematic_id = var.talos_factory_schematic_id
control_plane_vip = var.control_plane_vip
# Network configuration
dns_servers = var.dns_servers
gateway = local.primary_gateway
network_cidr = local.primary_network_cidr
network_mask = split("/", local.primary_network_cidr)[1]
control_plane_nodes = [for node in var.nodes : {
name = node.name,
role = node.role,
networks = node.networks,
tags = node.tags,
proxmox_node = node.proxmox_node
} if node.role == "controlplane"]
compute_workers = [for node in var.nodes : {
name = node.name,
role = node.role,
networks = node.networks,
tags = node.tags,
proxmox_node = node.proxmox_node
} if node.role == "worker" && contains(lookup(node, "tags", []), "compute")]
storage_workers = [for node in var.nodes : {
name = node.name,
role = node.role,
networks = node.networks,
tags = node.tags,
proxmox_node = node.proxmox_node,
additional_disk_size = lookup(node, "additional_disk_size", "")
} if node.role == "worker" && contains(lookup(node, "tags", []), "storage")]
gpu_workers = [for node in var.nodes : {
name = node.name,
role = node.role,
networks = node.networks,
tags = node.tags,
proxmox_node = node.proxmox_node
} if node.role == "worker" && contains(lookup(node, "tags", []), "gpu")]
# Other variables
cluster_pod_nets = var.cluster_pod_nets
cluster_svc_nets = var.cluster_svc_nets
cni_name = var.cni_name
image_cache_proxy = var.image_cache_proxy
})
}
# (The output block is already correct from the last fix)
output "node_organization" {
description = "How your nodes are organized for Talos configuration"
value = {
control_plane_nodes = [for node in var.nodes : {
name = node.name, ip = node.networks[0].ip, tags = lookup(node, "tags", [])
} if node.role == "controlplane"]
compute_workers = [for node in var.nodes : {
name = node.name, ip = node.networks[0].ip, tags = lookup(node, "tags", [])
} if node.role == "worker" && contains(lookup(node, "tags", []), "compute")]
storage_workers = [for node in var.nodes : {
name = node.name, ip = node.networks[0].ip, tags = lookup(node, "tags", []), additional_disk = lookup(node, "additional_disk_size", null)
} if node.role == "worker" && contains(lookup(node, "tags", []), "storage")]
gpu_workers = [for node in var.nodes : {
name = node.name, ip = node.networks[0].ip, tags = lookup(node, "tags", [])
} if node.role == "worker" && contains(lookup(node, "tags", []), "gpu")]
}
}