81 lines
3.6 KiB
HCL
81 lines
3.6 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
|
|
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")]
|
|
}
|
|
}
|