diff --git a/HISTORY/2026-07-02_api_gateway_migration.md b/HISTORY/2026-07-02_api_gateway_migration.md index 7f8883a..558a1bc 100644 --- a/HISTORY/2026-07-02_api_gateway_migration.md +++ b/HISTORY/2026-07-02_api_gateway_migration.md @@ -96,3 +96,79 @@ NUBES_API_ENDPOINT="https://lk-api-gateway.ngcloud.ru/api/v1/svc" # prod ``` Всё остальное — авто-детект. + +--- + +## Доступ к СТАРОМУ deck-api (DDoS-Guard 403) + +Старый API **жив**, но DDoS-Guard усилил фильтрацию. Просто `User-Agent: Mozilla/5.0` уже недостаточно. + +### Рабочие заголовки для curl: + +```bash +curl -H "Authorization: Bearer $TOKEN" \ + -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" \ + -H "Referer: https://deck-test.ngcloud.ru/" \ + "https://deck-api-test.ngcloud.ru/api/v1/index.cfm?endpoint=/services/90" +``` + +**Ключевое**: `Referer` с доменом того же стенда. Без него — 403. + +### Без токена (публичные эндпоинты): + +```bash +curl -H "User-Agent: Mozilla/5.0" \ + "https://deck-api-test.ngcloud.ru/api/v1" +# → 200 (OK) +``` + +### Что изменилось с июля 2026 + +DDoS-Guard ужесточил правила: +- Старый `User-Agent: Mozilla/5.0` + `Accept: */*` → 403 +- Новый: нужен полный браузерный User-Agent + Referer +- Провайдер (v5.0.75) использовал старые заголовки — при следующем билде надо обновить +- Новый Gateway (`lk-api-gateway`) — 403 не выдаёт, работает с любым User-Agent + +--- + +## Проблема map-fixed параметров и dataDescriptor + +### Суть + +Новый Gateway группирует плоские параметры в map-fixed JSON-блоки. Sub-поля (`dataDescriptor`) не видны в `/serviceOperation/{id}` — появляются только в ответе уже выполненной операции `/instanceOperations/{uid}`. + +### Как получить sub-поля (на примере postgres) + +```bash +# 1. Найти любой успешный инстанс postgres +curl ... "https://deck-api-test.ngcloud.ru/api/v1/index.cfm?endpoint=/instances?serviceId=90&page=1&size=1" + +# 2. Взять instanceUid → запросить операции → взять create-операцию +curl ... "https://deck-api-test.ngcloud.ru/api/v1/index.cfm?endpoint=/instances/{uid}" + +# 3. Запросить операцию — в cfsParams будет dataDescriptor с sub-полями +curl ... "https://deck-api-test.ngcloud.ru/api/v1/index.cfm?endpoint=/instanceOperations/{opUid}" +``` + +### Правильные JSON-ключи для postgres (из dataDescriptor) + +| Блок | Поля | +|---|---| +| `startupConfiguration` | `resourceRealm` | +| `clusterConfiguration` | `cpu`, `memory`, `replicas`, `disk` | +| `accessConfiguration` | `masterIpSpace`, `masterAccessList`, `slaveIpSpace`, `slaveAccessList` | +| `postgresConfiguration` | `version`, `sslRequired`, `poolerMaster`, `poolerSlave` | +| `postgresConf` | `paramName`, `paramValue` (массив) | +| `backupConfiguration` | `s3Uid`, `retain`, `schedule` | +| `autoscaleConfiguration` | `enabled`, `schedule`, `quota`, `percent` | + +### Обсуждение с девопсами (02.07.2026) + +- Плоские параметры **не вернутся** — map-fixed остаётся (нужно для групп ключей, нод, учёток) +- Структуру блоков обещают давать в API, но пока не придумали формат +- Пока единственный источник структуры — Jenkins-конфиги + +### CMDB backend bug + +При run операции бэкенд `/app/cmdb` падает с `ValidationError: InstanceState: version, instanceUid, dtState, isTest, instanceOperationUid — can't be blank`. Это баг в Gateway→CMDB, не в провайдере. diff --git a/TEST_STAND/POSTGRES/resources.tf b/TEST_STAND/POSTGRES/resources.tf index 753ce20..b07ff89 100644 --- a/TEST_STAND/POSTGRES/resources.tf +++ b/TEST_STAND/POSTGRES/resources.tf @@ -1,40 +1,42 @@ resource "nubes_postgres" "npg" { resource_name = "pg4tf033" - cluster_configuration = jsonencode({ - platform = var.realm - instances = 1 - memory = 512 - cpu = 500 - disk = "1" + startup_configuration = jsonencode({ + resourceRealm = var.realm }) - startup_configuration = jsonencode({ - appVersion = "17" + cluster_configuration = jsonencode({ + cpu = 500 + memory = 512 + replicas = 1 + disk = "1" }) access_configuration = jsonencode({ - needExternalAddressMaster = false + masterIpSpace = "" + masterAccessList = "" + slaveIpSpace = "" + slaveAccessList = "" }) postgres_configuration = jsonencode({ - enablePgPoolerMaster = false - enablePgPoolerSlave = false - allowNoSsl = false - s3Uid = var.s3_uid - jsonParameters = jsonencode({ - log_connections = "off" - log_disconnections = "off" - }) + version = "17" + sslRequired = false + poolerMaster = false + poolerSlave = false }) - backup_configuration = jsonencode({}) + backup_configuration = jsonencode({ + s3Uid = var.s3_uid + retain = "7" + schedule = "0 0 * * *" + }) autoscale_configuration = jsonencode({ - autoScale = false - percentage = 10 - techWindow = 0 - quotaGb = "1" + enabled = false + schedule = "" + quota = "1" + percent = 10 }) operation_timeout = "11m"