62 lines
1.7 KiB
HCL
62 lines
1.7 KiB
HCL
resource "hcloud_ssh_key" "this" {
|
|
for_each = var.ssh_keys
|
|
name = each.key
|
|
public_key = each.value
|
|
}
|
|
|
|
module "k8s" {
|
|
source = "./modules/hetzner/kubernetes"
|
|
|
|
name = "cluster1"
|
|
ssh_keys = [for o in hcloud_ssh_key.this : o.id]
|
|
servers = var.k8s_servers
|
|
agents = var.k8s_agents
|
|
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"]
|
|
}
|
|
}
|
|
|
|
resource "local_file" "ansible_inventory" {
|
|
filename = "${path.module}/inventory.ini"
|
|
content = templatefile("./inventory.ini.tftpl", {
|
|
server_ips = module.k8s.server_ips_v4,
|
|
agent_ips = module.k8s.agent_ips_v4,
|
|
network_cidr = module.k8s.private_network_cidr,
|
|
private_nat = module.k8s.private_network_nat,
|
|
ssh_port = module.k8s.ssh_port,
|
|
})
|
|
}
|
|
|
|
locals {
|
|
dns_zones = {
|
|
for key, values in var.dns_zones : key => {
|
|
zone_ttl = values.zone_ttl
|
|
records = toset(concat(
|
|
values.default_A ? [
|
|
{ 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 = module.k8s.server_ips_v6[0] },
|
|
{ name = "*", type = "AAAA", value = module.k8s.server_ips_v6[0] },
|
|
] : [],
|
|
tolist(values.custom_records)
|
|
))
|
|
}
|
|
}
|
|
}
|
|
|
|
module "dns" {
|
|
source = "./modules/hetzner/dns"
|
|
for_each = local.dns_zones
|
|
zone = each.key
|
|
zone_ttl = lookup(each.value, "zone_ttl")
|
|
records = lookup(each.value, "records")
|
|
}
|
|
|