docs(crud): раздел «Что пользователь задаёт сам» продублирован на странице сайта
Стендовый README и страница curated/crud/three_apps.md описывают одно и то же, поэтому раздел перенесён в страницу сайта сразу после «Структура манифестов»: - обязательные значения (api_token, realm, s3_name) и создание terraform.tfvars; - имена с правилами уникальности (кластер и приложения — в пределах стенда, юзер/база — в пределах кластера, домены — в облаке) и объяснение через adopt_existing_on_create (crud.go:171, refsvc_find.go:47); - что можно не задавать (дефолты pg/main.tf). Из шагов 1 и 3 убраны дублирующие таблицы — вместо них ссылка на раздел. Плюс выровнены отступы в блоке cp terraform.tfvars.example (в двух файлах было по-разному). Проверено: diff разделов — совпадает построчно, отличие только в разделителе «---» (есть в README, не используется на странице); страница 228 строк, 18 строк с блоками кода (чётно).
This commit is contained in:
@@ -52,6 +52,49 @@ CRUD/
|
|||||||
- связь между каталогами — файл `apps/creds.json`: он делается из `terraform output` в `pg/`,
|
- связь между каталогами — файл `apps/creds.json`: он делается из `terraform output` в `pg/`,
|
||||||
поэтому после смены хоста или пароля его нужно обновить и повторить `apply` в `apps/`.
|
поэтому после смены хоста или пароля его нужно обновить и повторить `apply` в `apps/`.
|
||||||
|
|
||||||
|
## Что пользователь задаёт сам
|
||||||
|
|
||||||
|
### Обязательные значения (без них `apply` не пройдёт)
|
||||||
|
|
||||||
|
| Переменная | Где | Что это |
|
||||||
|
|---|---|---|
|
||||||
|
| `api_token` | `pg/terraform.tfvars` и `apps/terraform.tfvars` | токен Nubes: ЛК → Профиль → Токены → создать «Технический» |
|
||||||
|
| `realm` | там же, **одно и то же значение** | ресурсная платформа (кластер Kubernetes), например `k8s-4-sandbox-nubes-ru`; в `apps/` обязан совпасть с `pg/`, иначе приложения не увидят кластер с базой |
|
||||||
|
| `s3_name` | `pg/terraform.tfvars` | имя (или UUID) экземпляра S3 для бэкапов: ЛК → S3 |
|
||||||
|
|
||||||
|
Файлы создаются из примеров и нужны в обеих папках:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd pg && cp terraform.tfvars.example terraform.tfvars
|
||||||
|
cd ../apps && cp terraform.tfvars.example terraform.tfvars
|
||||||
|
```
|
||||||
|
|
||||||
|
### Имена: придумать самому, и они обязаны быть уникальными
|
||||||
|
|
||||||
|
| Имя | Где задаётся | Правило |
|
||||||
|
|---|---|---|
|
||||||
|
| `pg_resource_name` (кластер) | `pg/terraform.tfvars` | уникально **в пределах стенда** |
|
||||||
|
| `pg_username`, `pg_db_name` | `pg/terraform.tfvars` | уникальны в пределах кластера; служебные имена (`admin`, `postgres`, `standby`) платформа не примет |
|
||||||
|
| `lucee_resource_name`, `flask_resource_name`, `nodejs_resource_name` | `apps/locals.tf` | уникальны **в пределах стенда** |
|
||||||
|
| `lucee_domain`, `flask_domain`, `nodejs_domain` | `apps/locals.tf` | уникальны **в облаке** — один домен нельзя повесить на два инстанса |
|
||||||
|
|
||||||
|
Почему это важно: все ресурсы создаются с `adopt_existing_on_create = true`, а провайдер ищет
|
||||||
|
инстанс **по имени внутри своего сервиса** (`provider/internal/resources_core/crud.go:171`,
|
||||||
|
`provider/internal/core/refsvc_find.go:47`). Если такое имя уже занято, он не станет создавать
|
||||||
|
новый ресурс, а **усыновит** существующий — то есть при занятом имени можно подцепить чужой или
|
||||||
|
старый инстанс. Если усыновление отключено, `apply` упадёт с «инстанс с resource_name … уже
|
||||||
|
существует».
|
||||||
|
|
||||||
|
Живой пример: прежние имена `tflucee`, `tfflask`, `tfnodejs` заняты старыми инстансами,
|
||||||
|
поэтому в стенде взяты `lucee-crud`, `flask-crud`, `nodejs-crud` (`apps/locals.tf:45,57,68`).
|
||||||
|
|
||||||
|
### Можно не задавать (есть значения по умолчанию)
|
||||||
|
|
||||||
|
`pg/main.tf`: `pg_cpu=500`, `pg_memory=512`, `pg_replicas=1`, `pg_disk=10`, `pg_version="17"`,
|
||||||
|
`pg_retain=14`, `pg_schedule="0 0 * * *"`, `pg_timeout="11m"`, `pg_username="user4crudpg"`,
|
||||||
|
`pg_role="ddl_user"`, `pg_db_name="db4crudpg"`. Размеры приложений (`*_cpu`, `*_memory`,
|
||||||
|
`*_replicas`) — в `apps/locals.tf`.
|
||||||
|
|
||||||
## Провайдер
|
## Провайдер
|
||||||
|
|
||||||
```hcl
|
```hcl
|
||||||
@@ -83,11 +126,8 @@ terraform apply
|
|||||||
|
|
||||||
Создадутся кластер (несколько минут), пользователь БД и база.
|
Создадутся кластер (несколько минут), пользователь БД и база.
|
||||||
|
|
||||||
| Переменная (`pg/terraform.tfvars`) | Где взять |
|
Обязательные значения — `api_token`, `realm`, `s3_name`. Полный список и правила по именам —
|
||||||
|---|---|
|
в разделе «Что пользователь задаёт сам» выше.
|
||||||
| `api_token` | ЛК → Профиль → Токены → «Технический» |
|
|
||||||
| `realm` | ЛК → Кластеры (например `k8s-4-sandbox-nubes-ru`) |
|
|
||||||
| `s3_name` | ЛК → S3 → имя экземпляра (для бэкапов) |
|
|
||||||
|
|
||||||
### 2. Передать креды БД в `apps/`
|
### 2. Передать креды БД в `apps/`
|
||||||
|
|
||||||
@@ -113,11 +153,8 @@ terraform apply
|
|||||||
|
|
||||||
Создадутся три приложения, подключённые к общей БД.
|
Создадутся три приложения, подключённые к общей БД.
|
||||||
|
|
||||||
| Что заполнить/проверить | Файл | Зачем |
|
Обязательные значения — `api_token` и `realm` (те же, что в `pg/`). Имена доменов нужно
|
||||||
|---|---|---|
|
придумать самому, они должны быть уникальны в облаке — см. раздел «Что пользователь задаёт сам».
|
||||||
| `api_token` | `apps/terraform.tfvars` | тот же, что в `pg/` |
|
|
||||||
| `realm` | `apps/terraform.tfvars` | должен совпадать с БД |
|
|
||||||
| `lucee_domain`, `flask_domain`, `nodejs_domain` | `apps/locals.tf` | имена доменов — должны быть **уникальны** в облаке |
|
|
||||||
|
|
||||||
## Справка: выходные параметры `pg/`
|
## Справка: выходные параметры `pg/`
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user