diff --git a/agents.tf b/agents.tf index 538f1e5..38000be 100644 --- a/agents.tf +++ b/agents.tf @@ -9,7 +9,7 @@ module "agents" { private_key = var.private_key additional_public_keys = var.additional_public_keys firewall_ids = [hcloud_firewall.k3s.id] - placement_group_id = hcloud_placement_group.k3s.id + placement_group_id = element(hcloud_placement_group.control_plane.*.id, ceil(each.value.index / 10)) location = each.value.location server_type = each.value.server_type ipv4_subnet_id = hcloud_network_subnet.subnet[[for i, v in var.agent_nodepools : i if v.name == each.value.nodepool_name][0] + length(var.control_plane_nodepools) + 1].id diff --git a/control_planes.tf b/control_planes.tf index 37655a7..b637d93 100644 --- a/control_planes.tf +++ b/control_planes.tf @@ -9,7 +9,7 @@ module "control_planes" { private_key = var.private_key additional_public_keys = var.additional_public_keys firewall_ids = [hcloud_firewall.k3s.id] - placement_group_id = hcloud_placement_group.k3s.id + placement_group_id = element(hcloud_placement_group.control_plane.*.id, ceil(each.value.index / 10)) location = each.value.location server_type = each.value.server_type ipv4_subnet_id = hcloud_network_subnet.subnet[[for i, v in var.control_plane_nodepools : i if v.name == each.value.nodepool_name][0] + 1].id diff --git a/locals.tf b/locals.tf index bda11db..addbbcb 100644 --- a/locals.tf +++ b/locals.tf @@ -1,6 +1,9 @@ locals { # if we are in a single cluster config, we use the default klipper lb instead of Hetzner LB - is_single_node_cluster = sum(concat([for v in var.control_plane_nodepools : v.count], [0])) + sum(concat([for v in var.agent_nodepools : v.count], [0])) == 1 + total_node_count = sum(concat([for v in var.control_plane_nodepools : v.count], [0])) + sum(concat([for v in var.agent_nodepools : v.count], [0])) + control_plane_count = sum(concat([for v in var.control_plane_nodepools : v.count], [0])) + agent_count = sum(concat([for v in var.agent_nodepools : v.count], [0])) + is_single_node_cluster = local.total_node_count == 1 ssh_public_key = trimspace(file(var.public_key)) # ssh_private_key is either the contents of var.private_key or null to use a ssh agent. ssh_private_key = var.private_key == null ? null : trimspace(file(var.private_key)) diff --git a/main.tf b/main.tf index e074930..6bdabfd 100644 --- a/main.tf +++ b/main.tf @@ -36,13 +36,16 @@ resource "hcloud_firewall" "k3s" { } } -resource "hcloud_placement_group" "k3s" { - name = var.cluster_name - type = "spread" - labels = { - "provisioner" = "terraform", - "engine" = "k3s" - } +resource "hcloud_placement_group" "control_plane" { + count = ceil(local.control_plane_count / 10) + name = "${var.cluster_name}-${count.index + 1}" + type = "spread" +} + +resource "hcloud_placement_group" "agent" { + count = ceil(local.agent_count / 10) + name = "${var.cluster_name}-${count.index + 1}" + type = "spread" } data "hcloud_load_balancer" "traefik" {