# 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 }) } resource "local_file" "metal_network_config" { for_each = { for node in var.nodes : node.name => node } filename = "${path.module}/../generated/metal-network/${each.key}.yaml" content = templatefile("${path.module}/templates/talos-metal-network.yaml.tpl", { node = each.value dns_servers = var.dns_servers }) } # (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")] } }