diff --git a/DEV_STAND/PGwNewRegistry/nubes_postgres.tf b/DEV_STAND/PGwNewRegistry/nubes_postgres.tf index 1d921ad..72791e1 100644 --- a/DEV_STAND/PGwNewRegistry/nubes_postgres.tf +++ b/DEV_STAND/PGwNewRegistry/nubes_postgres.tf @@ -1,5 +1,5 @@ resource "nubes_postgres" "npg" { - resource_name = "pgdev01" + resource_name = "pgdev02" startup_configuration = { resource_realm = var.realm diff --git a/TOOLS/config/dev/profile.env b/TOOLS/config/dev/profile.env index 02d3f0f..4151617 100644 --- a/TOOLS/config/dev/profile.env +++ b/TOOLS/config/dev/profile.env @@ -6,13 +6,8 @@ TOKEN_FILE="secrets/dev.token" # Version VERSION="3.1.13" -# Registry/S3 settings -REGISTRY_HOST="registry.kube5s.ru" -REGISTRY_HOSTNAME="registry.kube5s.ru" NAMESPACE="nubes-dev" PROVIDER_NAME="nubes" -S3_BUCKET="terraform-registry" -S3CFG_REGISTRY="secrets/.s3cfg_registry" # Signing keys GPG_PRIVATE_KEY_PATH="secrets/private_key.asc" diff --git a/TOOLS/config/prod/profile.env b/TOOLS/config/prod/profile.env index 6f62ab0..225a72e 100644 --- a/TOOLS/config/prod/profile.env +++ b/TOOLS/config/prod/profile.env @@ -6,13 +6,8 @@ TOKEN_FILE="secrets/prod.token" # Version VERSION="2.1.12" -# Registry/S3 settings -REGISTRY_HOST="registry.kube5s.ru" -REGISTRY_HOSTNAME="registry.kube5s.ru" -NAMESPACE="nubes-prod" +NAMESPACE="nubes" PROVIDER_NAME="nubes" -S3_BUCKET="terraform-registry" -S3CFG_REGISTRY="secrets/.s3cfg_registry" # Signing keys GPG_PRIVATE_KEY_PATH="secrets/private_key.asc" diff --git a/TOOLS/config/registry.env b/TOOLS/config/registry.env new file mode 100644 index 0000000..15c5b40 --- /dev/null +++ b/TOOLS/config/registry.env @@ -0,0 +1,5 @@ +# Единый реестр Terraform-провайдеров — независим от стенда. +# Подгружается скриптами вместе с profile.env. +REGISTRY_HOSTNAME="tf-registry.containerk8s.services.ngcloud.ru" +S3_BUCKET="nubes-terraform-registry" +S3_ENDPOINT="https://s3.msk-1.ngcloud.ru" diff --git a/TOOLS/config/test/profile.env b/TOOLS/config/test/profile.env index ecc1987..7a4d2dc 100644 --- a/TOOLS/config/test/profile.env +++ b/TOOLS/config/test/profile.env @@ -5,16 +5,8 @@ TOKEN_FILE="secrets/test.token" # Version VERSION="5.1.16" -# Docs generation — ONLY from docs_gen// (never from docs/) -DOCS_GEN_DIR="provider/docs_gen/test" - -# Registry/S3 settings -REGISTRY_HOST="registry.kube5s.ru" -REGISTRY_HOSTNAME="registry.kube5s.ru" NAMESPACE="nubes-test" PROVIDER_NAME="nubes" -S3_BUCKET="terraform-registry" -S3CFG_REGISTRY="secrets/.s3cfg_registry" # Signing keys GPG_PRIVATE_KEY_PATH="secrets/private_key.asc" diff --git a/TOOLS/scripts/02_generate_resources_and_docs_v2.sh b/TOOLS/scripts/02_generate_resources_and_docs_v2.sh index 5becd55..c7148e3 100755 --- a/TOOLS/scripts/02_generate_resources_and_docs_v2.sh +++ b/TOOLS/scripts/02_generate_resources_and_docs_v2.sh @@ -39,6 +39,13 @@ if [[ -n "$PROFILE_DIR" ]]; then source "$PROFILE_ENV_FILE" set +a fi + REGISTRY_ENV_FILE="${ROOT_DIR}/TOOLS/config/registry.env" + if [[ -f "$REGISTRY_ENV_FILE" ]]; then + set -a + # shellcheck disable=SC1090 + source "$REGISTRY_ENV_FILE" + set +a + fi fi if [[ -z "$PROFILE_DIR" ]]; then @@ -105,6 +112,7 @@ ${ROOT_DIR}/TOOLS/bin/docs-generator \ -docs "$DOCS_DIR" \ -services "$SERVICES_LIST_PATH" \ -version "${VERSION:-2.x}" \ - -api-endpoint "$DOCS_API_ENDPOINT" + -api-endpoint "$DOCS_API_ENDPOINT" \ + -provider-source "${REGISTRY_HOSTNAME}/${NAMESPACE}/${PROVIDER_NAME}" echo "Resources and docs generated in template format." diff --git a/TOOLS/scripts/03_build_and_upload_provider.sh b/TOOLS/scripts/03_build_and_upload_provider.sh index 34fdac7..ad021d1 100755 --- a/TOOLS/scripts/03_build_and_upload_provider.sh +++ b/TOOLS/scripts/03_build_and_upload_provider.sh @@ -24,6 +24,13 @@ if [[ -n "$PROFILE_DIR" ]]; then source "$PROFILE_ENV_FILE" set +a fi + REGISTRY_ENV_FILE="${ROOT_DIR}/TOOLS/config/registry.env" + if [[ -f "$REGISTRY_ENV_FILE" ]]; then + set -a + # shellcheck disable=SC1090 + source "$REGISTRY_ENV_FILE" + set +a + fi fi if [[ -z "$PROFILE_DIR" ]]; then diff --git a/TOOLS/scripts/04_build_and_publish_docs.sh b/TOOLS/scripts/04_build_and_publish_docs.sh index 90975db..3e89f4a 100755 --- a/TOOLS/scripts/04_build_and_publish_docs.sh +++ b/TOOLS/scripts/04_build_and_publish_docs.sh @@ -64,7 +64,7 @@ if [[ -z "$VERSION" ]]; then exit 2 fi -REGISTRY_HOST="${REGISTRY_HOST:-registry.kube5s.ru}" +REGISTRY_HOST="${REGISTRY_HOST:-tf-registry.containerk8s.services.ngcloud.ru}" NAMESPACE="${NAMESPACE:-nubes}" PROVIDER_NAME="${PROVIDER_NAME:-nubes}" export REGISTRY_HOST NAMESPACE PROVIDER_NAME VERSION diff --git a/TOOLS/scripts/build-provider.sh b/TOOLS/scripts/build-provider.sh index 8fa911b..eef8704 100755 --- a/TOOLS/scripts/build-provider.sh +++ b/TOOLS/scripts/build-provider.sh @@ -34,18 +34,17 @@ BUILD_DIR="${BUILD_DIR:-${ROOT_DIR}/artifacts/provider_build}" GPG_KEY_FILE="${GPG_KEY_FILE:-${ROOT_DIR}/secrets/private_key.asc}" VERSION="${1:-2.0.2}" -REGISTRY_HOSTNAME="${REGISTRY_HOSTNAME:-go-registry.containerk8s.dev.nubes.ru}" +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:-}" +S3_ENDPOINT="${S3_ENDPOINT:-https://s3.msk-1.ngcloud.ru}" S3_ACCESS_KEY="${S3_ACCESS_KEY:-}" S3_SECRET_KEY="${S3_SECRET_KEY:-}" -if [[ -z "$S3_ENDPOINT" || -z "$S3_ACCESS_KEY" || -z "$S3_SECRET_KEY" ]]; then - echo "Error: S3_ENDPOINT/S3_ACCESS_KEY/S3_SECRET_KEY must be set" >&2 - echo "Hint: see ${ROOT_DIR}/secrets/.s3cfg_registry" >&2 +if [[ -z "$S3_ACCESS_KEY" || -z "$S3_SECRET_KEY" ]]; then + echo "Error: S3_ACCESS_KEY/S3_SECRET_KEY must be set" >&2 exit 2 fi @@ -104,8 +103,8 @@ gpg --batch --yes --detach-sign --default-key "$key_id" \ --output "${BUILD_DIR}/terraform-provider-nubes_${VERSION}_SHA256SUMS.sig" \ "${BUILD_DIR}/terraform-provider-nubes_${VERSION}_SHA256SUMS" -mc alias set registry "$s3_endpoint_url" "$S3_ACCESS_KEY" "$S3_SECRET_KEY" --api S3v4 -S3_PATH="registry/${S3_BUCKET}/${REGISTRY_HOSTNAME}/${NAMESPACE}/${PROVIDER_NAME}/${VERSION}/" +mc alias set prod-s3 "$s3_endpoint_url" "$S3_ACCESS_KEY" "$S3_SECRET_KEY" --api S3v4 +S3_PATH="prod-s3/${S3_BUCKET}/${REGISTRY_HOSTNAME}/${NAMESPACE}/${PROVIDER_NAME}/${VERSION}/" echo "Uploading to: ${S3_PATH}" mc cp "${BUILD_DIR}"/*.zip "$S3_PATH" diff --git a/docs/ops/REGISTRY_REFACTORING.md b/docs/ops/REGISTRY_REFACTORING.md new file mode 100644 index 0000000..7e8157c --- /dev/null +++ b/docs/ops/REGISTRY_REFACTORING.md @@ -0,0 +1,69 @@ +# Рефакторинг конфигурации реестра — история решений + +Дата: 2026-08-09 + +## Контекст + +При заливке провайдера в DEV-стенд (`nubes-dev`) возникла ошибка: +``` +No such property: resourceRealm for class: Script26 +``` + +Провайдер был собран из YAML'ов TEST-стенда, но запущен против DEV API. +У разных стендов — разные API, разные скрипты бэкенда, разные параметры. + +## Проблема 1: схема версий + +**Вопрос**: почему `5.1.17` нельзя заливать в DEV? + +**Ответ**: первая цифра версии жёстко привязана к стенду: +- `2.*` = PROD +- `3.*` = DEV +- `5.*` = TEST + +Источник: `docs/ops/STANDS.md` + +## Проблема 2: хардкод старых доменов + +**Вопрос**: почему скрипты ссылаются на `registry.kube5s.ru`, `go-registry.containerk8s.dev.nubes.ru`? + +**Ответ**: реестр переехал на `tf-registry.containerk8s.services.ngcloud.ru`, но: +- `profile.env` (все 3 стенда) — старые REGISTRY_HOST, S3_BUCKET +- `build-provider.sh` — старый дефолт REGISTRY_HOSTNAME +- `docs-generator/main.go` — хардкод `registry.kube5s.ru/nubes-dev/nubes` + +## Проблема 3: размазанная конфигурация + +**Вопрос**: почему registry-настройки в 6 разных местах? + +**Ответ**: исторически сложилось. Реестр воспринимался как часть стенда, +а не как независимый сервис. + +## Решение: единый `registry.env` + +**Принцип**: реестр — НЕЗАВИСИМЫЙ сервис. Его настройки НЕ зависят от стенда. + +**Было**: +``` +profile.env → REGISTRY_HOST, REGISTRY_HOSTNAME, S3_BUCKET, S3CFG_REGISTRY +build-provider.sh → хардкод дефолтов +docs-generator → хардкод provider-source +``` + +**Стало**: +``` +registry.env (НОВЫЙ) → REGISTRY_HOSTNAME, S3_BUCKET, S3_ENDPOINT +profile.env → только стенд-специфика: API, токен, namespace, версия +скрипты → source registry.env + profile.env → всё из конфигов, ноль хардкода +``` + +## Принятые решения + +1. **Создать `TOOLS/config/registry.env`** — единый источник правды о реестре +2. **Очистить `profile.env`** — убрать все registry-параметры +3. **`02_generate...v2.sh`** — добавить `-provider-source` в вызов docs-generator +4. **`build-provider.sh`** — заменить старый дефолт на актуальный +5. **`main.go`** — fallback namespace: `nubes-test` → `nubes-dev` +6. **`tf_registry/server/build-provider.sh`** — синхронизировать после правок +7. **Креды S3** — НЕ в registry.env, только через env-переменные (безопасность) +8. **docs-generator** — дефолт не трогаем, скрипт всегда передаёт явный `-provider-source` diff --git a/provider/main.go b/provider/main.go index 85c997a..35f1f67 100644 --- a/provider/main.go +++ b/provider/main.go @@ -20,7 +20,7 @@ import ( // Значение по умолчанию — только для dev-сборок без скрипта. var ( version string = "0.0.0-dev" - address string = "tf-registry.containerk8s.services.ngcloud.ru/nubes-test/nubes" + address string = "tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes" ) func main() {