locals { begin-core = <<-EOF .:53 { errors { consolidate 5m ".* i/o timeout$" warning consolidate 30s "^Failed to .+" } health { lameduck 5s } ready EOF end-core = <<-EOF log . {combined} { class denial error } prometheus 0.0.0.0:9153 forward . ${var.forward} cache 30 loop reload loadbalance } EOF soa-ns = <<-EOF @ IN SOA ${var.sub_domain}.${var.domain_name}. ${var.domain_name}. ( ${formatdate("YYYYMMDDhh",timestamp())} ; Serial 4H ; Refresh 1H ; Retry 7D ; Expire 4H ) ; Negative Cache TTL @ IN NS ${var.sub_domain}.${var.domain_name}. EOF files = merge({ "Corefile" = join("\n", concat([local.begin-core],[for z in var.zones: format("file /etc/coredns/%s.db %s", z.name,z.name)],[local.end-core])) },[for z in var.zones: { "${z.name}.db" = join("\n", concat([ "$TTL 60", "$ORIGIN ${z.name}.", local.soa-ns ], lookup(z, "domain","")!=""?[format("%s. IN A %s", z.name, z.domain)]:[], lookup(z, "domain6","")!=""?[format("%s. IN AAAA %s", z.name, z.domain6)]:[], [for k,v in lookup(z, "txt",[]): format("%s IN TXT %s", k, v)], [for k,v in lookup(z, "hosts",[]): format("%s IN A %s", k, v)], [for k,v in lookup(z, "hosts6",[]): format("%s IN AAAA %s", k, v)], [for k,v in lookup(z, "alias",[]): format("%s IN CNAME %s", k, v)], [for mx in lookup(z, "mx",[]): format("%s IN MX %d %s", mx.name, mx.priority, mx.value)], lookup(z, "wildcard","")!=""?[format("*.%s. IN A %s", z.name, z.wildcard)]:[], lookup(z, "wildcard6","")!=""?[format("*.%s. IN AAAA %s", z.name, z.wildcard6)]:[], )) }]...) } resource "kubernetes_config_map_v1" "coredns-config" { metadata { name = "${var.component}-${var.instance}" namespace = "${var.namespace}" labels = local.common-labels } data = local.files }