- старые x.0.0 удалены физически из реестра по команде владельца, затем залиты заново теми же номерами; sha256 всех трёх сверен с локальными сборками; - VERSIONS.md: новые sha256 + пометка об удалении версий; - HISTORY: зачем, что удалено, схема залитой сборки (password — новый выход у postgres_user/kafka_user/clickhouse_user/mongodb_user; у mariadb_user и pgadmin это прежние входные параметры), проверка стенда, состояние state.
5.6 KiB
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):
mc --config-dir /tmp/mc-cfg rm --recursive --force \
prod-s3/nubes-terraform-registry/tf-registry.containerk8s.services.ngcloud.ru/<ns>/nubes/<v>/
| 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. Заливка новых сборок под теми же номерами
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:
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— таблица версий (обновлена).