diff --git a/.gitignore b/.gitignore index b3b2a2d..34ce865 100644 --- a/.gitignore +++ b/.gitignore @@ -68,6 +68,8 @@ HAR/*.har *.token secrets/private_key.asc secrets/.s3cfg_registry +secrets/.s3cfg_provider +secrets/.s3cfg* secrets/pearlharbor_registry.txt secrets/id_ed25519.txt diff --git a/TOOLS/config/registry.env b/TOOLS/config/registry.env index 704eafa..15c5b40 100644 --- a/TOOLS/config/registry.env +++ b/TOOLS/config/registry.env @@ -1,5 +1,5 @@ # Единый реестр Terraform-провайдеров — независим от стенда. # Подгружается скриптами вместе с profile.env. REGISTRY_HOSTNAME="tf-registry.containerk8s.services.ngcloud.ru" -S3_BUCKET="terraform-registry" +S3_BUCKET="nubes-terraform-registry" S3_ENDPOINT="https://s3.msk-1.ngcloud.ru" diff --git a/TOOLS/scripts/03_build_and_upload_provider.sh b/TOOLS/scripts/03_build_and_upload_provider.sh index 7362092..8863069 100755 --- a/TOOLS/scripts/03_build_and_upload_provider.sh +++ b/TOOLS/scripts/03_build_and_upload_provider.sh @@ -54,7 +54,13 @@ resolve_root_path() { echo "${ROOT_DIR}/${path_value}" } -S3CFG_REGISTRY="${S3CFG_REGISTRY:-${ROOT_DIR}/secrets/.s3cfg_registry}" +if [[ -z "${S3CFG_REGISTRY:-}" ]]; then + if [[ -f "${ROOT_DIR}/secrets/.s3cfg_provider" ]]; then + S3CFG_REGISTRY="${ROOT_DIR}/secrets/.s3cfg_provider" + else + S3CFG_REGISTRY="${ROOT_DIR}/secrets/.s3cfg_registry" + fi +fi TIMEOUTS_SOURCE="${TIMEOUTS_SOURCE:-${PROFILE_DIR}/operation_timeouts.json}" PROFILE_RESOURCES_YAML_DIR="${ROOT_DIR}/generated/$(basename "$PROFILE_DIR")/resources_yaml" PROFILE_GENERATED_GO_DIR="${ROOT_DIR}/generated/$(basename "$PROFILE_DIR")/go" diff --git a/TOOLS/scripts/build-provider.sh b/TOOLS/scripts/build-provider.sh index c699a1d..eef8704 100755 --- a/TOOLS/scripts/build-provider.sh +++ b/TOOLS/scripts/build-provider.sh @@ -37,7 +37,7 @@ VERSION="${1:-2.0.2}" REGISTRY_HOSTNAME="${REGISTRY_HOSTNAME:-tf-registry.containerk8s.services.ngcloud.ru}" NAMESPACE="${NAMESPACE:-nubes}" PROVIDER_NAME="${PROVIDER_NAME:-nubes}" -S3_BUCKET="${S3_BUCKET:-terraform-registry}" +S3_BUCKET="${S3_BUCKET:-nubes-terraform-registry}" S3_ENDPOINT="${S3_ENDPOINT:-https://s3.msk-1.ngcloud.ru}" S3_ACCESS_KEY="${S3_ACCESS_KEY:-}" diff --git a/VERSIONS.md b/VERSIONS.md index c524226..148808d 100644 --- a/VERSIONS.md +++ b/VERSIONS.md @@ -5,7 +5,7 @@ | Стенд | Namespace | Версия | Дата заливки | |---|---|---|---| | PROD | `nubes` | `1.0.0` | 2026-09-03 | (новая нумерация) | -| DEV | `nubes-dev` | `2.0.0` | 2026-09-03 | (новая нумерация) | +| DEV | `nubes-dev` | `2.0.1` | 2026-09-20 | (добавлены parent modify/modifier ресурсы) | | TEST | `nubes-test` | `3.0.0` | 2026-09-03 | (новая нумерация) | ## Как проверить diff --git a/docs/help/build-and-publish.md b/docs/help/build-and-publish.md index c332efe..af610a9 100644 --- a/docs/help/build-and-publish.md +++ b/docs/help/build-and-publish.md @@ -14,8 +14,9 @@ ## 2. Публикация провайдера в Registry - Артефакты: zip, SHA256SUMS, SHA256SUMS.sig - Подпись: для .sig использовать бинарную detached подпись -- Хранилище: S3 bucket terraform-registry -- Префикс: docs//// для документации, отдельный префикс для бинарников по правилам registry-сервера +- Хранилище бинарников: S3 bucket `nubes-terraform-registry` +- Хранилище документации: S3 bucket `terraform-registry` (public) +- Префикс: `docs///` для документации, `////` для бинарников ### Канонический provider release workflow @@ -23,14 +24,14 @@ - Registry hostname: `tf-registry.containerk8s.services.ngcloud.ru`; - S3 endpoint: `https://s3.msk-1.ngcloud.ru`; -- S3 bucket: `terraform-registry`; +- S3 bucket: `nubes-terraform-registry`; - DEV namespace: `nubes-dev`; - Provider name: `nubes`. Для DEV version `2.0.1` полный путь бинарников: ```text -terraform-registry/tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes/2.0.1/ +nubes-terraform-registry/tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes/2.0.1/ ``` Публикация выполняется из корня репозитория одной командой: @@ -51,21 +52,19 @@ REQUEST_DELAY=0.05 ATTEMPTS=3 \ Перед upload скрипт проверяет, что каждый constructor из resource/modifier/action-файлов присутствует в `registry.go`, затем собирает provider для `linux/amd64`, `windows/amd64` и `darwin/amd64`. -### Credentials и VM +### Разделение S3-хранилищ и Credentials -S3 credentials не хранятся в `registry.env` и не должны попадать в командную строку или документацию. Источники рабочего ключа: +В архитектуре используются **два разных бакета S3**: -- локально: `secrets/.s3cfg_registry`; -- на VM `5.172.178.213`: `/home/naeel/.mc/config.json`; -- SSH-ключ к VM: `~/.ssh/naeel_vm_id_ed25519`. +1. **Бинарники провайдеров:** + - Бакет: `nubes-terraform-registry` + - Права на заливку: аккаунт `1112_terraform:super` (`secrets/.s3cfg_provider`, алиас `prod-s3`) + - Чтение: реестр читает через встроенный аккаунт `1112_terraform:reader` (`6DDP5...`) +2. **MkDocs-документация:** + - Бакет: `terraform-registry` (публичный) + - Права на заливку: аккаунт `1325` (`secrets/.s3cfg_registry`, алиас `registry`) -VM использовалась для прежних публикаций и содержит aliases `registry`, `reg`, `tfreg` и `nubes`. Проверка bucket без вывода секретов: - -```bash -mc ls registry/terraform-registry -``` - -Нельзя заменять bucket на `nubes-terraform-registry`: у рабочего ключа нет прав на этот bucket. Симптом ошибки — `Insufficient permissions to access this path` на стадии `mc cp`; сборка provider при этом уже может быть успешной. +Нельзя путать эти бакеты: заливка бинарников в `terraform-registry` делает версию невидимой для реестра, а попытка залить бинарники ключом документации вызывает ошибку прав доступа (`Insufficient permissions`). ### Контроль успешной публикации @@ -73,7 +72,8 @@ mc ls registry/terraform-registry 1. В выводе есть `Done. Version uploaded.` и exit code `0`. 2. В `generated//provider_build/` присутствуют ZIP, `SHA256SUMS` и `.sig`. -3. Объекты видны в точном S3 prefix через `mc ls`. +3. Объекты видны в точном S3 prefix через `mc ls prod-s3/nubes-terraform-registry/...`. +4. Запрос `curl https://tf-registry.containerk8s.services.ngcloud.ru/v1/providers///versions` возвращает новую версию в списке. Если публикация прервалась во время `01`, повторный запуск безопасен: он только читает service specs из API и перезаписывает generated YAML. Terraform apply, modify и delete для публикации не запускаются.