Files
tf_examples/dns_zones/main.tf
T

46 lines
1.9 KiB
Terraform

# =============================================================================
# Пример: доменные зоны компании и записи в них — через 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
}