docs(todo): postgresConf переведён платформой в map-fixed — зафиксировано, изменений не делал

По сообщению Виталия Зайцева (02.10.2026): «В Postgres поправил cfs-параметр
postgresConf, это нужно будет учесть на всякий».
В docs/TODO/postgres_conf_map_fixed.md записано:
- суть: cfs-параметр postgresConf (id 792) сменил тип array-map-fixed -> map-fixed,
  вместо generic paramName/paramValue теперь поля log_connections/log_disconnections
  (off|on, default off); в провайдере это меняет атрибут postgres_conf со строки
  JSON на вложенный объект;
- источники: новая спека generated/dev/resources_yaml/90_postgres.yaml, старая —
  .bak-20260930T183804Z и provider/resources_yaml/90_postgres.yaml; код —
  provider/internal/resources_gen/90_postgres_resource.go:99 (types.String) против
  generated/dev/go/90_postgres_resource.go:75-79,104;
- почему критично: ломающее изменение типа атрибута для всех, у кого есть
  postgres_conf;
- план: 01 -> 02 -> правка манифестов (TEST_STAND/CRUD/pg/postgres.tf,
  DEV_STAND/CRUD/postgres.tf:30, DEV_STAND/POSTGRES/nubes_postgres.tf:30, проверить
  PROD_STAND/*) -> 03 с новой версией -> учесть state -> правки документации и 04;
- критерии готовности и связанные документы.
Ничего в коде, манифестах, провайдере и на стендах не менял.
This commit is contained in:
Repinoid
2026-10-02 13:06:19 +03:00
parent 040b9815d5
commit 2247c0382d
+89
View File
@@ -0,0 +1,89 @@
# `postgresConf`: платформа перевела параметр из `array-map-fixed` в `map-fixed`
Дата: 2026-10-02 | Статус: **не начато** (по указанию владельца: «ничего пока не меняй»)
Сообщение из чата (Виталий Зайцев, 02.10.2026 12:26):
«В Postgres поправил cfs-параметр postgresConf, это нужно будет учесть на всякий».
## Что за параметр
`postgresConf` — cfs-параметр сервиса PostgreSQL (id **792**), дополнительные настройки серверного
конфига. В провайдере выходит атрибутом `postgres_conf`.
## Что изменилось
| | Было | Стало |
|---|---|---|
| Тип параметра | `array-map-fixed` (массив объектов) | `map-fixed` (один объект) |
| Поля | generic-пара `paramValue` (id 117) + `paramName` (id 118, значения только `log_connections` / `log_disconnections`) | конкретные поля `log_connections` (id 118), `log_disconnections` (id 117) |
| Значения | строки, в стенде писали `"''"` | `off` \| `on`, по умолчанию `off` |
| В Terraform | `postgres_conf = jsonencode([{ paramName = "log_connections", paramValue = "''" }])` — **строка JSON** | `postgres_conf = { log_connections = "on" }` — **вложенный объект** |
Источники:
- новая спека — `generated/dev/resources_yaml/90_postgres.yaml` (блок `postgresConf`, id 792:
`data_type: map-fixed`, `sub_params` id 117/118);
- старая спека — `generated/dev/resources_yaml.bak-20260930T183804Z/90_postgres.yaml` (id 792:
`data_type: array-map-fixed`, `paramValue`/`paramName`), она же закоммичена в
`provider/resources_yaml/90_postgres.yaml`;
- сгенерированный код: залитый провайдер — `provider/internal/resources_gen/90_postgres_resource.go:99`
(`PostgresConf types.String`), новая генерация — `generated/dev/go/90_postgres_resource.go:75-79`
и `:104` (`PostgresConf *PostgresPostgresConfModel{ LogConnections, LogDisconnections }`);
- почему важны ключи: платформа парсит значение как JSON, при неверных ключах отвечает
`Invalid JSON String` (`HISTORY/60_stands/2026-10-01_test_crud_pg_create_failure.md:24`).
## Почему это критично
Смена **типа атрибута** (строка JSON → объект) — ломающее изменение: после заливки нового
провайдера манифесты со старым `postgres_conf` перестанут работать. Значит, провайдер и все
манифесты надо менять **вместе**, и предупредить тех, у кого уже есть `postgres_conf`.
## Что сделать (порядок)
1. Спеки из API: `./TOOLS/scripts/01_generate_yamls.sh --profile TOOLS/config/test`
(в `generated/dev/resources_yaml` форма уже новая, но `provider/resources_yaml/90_postgres.yaml`
старая — а её использует `TOOLS/scripts/dev-materialize.sh:28`; при работе через материализацию
старую спеку заменить).
2. Генерация: `./TOOLS/scripts/02_generate_resources_and_docs_v2.sh --profile TOOLS/config/test`
(читает спеки из `generated/<стенд>/resources_yaml` — `TOOLS/scripts/02_generate_resources_and_docs_v2.sh:67`).
Заодно обновятся сгенерированные страницы (`postgres_params_create.md` и др.).
3. Поправить манифесты (пять мест ищем по `param_name`/`paramName`):
- `TEST_STAND/CRUD/pg/postgres.tf`;
- `DEV_STAND/CRUD/postgres.tf:30`;
- `DEV_STAND/POSTGRES/nubes_postgres.tf:30`;
- `PROD_STAND/PG1/resources.tf`, `PROD_STAND/POSTGRES/resources.tf` — **проверить**: в них
`postgres_conf` мог не использоваться, тогда правок не нужно.
Новый вид:
```hcl
postgres_conf = {
log_connections = "off" # off | on
log_disconnections = "off"
}
```
4. Собрать и залить новую версию провайдера:
`./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/test <ver>`
(диапазоны: test `3.*.*`, dev `2.*.*`, prod `1.*.*`; версию выбирает владелец).
5. Учесть state стендов: там лежит старая форма
(`TEST_STAND/CRUD/pg/terraform.tfstate:120` → `"postgresConf": "[{\"paramName\":...}]"`),
поэтому первый `plan` покажет расхождение — либо принять modify-операцию, либо привести state.
`apply` делает владелец.
6. Документация: поправить ручную страницу `docs/curated/crud/three_apps.md:182` («ключи строго
`paramName` / `paramValue`» — станет неверно), затем `04_build_and_publish_docs.sh` и публикация.
## Критерии готовности
- в манифестах всех стендов — объект `postgres_conf` с полями `log_connections`/`log_disconnections`;
- новая версия провайдера в реестре, `terraform plan` на стенде не падает и показывает ожидаемое
изменение только по этому параметру;
- в документации нет упоминаний `paramName`/`paramValue` для `postgres_conf`;
- в `VERSIONS.md` отмечено ломающее изменение (пользователям с заполненным `postgres_conf` нужно
править манифест).
## Связанные документы
- `HISTORY/30_provider/2026-07-16_subparams_nested_terraform_attributes.md` — переход на вложенные
атрибуты (`array-map-fixed` → `ListNestedAttribute`);
- `HISTORY/60_stands/2026-10-01_test_crud_pg_create_failure.md` — реальный сбой с `Invalid JSON String`;
- `HOW_TO/HOWTO_ADD_NEW_SERVICE.md:87` — таблица типов параметров (`array-map-fixed`, `map-fixed`);
- `TEST_STAND/CRUD/README.md`, `docs/curated/crud/three_apps.md` — там описан `postgres_conf`.