46 lines
1.9 KiB
Terraform
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
|
|
}
|