diff --git a/docs/TODO/postgres_conf_map_fixed.md b/docs/TODO/postgres_conf_map_fixed.md new file mode 100644 index 0000000..20bc218 --- /dev/null +++ b/docs/TODO/postgres_conf_map_fixed.md @@ -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 ` + (диапазоны: 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`.