docs(crud): справка по выходным параметрам pg — состав, вид JSON и как их читают приложения
Шаг 2 теперь поясняет не только команду выгрузки, но и что именно выгружается:
- таблица шести выходов pg/outputs.tf (pg_host/pg_port/pg_username/pg_db_name/
pg_password/pg_ssl_mode) с указанием источника каждого;
- что terraform output -json кладёт объекты {sensitive, type, value}, а не голые
значения, поэтому в apps/locals.tf обращение идёт через .value;
- таблица соответствия: выход pg/ -> переменная окружения в Flask/Node.js/Lucee
(PGHOST/PGPORT/PGUSER/PGPASSWORD/PGDATABASE/PGSSLMODE, у Lucee ещё testds_* и DATABASE_URL).
Все факты сверены чтением файлов: pg/outputs.tf, apps/locals.tf, apps/flask.tf,
apps/nodejs.tf, apps/lucee.tf.
This commit is contained in:
@@ -58,6 +58,47 @@ terraform output -json > ../apps/creds.json
|
||||
|
||||
> ⚠️ В `creds.json` пароль лежит **открытым текстом**: файл в `apps/.gitignore`, не коммитить и не пересылать.
|
||||
|
||||
#### Для справки: что выгружается и как это читают приложения
|
||||
|
||||
В `pg/outputs.tf` объявлено шесть выходов:
|
||||
|
||||
| Выход | Значение | Откуда |
|
||||
|---|---|---|
|
||||
| `pg_host` | внутренний хост master | `state_out_flat["internalMaster"]` кластера |
|
||||
| `pg_port` | `5432` | константа в `outputs.tf` |
|
||||
| `pg_username` | имя пользователя БД | выход подресурса `nubes_postgres_user` |
|
||||
| `pg_db_name` | имя базы | выход `nubes_postgres_database` |
|
||||
| `pg_password` | пароль, `sensitive = true` | выход подресурса `nubes_postgres_user`: платформа генерирует пароль сама при создании пользователя, провайдер читает его из Vault и отдаёт выходом подресурса |
|
||||
| `pg_ssl_mode` | `require` | константа в `outputs.tf` |
|
||||
|
||||
`terraform output -json` кладёт в файл не голые значения, а объекты вида `{ "sensitive": ..., "type": ..., "value": ... }`:
|
||||
|
||||
```json
|
||||
{
|
||||
"pg_host": { "sensitive": false, "type": "string", "value": "<хост master>" },
|
||||
"pg_password": { "sensitive": true, "type": "string", "value": "<пароль>" }
|
||||
}
|
||||
```
|
||||
|
||||
Поэтому в `apps/locals.tf` значение берётся через `.value`:
|
||||
|
||||
```hcl
|
||||
creds = jsondecode(file("${path.module}/creds.json"))
|
||||
pg_host = local.creds.pg_host.value
|
||||
pg_pass = local.creds.pg_password.value
|
||||
```
|
||||
|
||||
Дальше `apps/*.tf` передают эти значения приложениям как переменные окружения:
|
||||
|
||||
| Выход `pg/` | Flask | Node.js | Lucee |
|
||||
|---|---|---|---|
|
||||
| `pg_host` | `PGHOST` | `PGHOST` | `PGHOST`, `testds_connectionString` |
|
||||
| `pg_port` | `PGPORT` | `PGPORT` | `PGPORT`, `testds_connectionString` |
|
||||
| `pg_username` | `PGUSER` | `PGUSER` | `PGUSER`, `testds_username` |
|
||||
| `pg_password` | `PGPASSWORD` | `PGPASSWORD` | `PGPASSWORD`, `testds_password` |
|
||||
| `pg_db_name` | `PGDATABASE` | `PGDATABASE` | `testds_connectionString`, `DATABASE_URL` |
|
||||
| `pg_ssl_mode` | `PGSSLMODE` | `PGSSLMODE` | `PGSSLMODE` |
|
||||
|
||||
### 3. Приложения (`apps/`)
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user