# 2026-10-01 — Перезаливка 1.0.0 / 2.0.0 / 3.0.0 с выходом `password` у подресурсов-пользователей > Команда владельца: «делай. сначала удали старые .0 провайдеры чтобы не путаться» + > подтверждение номеров: `1.0.0` / `2.0.0` / `3.0.0`. ## Зачем перезаливать После релиза `keep_on_destroy` (см. `HISTORY/2026-10-01_release_keep_on_destroy_subresources.md`) в мастер пришла новая фича: **подресурс-пользователь отдаёт пароль своим выходом** (коммиты `58c519e` — генератор/ядро, `066d6b4` — стенд, `1a049ef` — архитектура). Причина: пароль пользователя генерирует платформа и кладёт его в секрет Vault **родительского инстанса**, а `vault_secrets` родителя — `Computed` и обновляется только при его `Read`. Поэтому внутри одного `apply` после `create_user` пароль был недоступен: `jsondecode(vault_secrets["users"])[...]` → `Invalid index`. Из-за этого стенду требовались костыль `try()` или двухшаговый apply. ## Шаг 0. Удаление старых версий (необратимо) Сначала удалены **физически** старые версии (бакет `un-versioned`): ```bash mc --config-dir /tmp/mc-cfg rm --recursive --force \ prod-s3/nubes-terraform-registry/tf-registry.containerk8s.services.ngcloud.ru//nubes// ``` | Namespace | Версия | Удалено объектов | |---|---|---| | `nubes` (prod) | `1.0.0` | 5 | | `nubes-test` | `3.0.0` | 5 | | `nubes-dev` | `2.0.0` | 5 | Не тронуты: `2.0.1`, `2.0.21`–`2.0.24` (dev). ## Шаг 1. Заливка новых сборок под теми же номерами ```bash export MC_CONFIG_DIR=/tmp/mc-cfg ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/test 3.0.0 ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev 2.0.0 ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/prod 1.0.0 ``` | Стенд | Namespace | Версия | sha256 залитого == локальному | |---|---|---|---| | TEST | `nubes-test` | `3.0.0` | ✅ `e188a635064ec0fc…` | | DEV | `nubes-dev` | `2.0.0` | ✅ `ac8d99fb02487272…` | | PROD | `nubes` | `1.0.0` | ✅ `0de9aa4537a74ecf…` | API `/versions`: `nubes` → `['1.0.0']`, `nubes-test` → `['3.0.0']`, `nubes-dev` → `['2.0.0','2.0.1','2.0.21','2.0.22','2.0.23','2.0.24']`. ## Шаг 2. Проверка схемы залитой сборки (test 3.0.0) `terraform providers schema -json` (62 ресурса): | Ресурс | `password` в схеме | Что это | |---|---|---| | `nubes_postgres_user` | `computed: true, sensitive: true` | **новый выход** (читается из Vault родителя) | | `nubes_kafka_user` | `computed: true, sensitive: true` | новый выход | | `nubes_clickhouse_user` | `computed: true, sensitive: true` | новый выход | | `nubes_mongodb_user` | `computed: true, sensitive: true` | новый выход | | `nubes_postgres_database` | нет атрибута | — | | `nubes_mariadb_user` | `optional+computed+sensitive` | **входной** параметр (не тронут) | | `nubes_pgadmin` | `required+sensitive` | **входной** параметр сервиса (не тронут) | Признак фичи вычисляется из данных спека (см. `TOOLS/ARCHITECTURE.md`): `подресурс user` + `у сервиса есть vault-выходы` + `create_user принимает username` + `create_user НЕ принимает password`. Имя сервиса в коде не проверяется. ## Шаг 3. Стенд `TEST_STAND/CRUD/pg/outputs.tf`: ```hcl output "pg_password" { value = nubes_postgres_user.crud_user_0.password sensitive = true } ``` Проверено после релиза: `terraform init` + `validate` → Success; `plan` → `3 to add, 0 to change, 0 to destroy`, в плане `password = (sensitive value)`. Ни `try()`, ни двух apply в `pg/` больше не требуется. Локальные кэши провайдера в `pg/` и `apps/` переинициализированы (при той же версии Terraform не перекачивает пакет: `.terraform.lock.hcl` фиксирует хэши — при несовпадении удалить lock и `.terraform/providers`, затем `terraform init`). ## ⚠️ Состояние стенда на момент релиза `TEST_STAND/CRUD/pg/terraform.tfstate` — **пуст** (180 байт, `resources: []`, `terraform state list` пуст), бэкап — 10010 байт. В облаке инстанс `pg4crud2` существовал в статусе `deleted`/`isSuspended` (проверка по API ранее). Исполнитель (агент) `apply`/`destroy` не запускал — только `init`/`validate`/`plan`/`state`-чтение. ## Связанные документы - `TOOLS/ARCHITECTURE.md` → «Subresource-born secrets» — принцип и правило; - `HISTORY/2026-10-01_release_keep_on_destroy_subresources.md` — прошлая перезаливка; - `HISTORY/2026-09-30_dev_registry_prune_versions.md` — процедура удаления версий; - `VERSIONS.md` — таблица версий (обновлена).