test_stand/crud: из README и комментариев убрана вся история (try, «раньше»)

README читает человек впервые — ему нужны структура, шаги запуска и операции,
а не разбор прошлых костылей. Удалено:
- раздел «Почему нельзя создать всё одним apply» с историей про try() и PGPASSWORD;
- упоминания try() в apps/lucee.tf, apps/flask.tf, apps/nodejs.tf;
- «data-source/backend» из apps/locals.tf и путь к удалённому разделу из pg/outputs.tf.

Заодно удалён старый TEST_STAND/CRUD/terraform.tfvars (не читается, значения
перенесены в pg/terraform.tfvars и apps/terraform.tfvars).

Проверено: terraform validate — Success в pg/ и apps/ (apps — с временным creds.json).
This commit is contained in:
Repinoid
2026-10-01 16:42:46 +03:00
parent 4834e992f3
commit ed92de1544
6 changed files with 11 additions and 33 deletions
+3 -19
View File
@@ -19,19 +19,6 @@ CRUD/
| **БД — общий ресурс** | к одному кластеру можно подключить сколько угодно папок-потребителей: `apps/`, потом ещё `my-service/`, `reporting/` и т.д. | | **БД — общий ресурс** | к одному кластеру можно подключить сколько угодно папок-потребителей: `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`). `apps/creds.json`. Папка `apps/` читает этот файл (см. `apps/locals.tf`).
**Почему файлом, а не «само»:** `pg/` и `apps/` — разные состояния Terraform **Почему файлом:** `pg/` и `apps/` — разные состояния Terraform, значения между ними
(разные `terraform.tfstate`), между ними значения автоматически не передаются: сами не передаются.
у провайдера нет data-source, а общего backend в стенде нет. Поэтому креды
передаются явной выгрузкой outputs — зато видно, что и откуда берётся.
> ⚠️ В `creds.json` пароль **в открытом виде**. Файл добавлен в `apps/.gitignore`. > ⚠️ В `creds.json` пароль **в открытом виде**. Файл добавлен в `apps/.gitignore`.
> Не коммитить и не пересылать. Если пароль ротировали (пересоздали пользователя > Не коммитить и не пересылать. Если пользователя БД пересоздавали — повторите шаг 2.
> в `pg/`) — повторите шаг 2, файл надо обновить.
### Шаг 3. Приложения — папка `apps/` ### Шаг 3. Приложения — папка `apps/`
+1 -2
View File
@@ -2,8 +2,7 @@
# Flask — Python-приложение (CRUD, та же БД и таблица, что у Lucee/Node.js) # Flask — Python-приложение (CRUD, та же БД и таблица, что у Lucee/Node.js)
# ============================================================================= # =============================================================================
# #
# Креды БД — из creds.json (выгрузка outputs папки ../pg/), см. apps/locals.tf. # Креды БД приходят из файла apps/creds.json (см. apps/locals.tf).
# try() не нужен: пароль уже существует к моменту этого apply.
# ============================================================================= # =============================================================================
resource "nubes_flask" "appflask" { resource "nubes_flask" "appflask" {
+2 -3
View File
@@ -13,9 +13,8 @@ locals {
# 2) cd ../pg && terraform output -json > ../apps/creds.json # 2) cd ../pg && terraform output -json > ../apps/creds.json
# 3) cd ../apps && terraform apply # 3) cd ../apps && terraform apply
# #
# Почему через файл: pg/ и apps/ — РАЗНЫЕ state, Terraform между ними значения # Почему через файл: pg/ и apps/ — РАЗНЫЕ состояния Terraform, значения между
# сам не передаёт (data-source у провайдера нет, общего backend тоже нет). # ними сами не передаются. Поэтому креды передаются явной выгрузкой outputs → файлом.
# Поэтому креды передаются явной выгрузкой outputs → файлом.
# #
# Структура creds.json (так отдаёт `terraform output -json`): # Структура creds.json (так отдаёт `terraform output -json`):
# { "pg_host": { "sensitive": false, "type": "string", "value": "..." }, ... } # { "pg_host": { "sensitive": false, "type": "string", "value": "..." }, ... }
+1 -3
View File
@@ -2,9 +2,7 @@
# Lucee — CFML-приложение (CRUD в общей таблице crud_items) # Lucee — CFML-приложение (CRUD в общей таблице crud_items)
# ============================================================================= # =============================================================================
# #
# Креды БД приходят из файла, выгруженного из ../pg/ (см. apps/locals.tf). # Креды БД приходят из файла apps/creds.json (см. apps/locals.tf).
# Никакого try() здесь нет и не нужно: пароль к моменту этого apply уже существует
# в файле, потому что БД создана ОТДЕЛЬНЫМ прогоном в папке ../pg/.
# ============================================================================= # =============================================================================
resource "nubes_lucee" "applucee" { resource "nubes_lucee" "applucee" {
+1 -2
View File
@@ -2,8 +2,7 @@
# Node.js — Express-приложение (CRUD, та же БД и таблица, что у Lucee/Flask) # Node.js — Express-приложение (CRUD, та же БД и таблица, что у Lucee/Flask)
# ============================================================================= # =============================================================================
# #
# Креды БД — из creds.json (выгрузка outputs папки ../pg/), см. apps/locals.tf. # Креды БД приходят из файла apps/creds.json (см. apps/locals.tf).
# try() не нужен: пароль уже существует к моменту этого apply.
# ============================================================================= # =============================================================================
resource "nubes_nodejs" "appnodejs" { resource "nubes_nodejs" "appnodejs" {
+3 -4
View File
@@ -14,10 +14,9 @@
# Папка apps/ читает creds.json (см. apps/locals.tf). Файл содержит пароль — # Папка apps/ читает creds.json (см. apps/locals.tf). Файл содержит пароль —
# он в .gitignore папки apps/. # он в .gitignore папки apps/.
# #
# ВАЖНО про порядок: outputs вычисляются В КОНЦЕ apply, уже после того как # ВАЖНО про порядок: outputs вычисляются В КОНЦЕ apply, после того как созданы
# созданы кластер, пользователь и база. Поэтому `terraform output -json` сразу # кластер, пользователь и база — поэтому `terraform output -json` сразу после
# после первого apply отдаёт реальный пароль (в отличие от vault_secrets внутри # первого apply отдаёт реальный пароль.
# одного прогона — см. README, раздел «Почему нельзя одним apply»).
# ============================================================================= # =============================================================================
output "pg_host" { output "pg_host" {