diff --git a/main.tf b/main.tf index 3234a7e..fb3b746 100644 --- a/main.tf +++ b/main.tf @@ -4,45 +4,25 @@ resource "hcloud_ssh_key" "this" { public_key = each.value } -resource "hcloud_primary_ip" "k8s_ipv4" { - count = var.k8s_server_count < 1 ? 1 : var.k8s_server_count - - name = "k8s_primary_ipv4_${count.index}" - datacenter = var.k8s_ip_datacenter - type = "ipv4" - assignee_type = "server" - auto_delete = !var.k8s_test_installation -} - -resource "hcloud_primary_ip" "k8s_ipv6" { - count = var.k8s_server_count < 1 ? 1 : var.k8s_server_count - - name = "k8s_primary_ipv6_${count.index}" - datacenter = var.k8s_ip_datacenter - type = "ipv6" - assignee_type = "server" - auto_delete = !var.k8s_test_installation -} - module "k8s" { source = "./modules/hetzner/kubernetes" name = "cluster1" ssh_keys = [for o in hcloud_ssh_key.this : o.id] servers = [for n in range(var.k8s_server_count) : { - ipv4_id = hcloud_primary_ip.k8s_ipv4[n].id - ipv6_id = hcloud_primary_ip.k8s_ipv6[n].id - type = var.k8s_server_type - location = var.k8s_location + type = var.k8s_server_type + location = var.k8s_location + ip_datacenter = var.k8s_ip_datacenter }] agents = [{ type = var.k8s_agent_type location = var.k8s_location count = var.k8s_agent_count }] - kubernetes_exposed_ips = var.kubernetes_allowed_ips - ssh_exposed_ips = var.ssh_allowed_ips - ssh_port = 1022 + auto_delete_primary_ips = false + kubernetes_exposed_ips = var.kubernetes_allowed_ips + ssh_exposed_ips = var.ssh_allowed_ips + ssh_port = 1022 public_tcp_services = { git-ssh = ["22"] http = ["80", "443"] @@ -66,12 +46,12 @@ locals { zone_ttl = values.zone_ttl records = toset(concat( values.default_A ? [ - { name = "@", type = "A", value = hcloud_primary_ip.k8s_ipv4[0].ip_address }, - { name = "*", type = "A", value = hcloud_primary_ip.k8s_ipv4[0].ip_address }, + { name = "@", type = "A", value = module.k8s.server_ips_v4[0] }, + { name = "*", type = "A", value = module.k8s.server_ips_v4[0] }, ] : [], values.default_AAAA ? [ - { name = "@", type = "AAAA", value = "${hcloud_primary_ip.k8s_ipv6[0].ip_address}1" }, - { name = "*", type = "AAAA", value = "${hcloud_primary_ip.k8s_ipv6[0].ip_address}1" }, + { name = "@", type = "AAAA", value = module.k8s.server_ips_v6[0] }, + { name = "*", type = "AAAA", value = module.k8s.server_ips_v6[0] }, ] : [], tolist(values.custom_records) )) diff --git a/modules/hetzner/kubernetes/main.tf b/modules/hetzner/kubernetes/main.tf index 3aa95a3..1e3d242 100644 --- a/modules/hetzner/kubernetes/main.tf +++ b/modules/hetzner/kubernetes/main.tf @@ -1,3 +1,23 @@ +resource "hcloud_primary_ip" "ipv4" { + count = length(var.servers) + + name = "k8s_primary_ipv4_${count.index}" + datacenter = var.servers[count.index].ip_datacenter + type = "ipv4" + assignee_type = "server" + auto_delete = var.auto_delete_primary_ips +} + +resource "hcloud_primary_ip" "ipv6" { + count = length(var.servers) + + name = "k8s_primary_ipv6_${count.index}" + datacenter = var.servers[count.index].ip_datacenter + type = "ipv6" + assignee_type = "server" + auto_delete = var.auto_delete_primary_ips +} + locals { network = "10.0.0.0/16" subnet_eu_central = "10.0.0.0/24" @@ -5,6 +25,8 @@ locals { for idx, config in var.servers : "${var.name}-server-${idx + 1}" => merge( config, { + ipv4_id = hcloud_primary_ip.ipv4[idx].id + ipv6_id = hcloud_primary_ip.ipv6[idx].id ip = cidrhost(local.subnet_eu_central, idx + 2) first_ip = idx == 0 ? "" : cidrhost(local.subnet_eu_central, 2) } diff --git a/modules/hetzner/kubernetes/variables.tf b/modules/hetzner/kubernetes/variables.tf index 6fbe882..d45275b 100644 --- a/modules/hetzner/kubernetes/variables.tf +++ b/modules/hetzner/kubernetes/variables.tf @@ -8,10 +8,9 @@ variable "ssh_keys" { variable "servers" { type = list(object({ - ipv4_id = number - ipv6_id = number - type = string - location = string + type = string + location = string + ip_datacenter = string })) } @@ -24,26 +23,37 @@ variable "agents" { } variable "ping_enabled" { - type = bool + type = bool default = true } variable "public_tcp_services" { - type = map(list(string)) + type = map(list(string)) default = {} } variable "kubernetes_exposed_ips" { - type = list(string) + type = list(string) default = [] } variable "ssh_exposed_ips" { - type = list(string) + type = list(string) default = [] } variable "ssh_port" { - type = number + type = number default = 1022 } + +variable "auto_delete_primary_ips" { + default = true + description = <