feat: stages output + services_list sync

- stages always visible (remove log_level gating)
- fix tty resource leak (move out of poll loop)
- show current stage [..] in addition to completed [OK]/[FAIL]
- sync services_list.txt for all 3 stands with live UI
- add YAML vs API comparison script
- bump TEST version 5.0.1 -> 5.0.2
This commit is contained in:
“Naeel”
2026-08-09 18:18:35 +04:00
parent b6b25f7548
commit fda819cd81
9 changed files with 470 additions and 31 deletions
@@ -0,0 +1,51 @@
# Баг: DEV postgres Script26 не знает resourceRealm
Дата: 2026-08-09
## Симптом
`terraform apply` на DEV стенде падает с ошибкой:
```
nubes_postgres.npg: операция ... завершилась с ошибкой:
No such property: resourceRealm for class: Script26
```
## Причина
DEV API (`lk-api-gateway-dev.ngcloud.ru`) возвращает `resourceRealm` в метаданных
сервиса postgres (ID 90, операция create, параметр startupConfiguration).
Но бэкенд-скрипт `Script26`, который фактически выполняет создание Postgres на DEV,
**не имеет** свойства `resourceRealm`.
TEST стенд работает нормально — его скрипт `resourceRealm` принимает.
## Доказательства
1. Оба API (DEV и TEST) возвращают одинаковые метаданные — `resourceRealm` присутствует:
```
generated/dev/resources_yaml/90_postgres.yaml — 2 occurrences
generated/test/resources_yaml/90_postgres.yaml — 2 occurrences
```
2. Провайдер собран **из DEV API** (не перепутан с TEST):
- YAML сгенерированы: `./TOOLS/scripts/01_generate_yamls.sh --profile TOOLS/config/dev`
- Go сгенерирован: `./TOOLS/scripts/02_generate_resources_and_docs_v2.sh --profile TOOLS/config/dev`
- Версия: `3.0.2`, Namespace: `nubes-dev`
3. Terraform-конфиг (DEV_STAND/PGwNewRegistry):
```hcl
provider "nubes" {
api_endpoint = "https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc"
}
resource "nubes_postgres" "npg" {
startup_configuration = {
resource_realm = "k8s-3-sandbox-nubes-ru"
}
}
```
## Что нужно сделать
Добавить свойство `resourceRealm` в скрипт `Script26` (DEV postgres create).
Привести DEV-скрипт в соответствие с метаданными API (как на TEST).
+35
View File
@@ -0,0 +1,35 @@
terraform {
required_providers {
nubes = {
source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-test/nubes"
version = "5.0.2"
}
}
}
variable "api_token" {
type = string
sensitive = true
description = "Nubes API token"
}
variable "s3_uid" {
type = string
sensitive = true
description = "Nubes S3 UID"
}
variable "realm" {
type = string
sensitive = true
description = "resource_realm parameter for nubes_postgres resource"
}
variable "s3_user_uid" {
type = string
description = "S3 user UUID"
}
provider "nubes" {
api_token = var.api_token
api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc"
# log_level = "debug" # none | info | debug, default = "none"
}
@@ -0,0 +1,58 @@
resource "nubes_postgres" "npg" {
resource_name = "pgdev02"
startup_configuration = {
resource_realm = var.realm
}
cluster_configuration = {
cpu = 500
memory = 512
replicas = 1
disk = 10
}
access_configuration = {
master_ip_space = "no-needed"
master_access_list = jsonencode(["10.0.0.0/8"])
slave_ip_space = "no-needed"
slave_access_list = jsonencode([])
}
postgres_configuration = {
version = "17"
ssl_required = true
pooler_master = false
pooler_slave = false
}
postgres_conf = jsonencode([{
param_name = "log_connections"
param_value = ""
}])
backup_configuration = {
s3_uid = var.s3_uid
retain = 14
schedule = "0 0 * * *"
}
autoscale_configuration = {
enabled = false
schedule = 0
percent = 10
quota = 100
}
mtls_configuration = {
type = "off"
duration_ca = 175200
duration_server = 87600
}
operation_timeout = "11m"
adopt_existing_on_create = true
}
+50
View File
@@ -0,0 +1,50 @@
# =============================================================================
# PostgreSQL — пользователи (6 шт.)
# =============================================================================
resource "nubes_postgres_user" "pg_user_0" {
postgres_id = nubes_postgres.npg.id
username = "user0"
role = "ddl_user"
mtls_access = false
adopt_existing_on_create = true
}
# resource "nubes_postgres_user" "pg_user_1" {
# postgres_id = nubes_postgres.npg.id
# username = "user1"
# role = "ddl_user"
# adopt_existing_on_create = true
# }
# # =============================================================================
# # PostgreSQL — базы данных (3 шт.)
# # =============================================================================
# resource "nubes_postgres_database" "pg_db_1" {
# postgres_id = nubes_postgres.npg.id
# db_name = "dbapp1"
# db_owner = nubes_postgres_user.pg_user_1.username
# adopt_existing_on_create = true
# }
resource "nubes_postgres_database" "pg_db_2" {
postgres_id = nubes_postgres.npg.id
db_name = "dbapp2"
db_owner = nubes_postgres_user.pg_user_0.username
adopt_existing_on_create = true
}
# resource "nubes_postgres_database" "pg_db_3" {
# postgres_id = nubes_postgres.npg.id
# db_name = "dbapp3"
# db_owner = nubes_postgres_user.pg_user_1.username
# adopt_existing_on_create = true
# }
# S3 bucket — замени "buck0" на своё имя везде ниже
resource "nubes_s3bucket" "bukka0" { # ← замени buck0 на своё имя ресурса
resource_name = "btst" # ← замени buck0 на своё имя ресурса
#s3_user_uid = "naeel-s3"
s3_user_uid = var.s3_user_uid
bucket_name = "bucktst000" # ← замени buck0 на своё имя бакета
adopt_existing_on_create = true
}