docs: примеры DNS-зон и записей (карта зон + N зон в цикле)

This commit is contained in:
Repinoid
2026-10-16 15:50:50 +03:00
parent 4ebfa414bd
commit 42048d058a
14 changed files with 334 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
# =============================================================================
# Пример: доменные зоны компании и записи в них — через Terraform.
#
# Ресурсы провайдера Nubes:
# - nubes_zones_v2 (сервис 109) — DNS-зона;
# - nubes_zones_v2_record (подресурс зоны, record) — запись внутри зоны.
#
# ⚠️ Имя поля в HCL = `name` из схемы (snake_case); `code` (camelCase) — имя в API.
#
# Зоны задаются картой `var.zones` (ключ → zone_name + records).
# Чтобы добавить/убрать зону или запись — правьте `var.zones` и делайте `apply`.
# =============================================================================
locals {
# Плоская карта записей «зона:имя» (вложенный цикл → merge/flatten),
# чтобы `for_each` у записей давал стабильные адреса.
records = merge([
for zk, z in var.zones : {
for rk, r in z.records :
"${zk}:${rk}" => {
zone = zk
name = rk
type = r.type
values = r.values
}
}
]...)
}
# Зоны: N штук из var.zones (for_each по ключам карты — стабильные адреса).
resource "nubes_zones_v2" "zone" {
for_each = var.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
}