55 lines
2.1 KiB
Terraform
55 lines
2.1 KiB
Terraform
# =============================================================================
|
|
# Пример: 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
|
|
}
|