terraform { backend "s3" { bucket = "13225-wheatley-states" key = "k8s-wheatley.tfstate" region = "main" skip_credentials_validation = true skip_metadata_api_check = true skip_region_validation = true force_path_style = true } } provider "proxmox" { endpoint = var.proxmox_endpoint api_token = var.proxmox_api_token } locals { cluster_name = "k8s-wheatley" vm-id_prefix = 200 kubernetes_version = "1.34.1" talos_version = "1.11.5" gateway_api_version = "1.3.0" cilium_version = "1.18.4" ipv4_gateway = "10.13.37.1" cluster_endpoint_ip = "10.13.37.10" proxmox_node = "pve01" controlplanes = { cpu = 4 memory = 8 disk = 20 storagepool = "nvme-fastpool" talos_version = local.talos_version cluster_name = local.cluster_name kubernetes_version = local.kubernetes_version ipv4_gateway = local.ipv4_gateway nodes = [ { name = "cp01" ip_address = "10.13.37.11" }, { name = "cp02" ip_address = "10.13.37.12" }, { name = "cp03" ip_address = "10.13.37.13" }, ] } controlplane_addresses = [ for node in local.controlplanes.nodes : node.ip_address ] workers = { cpu = 8 memory = 8 disk = 40 storagepool = "nvme-fastpool" talos_version = local.talos_version cluster_name = local.cluster_name kubernetes_version = local.kubernetes_version ipv4_gateway = local.ipv4_gateway pvc_disks = [100] nodes = [ { name = "worker01" ip_address = "10.13.37.21" }, { name = "worker02" ip_address = "10.13.37.22" }, { name = "worker03" ip_address = "10.13.37.23" }, ] } worker_addresses = [ for node in local.workers.nodes : node.ip_address ] } module "controlplanes" { source = "./modules/talos-node" for_each = { for node in local.controlplanes.nodes : node.name => node } node = { id = local.vm-id_prefix + 10 + tonumber(replace(each.key, "cp", "")) name = format("k8s-wheatley-%s", each.value.name) ipv4_address = each.value.ip_address cpu = local.controlplanes.cpu memory = local.controlplanes.memory disk = local.controlplanes.disk storagepool = local.controlplanes.storagepool talos_version = local.talos_version cluster_name = local.cluster_name kubernetes_version = local.kubernetes_version cluster_endpoint = local.cluster_endpoint_ip ipv4_gateway = local.ipv4_gateway proxmox_node = local.proxmox_node } } module "workers" { source = "./modules/talos-node" for_each = { for node in local.workers.nodes : node.name => node } node = { id = local.vm-id_prefix + 20 + tonumber(replace(each.key, "worker", "")) name = format("k8s-wheatley-%s", each.value.name) ipv4_address = each.value.ip_address cpu = local.workers.cpu memory = local.workers.memory disk = local.workers.disk storagepool = local.workers.storagepool talos_version = local.talos_version cluster_name = local.cluster_name kubernetes_version = local.kubernetes_version cluster_endpoint = local.cluster_endpoint_ip ipv4_gateway = local.ipv4_gateway proxmox_node = local.proxmox_node } pvc_disks = local.workers.pvc_disks } module "talos-bootstrap" { depends_on = [ module.controlplanes, module.workers ] source = "./modules/talos-bootstrap" node_config = { ipv4_gateway = local.ipv4_gateway talos_version = local.talos_version gateway_api_version = local.gateway_api_version cilium_version = local.cilium_version cluster_name = local.cluster_name kubernetes_version = local.kubernetes_version cluster_endpoint = local.cluster_endpoint_ip proxmox_node = local.proxmox_node controlplane_addresses = local.controlplane_addresses worker_addresses = local.worker_addresses } talos_nodes = concat( [ for node in local.controlplanes.nodes : { name = format("k8s-wheatley-%s", node.name) type = "controlplane" ipv4_address = node.ip_address } ], [ for node in local.workers.nodes : { name = format("k8s-wheatley-%s", node.name) type = "worker" ipv4_address = node.ip_address } ] ) }