docs: дружелюбные README для примеров DNS (для пользователя)

This commit is contained in:
Repinoid
2026-10-17 08:15:50 +03:00
parent f332833ee2
commit 9731ba672f
2 changed files with 109 additions and 54 deletions
+53 -30
View File
@@ -1,47 +1,70 @@
# N DNS-зон, сгенерированных программно (в цикле)
# N DNS-зон, сгенерированных циклом
Пример-близнец `../dns_zones/`, но здесь зоны **не задаются вручную**, а
генерируются из числа `var.zone_count`:
То же, что `../dns_zones/`, но зоны не перечисляются руками — генерируются из одного числа `zone_count`.
```hcl
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 = ..., api = ... }
}
}
```
## Что получится после `apply`
Удобно, когда зон много и они однотипны (напр. 10 зон `tfzone-1 … tfzone-10`).
По умолчанию — 10 зон `tfzone-1.test … tfzone-10.test`, по 2 записи в каждой:
## Ресурсы
| Зона | Записи |
|---|---|
| `tfzone-1.test` | `www` → A `10.0.1.1` · `api` → A `10.0.1.2` |
| `tfzone-2.test` | `www` → A `10.0.2.1` · `api` → A `10.0.2.2` |
| … | … |
| Ресурс | Сервис | Назначение |
|---|---|---|
| `nubes_zones_v2` | 109 | DNS-зона |
| `nubes_zones_v2_record` | подресурс зоны | Запись внутри зоны (A / CNAME / …) |
Адреса зависят от номера зоны: `10.0.<номер>.1` и `10.0.<номер>.2`.
## Разница с `../dns_zones/`
## Когда этот вариант удобнее
Зон много и они однотипны (например 100 поддоменов). Вместо перечисления — одно число.
| | `dns_zones` | `dns_zones_generated` |
|---|---|---|
| Источник зон | явная карта `var.zones` | `range(1, zone_count+1)` в `locals` |
| Когда удобно | разный набор зон/записей | много однотипных зон |
| Источник зон | карта `zones` | `range(1, zone_count + 1)` |
| Когда | разный набор зон/записей | много однотипных зон |
## Как запустить
## Быстрый старт
```bash
cp terraform.tfvars.example terraform.tfvars # при желании: zone_count = N
# api_token — в secrets.auto.tfvars (НЕ в terraform.tfvars!)
cd dns_zones_generated
cp terraform.tfvars.example terraform.tfvars
# 1. Создайте secrets.auto.tfvars (токен — СЕКРЕТ, НЕ в terraform.tfvars):
# api_token = "<JWT>"
# JWT берётся в ЛК: Профиль → Токены.
terraform init
terraform plan
terraform apply # запускает пользователь
terraform apply
```
## Проверки
## Настройка
- После `apply` повторный `plan` должен давать `No changes`.
- Изменение `zone_count` добавляет/убирает зоны (стабильные адреса `for_each`).
- Чтобы зоны работали в интернете, домен у регистратора надо делегировать на NS
`ns3.ngcloud.ru` / `ns4.ngcloud.ru`.
В `terraform.tfvars`:
| Переменная | Дефолт | Что делает |
|---|---|---|
| `zone_count` | `10` | сколько зон создать |
| `zone_prefix` | `tfzone` | префикс имени |
| `zone_domain` | `test` | домен (суффикс FQDN) |
Итоговое имя зоны = `<prefix>-<i>.<domain>`, например `tfzone-3.test`.
## Как поменять набор записей
Записи заданы шаблоном в `locals.zones` (`main.tf`). По умолчанию `www` и `api`. Добавить/убрать — правьте блок `records`:
```hcl
records = {
www = { type = "A", values = ["10.0.${i}.1"] }
api = { type = "A", values = ["10.0.${i}.2"] }
db = { type = "A", values = ["10.0.${i}.3"] } # добавили третью запись
}
```
## Важно
- **Токен** — только в `secrets.auto.tfvars` (файл в `.gitignore`). Никогда не коммитить.
- **Чтобы зоны работали в интернете**, у регистратора делегируйте домен на NS `ns3.ngcloud.ru` / `ns4.ngcloud.ru`.
- Изменение `zone_count` добавляет/убирает зоны; ключи `for_each` стабильны — существующие зоны не пересоздаются.
- **Проверка**: после `apply` повторный `terraform plan` должен дать `No changes`.