From 2247c0382d643e9b60e0c96c2ef136cc28dc576f Mon Sep 17 00:00:00 2001 From: Repinoid Date: Fri, 2 Oct 2026 13:06:19 +0300 Subject: [PATCH] =?UTF-8?q?docs(todo):=20postgresConf=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D0=B5=D0=B4=D1=91=D0=BD=20=D0=BF=D0=BB=D0=B0=D1=82?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=BE=D0=B9=20=D0=B2=20map-fixed=20?= =?UTF-8?q?=E2=80=94=20=D0=B7=D0=B0=D1=84=D0=B8=D0=BA=D1=81=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BE,=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BD=D0=B5=20=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=20=D0=9F=D0=BE=20=D1=81=D0=BE=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D1=8E=20=D0=92=D0=B8=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=97=D0=B0=D0=B9=D1=86=D0=B5=D0=B2=D0=B0=20(02?= =?UTF-8?q?.10.2026):=20=C2=AB=D0=92=20Postgres=20=D0=BF=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20cfs-=D0=BF=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=20postgresConf,=20=D1=8D=D1=82=D0=BE=20?= =?UTF-8?q?=D0=BD=D1=83=D0=B6=D0=BD=D0=BE=20=D0=B1=D1=83=D0=B4=D0=B5=D1=82?= =?UTF-8?q?=20=D1=83=D1=87=D0=B5=D1=81=D1=82=D1=8C=20=D0=BD=D0=B0=20=D0=B2?= =?UTF-8?q?=D1=81=D1=8F=D0=BA=D0=B8=D0=B9=C2=BB.=20=D0=92=20docs/TODO/post?= =?UTF-8?q?gres=5Fconf=5Fmap=5Ffixed.md=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE:=20-=20=D1=81=D1=83=D1=82=D1=8C:=20cfs-?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=20postgresConf?= =?UTF-8?q?=20(id=20792)=20=D1=81=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20=D1=82?= =?UTF-8?q?=D0=B8=D0=BF=20array-map-fixed=20->=20map-fixed,=20=20=20=D0=B2?= =?UTF-8?q?=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20generic=20paramName/paramValue?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8F=20log=5Fconnections/log=5Fdisconnections=20=20=20(off|on?= =?UTF-8?q?,=20default=20off);=20=D0=B2=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=B9=D0=B4=D0=B5=D1=80=D0=B5=20=D1=8D=D1=82=D0=BE=20=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=8F=D0=B5=D1=82=20=D0=B0=D1=82=D1=80=D0=B8=D0=B1?= =?UTF-8?q?=D1=83=D1=82=20postgres=5Fconf=20=D1=81=D0=BE=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=D0=B8=20=20=20JSON=20=D0=BD=D0=B0=20=D0=B2?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=8A=D0=B5=D0=BA=D1=82;=20-=20=D0=B8=D1=81=D1=82=D0=BE=D1=87?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B8:=20=D0=BD=D0=BE=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=81=D0=BF=D0=B5=D0=BA=D0=B0=20generated/dev/resources=5Fyaml?= =?UTF-8?q?/90=5Fpostgres.yaml,=20=D1=81=D1=82=D0=B0=D1=80=D0=B0=D1=8F=20?= =?UTF-8?q?=E2=80=94=20=20=20.bak-20260930T183804Z=20=D0=B8=20provider/res?= =?UTF-8?q?ources=5Fyaml/90=5Fpostgres.yaml;=20=D0=BA=D0=BE=D0=B4=20?= =?UTF-8?q?=E2=80=94=20=20=20provider/internal/resources=5Fgen/90=5Fpostgr?= =?UTF-8?q?es=5Fresource.go:99=20(types.String)=20=D0=BF=D1=80=D0=BE=D1=82?= =?UTF-8?q?=D0=B8=D0=B2=20=20=20generated/dev/go/90=5Fpostgres=5Fresource.?= =?UTF-8?q?go:75-79,104;=20-=20=D0=BF=D0=BE=D1=87=D0=B5=D0=BC=D1=83=20?= =?UTF-8?q?=D0=BA=D1=80=D0=B8=D1=82=D0=B8=D1=87=D0=BD=D0=BE:=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D1=8E=D1=89=D0=B5=D0=B5=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B8=D0=BF=D0=B0?= =?UTF-8?q?=20=D0=B0=D1=82=D1=80=D0=B8=D0=B1=D1=83=D1=82=D0=B0=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B2=D1=81=D0=B5=D1=85,=20=D1=83=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=B5=D1=81=D1=82=D1=8C=20=20=20postgres?= =?UTF-8?q?=5Fconf;=20-=20=D0=BF=D0=BB=D0=B0=D0=BD:=2001=20->=2002=20->=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20=D0=BC=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=84=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20(TEST=5FSTAND/CRUD/pg/po?= =?UTF-8?q?stgres.tf,=20=20=20DEV=5FSTAND/CRUD/postgres.tf:30,=20DEV=5FSTA?= =?UTF-8?q?ND/POSTGRES/nubes=5Fpostgres.tf:30,=20=D0=BF=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=B8=D1=82=D1=8C=20=20=20PROD=5FSTAND/*)=20->=200?= =?UTF-8?q?3=20=D1=81=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B9=20=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D1=81=D0=B8=D0=B5=D0=B9=20->=20=D1=83=D1=87=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8C=20state=20->=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=B8=2004;=20-=20=D0=BA=D1=80=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=B8=D0=B8=20=D0=B3=D0=BE=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=B8=20=D1=81=D0=B2=D1=8F?= =?UTF-8?q?=D0=B7=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=B4=D0=BE=D0=BA=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D1=8B.=20=D0=9D=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B5,=20=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=84=D0=B5=D1=81=D1=82=D0=B0=D1=85,=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B0=D0=B9=D0=B4=D0=B5=D1=80=D0=B5=20?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=B0=20=D1=81=D1=82=D0=B5=D0=BD=D0=B4=D0=B0?= =?UTF-8?q?=D1=85=20=D0=BD=D0=B5=20=D0=BC=D0=B5=D0=BD=D1=8F=D0=BB.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/TODO/postgres_conf_map_fixed.md | 89 ++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 docs/TODO/postgres_conf_map_fixed.md 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`.