diff --git a/TEST_STAND/CRUD/README.md b/TEST_STAND/CRUD/README.md index 6bef9b0..6b711af 100644 --- a/TEST_STAND/CRUD/README.md +++ b/TEST_STAND/CRUD/README.md @@ -19,19 +19,6 @@ CRUD/ | **БД — общий ресурс** | к одному кластеру можно подключить сколько угодно папок-потребителей: `apps/`, потом ещё `my-service/`, `reporting/` и т.д. | | **Разные жизненные циклы** | приложения пересоздаются сколько угодно раз, БД живёт всё это время | -Если держать PG и приложения в одном state, `terraform destroy` снесёт **и кластер -с данными**. Именно поэтому база вынесена отдельно. - -### 🎯 Почему нельзя создать всё одним `apply` - -Пароль пользователя БД генерирует платформа и отдаёт его в выходе кластера -`vault_secrets["users"]` — **только после** операции `create_user`. При создании -всё одним `apply` приложения запрашивали пароль, когда его ещё не существовало, -и поднимались с пустым `PGPASSWORD` (раньше это маскировалось функцией `try()`). - -Теперь порядок явный: **сначала БД отдельным прогоном, потом приложения** — пароль -к этому моменту существует и лежит в файле `apps/creds.json`. Костыль `try()` убран. - --- ## 📋 Порядок запуска (по шагам) @@ -72,14 +59,11 @@ terraform output -json > ../apps/creds.json **Что делает:** выгружает хост БД, порт, имя пользователя, имя базы и пароль в файл `apps/creds.json`. Папка `apps/` читает этот файл (см. `apps/locals.tf`). -**Почему файлом, а не «само»:** `pg/` и `apps/` — разные состояния Terraform -(разные `terraform.tfstate`), между ними значения автоматически не передаются: -у провайдера нет data-source, а общего backend в стенде нет. Поэтому креды -передаются явной выгрузкой outputs — зато видно, что и откуда берётся. +**Почему файлом:** `pg/` и `apps/` — разные состояния Terraform, значения между ними +сами не передаются. > ⚠️ В `creds.json` пароль **в открытом виде**. Файл добавлен в `apps/.gitignore`. -> Не коммитить и не пересылать. Если пароль ротировали (пересоздали пользователя -> в `pg/`) — повторите шаг 2, файл надо обновить. +> Не коммитить и не пересылать. Если пользователя БД пересоздавали — повторите шаг 2. ### Шаг 3. Приложения — папка `apps/` diff --git a/TEST_STAND/CRUD/apps/flask.tf b/TEST_STAND/CRUD/apps/flask.tf index fa9922f..fe29ae7 100644 --- a/TEST_STAND/CRUD/apps/flask.tf +++ b/TEST_STAND/CRUD/apps/flask.tf @@ -2,8 +2,7 @@ # Flask — Python-приложение (CRUD, та же БД и таблица, что у Lucee/Node.js) # ============================================================================= # -# Креды БД — из creds.json (выгрузка outputs папки ../pg/), см. apps/locals.tf. -# try() не нужен: пароль уже существует к моменту этого apply. +# Креды БД приходят из файла apps/creds.json (см. apps/locals.tf). # ============================================================================= resource "nubes_flask" "appflask" { diff --git a/TEST_STAND/CRUD/apps/locals.tf b/TEST_STAND/CRUD/apps/locals.tf index 652a278..9a0e247 100644 --- a/TEST_STAND/CRUD/apps/locals.tf +++ b/TEST_STAND/CRUD/apps/locals.tf @@ -13,9 +13,8 @@ locals { # 2) cd ../pg && terraform output -json > ../apps/creds.json # 3) cd ../apps && terraform apply # - # Почему через файл: pg/ и apps/ — РАЗНЫЕ state, Terraform между ними значения - # сам не передаёт (data-source у провайдера нет, общего backend тоже нет). - # Поэтому креды передаются явной выгрузкой outputs → файлом. + # Почему через файл: pg/ и apps/ — РАЗНЫЕ состояния Terraform, значения между + # ними сами не передаются. Поэтому креды передаются явной выгрузкой outputs → файлом. # # Структура creds.json (так отдаёт `terraform output -json`): # { "pg_host": { "sensitive": false, "type": "string", "value": "..." }, ... } diff --git a/TEST_STAND/CRUD/apps/lucee.tf b/TEST_STAND/CRUD/apps/lucee.tf index 8311386..4007b09 100644 --- a/TEST_STAND/CRUD/apps/lucee.tf +++ b/TEST_STAND/CRUD/apps/lucee.tf @@ -2,9 +2,7 @@ # Lucee — CFML-приложение (CRUD в общей таблице crud_items) # ============================================================================= # -# Креды БД приходят из файла, выгруженного из ../pg/ (см. apps/locals.tf). -# Никакого try() здесь нет и не нужно: пароль к моменту этого apply уже существует -# в файле, потому что БД создана ОТДЕЛЬНЫМ прогоном в папке ../pg/. +# Креды БД приходят из файла apps/creds.json (см. apps/locals.tf). # ============================================================================= resource "nubes_lucee" "applucee" { diff --git a/TEST_STAND/CRUD/apps/nodejs.tf b/TEST_STAND/CRUD/apps/nodejs.tf index d35d2a5..04394ce 100644 --- a/TEST_STAND/CRUD/apps/nodejs.tf +++ b/TEST_STAND/CRUD/apps/nodejs.tf @@ -2,8 +2,7 @@ # Node.js — Express-приложение (CRUD, та же БД и таблица, что у Lucee/Flask) # ============================================================================= # -# Креды БД — из creds.json (выгрузка outputs папки ../pg/), см. apps/locals.tf. -# try() не нужен: пароль уже существует к моменту этого apply. +# Креды БД приходят из файла apps/creds.json (см. apps/locals.tf). # ============================================================================= resource "nubes_nodejs" "appnodejs" { diff --git a/TEST_STAND/CRUD/pg/outputs.tf b/TEST_STAND/CRUD/pg/outputs.tf index b6f0ccd..b2e5c12 100644 --- a/TEST_STAND/CRUD/pg/outputs.tf +++ b/TEST_STAND/CRUD/pg/outputs.tf @@ -14,10 +14,9 @@ # Папка apps/ читает creds.json (см. apps/locals.tf). Файл содержит пароль — # он в .gitignore папки apps/. # -# ВАЖНО про порядок: outputs вычисляются В КОНЦЕ apply, уже после того как -# созданы кластер, пользователь и база. Поэтому `terraform output -json` сразу -# после первого apply отдаёт реальный пароль (в отличие от vault_secrets внутри -# одного прогона — см. README, раздел «Почему нельзя одним apply»). +# ВАЖНО про порядок: outputs вычисляются В КОНЦЕ apply, после того как созданы +# кластер, пользователь и база — поэтому `terraform output -json` сразу после +# первого apply отдаёт реальный пароль. # ============================================================================= output "pg_host" {