# ============================================================================= # Пример: N DNS-зон генерируются ПРОГРАММНО (в цикле) — через Terraform. # # Отличие от ../dns_zones/: там зоны заданы явной картой `var.zones`, # а здесь зоны генерируются из числа `var.zone_count` через `range(...)`. # Удобно, когда зон много и они однотипны (tfzone-1 … tfzone-N). # # Ресурсы: nubes_zones_v2 (109) + подресурс nubes_zones_v2_record (записи). # ⚠️ Имя поля в HCL = `name` из схемы (snake_case). # ============================================================================= locals { # N зон генерируются программно: tfzone-1 … tfzone-N. zones = { for i in range(1, var.zone_count + 1) : "${var.zone_prefix}-${i}" => { zone_name = "${var.zone_prefix}-${i}.${var.zone_domain}" records = { www = { type = "A", values = ["10.0.${i}.1"] } api = { type = "A", values = ["10.0.${i}.2"] } } } } # Плоская карта записей «зона:имя» (вложенный цикл → merge/flatten). records = merge([ for zk, z in local.zones : { for rk, r in z.records : "${zk}:${rk}" => { zone = zk name = rk type = r.type values = r.values } } ]...) } # Зоны: N штук, сгенерированных в locals (for_each по ключам — стабильные адреса). resource "nubes_zones_v2" "zone" { for_each = local.zones resource_name = "dns-zone-${each.key}" zone_name = each.value.zone_name } # Записи: record_input = [{record=<значение>}, ...] из списка values. resource "nubes_zones_v2_record" "record" { for_each = local.records zones_v2_id = nubes_zones_v2.zone[each.value.zone].id record_name = each.value.name record_type = each.value.type record_input = jsonencode([for v in each.value.values : { record = v }]) record_ttl = 3600 }