Files
tf_provider/docs/TODO/postgres_conf_map_fixed.md
T
Repinoid 2247c0382d 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;
- критерии готовности и связанные документы.
Ничего в коде, манифестах, провайдере и на стендах не менял.
2026-10-02 13:06:19 +03:00

6.5 KiB
Raw Blame History

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 мог не использоваться, тогда правок не нужно.

    Новый вид:

    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.