По сообщению Виталия Зайцева (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; - критерии готовности и связанные документы. Ничего в коде, манифестах, провайдере и на стендах не менял.
6.5 KiB
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_paramsid 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.
Что сделать (порядок)
-
Спеки из 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; при работе через материализацию старую спеку заменить). -
Генерация:
./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и др.). -
Поправить манифесты (пять мест ищем по
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мог не использоваться, тогда правок не нужно.
Новый вид:
postgres_conf = { log_connections = "off" # off | on log_disconnections = "off" } -
Собрать и залить новую версию провайдера:
./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/test <ver>(диапазоны: test3.*.*, dev2.*.*, prod1.*.*; версию выбирает владелец). -
Учесть state стендов: там лежит старая форма (
TEST_STAND/CRUD/pg/terraform.tfstate:120→"postgresConf": "[{\"paramName\":...}]"), поэтому первыйplanпокажет расхождение — либо принять modify-операцию, либо привести state.applyделает владелец. -
Документация: поправить ручную страницу
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.