# 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 kubernetes_version = var.kubernetes_version architecture = var.talos_image_architecture 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 = coalesce(node.tags, []), proxmox_node = coalesce(node.proxmox_node, var.proxmox_node) } if node.role == "controlplane"] compute_workers = [for node in var.nodes : { name = node.name, role = node.role, networks = node.networks, tags = coalesce(node.tags, []), proxmox_node = coalesce(node.proxmox_node, var.proxmox_node) } if node.role == "worker" && !contains(coalesce(node.tags, []), "storage") && !contains(coalesce(node.tags, []), "gpu")] storage_workers = [for node in var.nodes : { name = node.name, role = node.role, networks = node.networks, tags = coalesce(node.tags, []), proxmox_node = coalesce(node.proxmox_node, var.proxmox_node), additional_disk_size = lookup(node, "additional_disk_size", "") } if node.role == "worker" && contains(coalesce(node.tags, []), "storage")] gpu_workers = [for node in var.nodes : { name = node.name, role = node.role, networks = node.networks, tags = coalesce(node.tags, []), proxmox_node = coalesce(node.proxmox_node, var.proxmox_node) } if node.role == "worker" && contains(coalesce(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 = coalesce(node.tags, []) } if node.role == "controlplane"] compute_workers = [for node in var.nodes : { name = node.name, ip = node.networks[0].ip, tags = coalesce(node.tags, []) } if node.role == "worker" && !contains(coalesce(node.tags, []), "storage") && !contains(coalesce(node.tags, []), "gpu")] storage_workers = [for node in var.nodes : { name = node.name, ip = node.networks[0].ip, tags = coalesce(node.tags, []), additional_disk = node.additional_disk_size } if node.role == "worker" && contains(coalesce(node.tags, []), "storage")] gpu_workers = [for node in var.nodes : { name = node.name, ip = node.networks[0].ip, tags = coalesce(node.tags, []) } if node.role == "worker" && contains(coalesce(node.tags, []), "gpu")] } }