|
| 1 | +locals { |
| 2 | + zones = var.name == null ? [] : try(tolist(var.name), [tostring(var.name)], []) |
| 3 | +} |
| 4 | + |
| 5 | +resource "powerdns_zone" "zone" { |
| 6 | + for_each = toset(local.zones) |
| 7 | + name = each.value |
| 8 | + kind = "Native" |
| 9 | +} |
| 10 | + |
| 11 | +locals { |
| 12 | + records_expanded = { |
| 13 | + for i, record in var.records : join("-", compact([ |
| 14 | + lower(record.type), |
| 15 | + try(lower(record.name), ""), |
| 16 | + ])) => { |
| 17 | + type = record.type |
| 18 | + name = try(record.name, "") |
| 19 | + ttl = try(record.ttl, null) |
| 20 | + idx = i |
| 21 | + } |
| 22 | + } |
| 23 | + |
| 24 | + records_by_name = { |
| 25 | + for product in setproduct(local.zones, keys(local.records_expanded)) : "${product[1]}-${product[0]}" => { |
| 26 | + zone = powerdns_zone.zone[product[0]].name |
| 27 | + type = local.records_expanded[product[1]].type |
| 28 | + name = local.records_expanded[product[1]].name |
| 29 | + ttl = local.records_expanded[product[1]].ttl |
| 30 | + idx = local.records_expanded[product[1]].idx |
| 31 | + } |
| 32 | + } |
| 33 | + |
| 34 | + records = local.records_by_name |
| 35 | +} |
| 36 | + |
| 37 | +resource "powerdns_record" "record" { |
| 38 | + for_each = local.records |
| 39 | + name = each.value.name == "" ? each.value.zone : join(".", [each.value.name, each.value.zone]) |
| 40 | + zone = each.value.zone |
| 41 | + type = each.value.type |
| 42 | + ttl = each.value.ttl |
| 43 | + records = can(var.records[each.value.idx].records) ? [for r in var.records[each.value.idx].records : |
| 44 | + each.value.type == "TXT" && length(regexall("(\\\"\\\")", r)) == 0 ? |
| 45 | + join("\"\"", compact(split("{SPLITHERE}", replace(r, "/(.{255})/", "$1{SPLITHERE}")))) : r |
| 46 | + ] : null |
| 47 | +} |
0 commit comments