svc-api: переход на Gateway (lk-api-gateway), User-Agent+Referer для DDoS-Guard, метод Виталия /instanceOperations/default/{id} с dataDescriptor, LEGACY-пометки везде

This commit is contained in:
“Naeel”
2026-07-16 13:48:34 +04:00
parent b9130fdd79
commit f5547c0465
87 changed files with 505 additions and 288 deletions
+4 -1
View File
@@ -1,3 +1,5 @@
<!-- ⛔⛔⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ! Все примеры ниже — ИСТОРИЧЕСКИЕ. -->
<!-- Актуальный API: https://lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Сводка по разработке Terraform-провайдера Nubes
Дата: 2026-01-22
@@ -111,7 +113,8 @@ curl -s -X POST "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/
```
- Проверка API:
```bash
curl -H "Authorization: Bearer $TOKEN" https://deck-api.ngcloud.ru/api/v1/index.cfm/instances
# ⛔ LEGACY: в примере ниже deck-api заменён на Gateway.
curl -H "Authorization: Bearer $TOKEN" https://lk-api-gateway.ngcloud.ru/api/v1/svc/instances
```
---
+3
View File
@@ -1,5 +1,8 @@
# Terraform Provider для Nubes Cloud - История разработки
<!-- ⛔⛔⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ! Все упоминания ниже — ИСТОРИЧЕСКИЕ. -->
<!-- Актуальный API: https://lk-api-gateway.ngcloud.ru/api/v1/svc -->
**Дата**: 21 января 2026
**Проект**: terraform-provider-mycloud
**Цель**: Создание Terraform Provider для управления ресурсами в облачной платформе Nubes
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# PostgreSQL Service Analysis & Implementation Plan
**Date:** 2026-01-27
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Resource Realm: универсальное определение через API
## Зачем это нужно
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# VM Service Discovery & Implementation Details
## Обзор
+2 -1
View File
@@ -31,7 +31,8 @@ terraform {
}
provider "nubes" {
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
# ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Использовать lk-api-gateway.
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc"
api_token = var.api_token
}
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# S3 Bucket Notifications: изменения в бакете и вызов функции
## Короткий ответ
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_akhq" "baza" {
resource_realm = "TODO" # Выбрать платформу из списка
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_dnsrecord" "baza" {
zone_uid = "TODO" # UUID экземпляра услуги DNS-зоны
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_dnszone" "baza" {
zone_email = "TODO" # Контактный e-mail
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_dummy" "baza" {
resource_realm = "TODO" # Платформа для развертывания
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_flask" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_gitea_complex" "baza" {
}
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_gitea" "baza" {
psql_uid = "TODO" # UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_harbor" "baza" {
resource_realm = "TODO" # Платформа для развертывания
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_http" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_k8s_sthutrval_cluster" "baza" {
nsxt_uid = "TODO" # InstanceUid nsxt. Nsxt должен быть создан
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_k8s_ziti_controller" "baza" {
resource_realm = "TODO" # Платформа для развертывания
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_kafka" "baza" {
resource_instances = 1 # Пример: `2`
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_lucee" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_mariadb" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_mongodb" "baza" {
resource_instances = 1 # Пример: `2`
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_nextcloud" "baza" {
psql_uid = "TODO"
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_nifi" "baza" {
kafka_uid = "TODO" # Выбрать кластер из списка
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_nodejs" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_nodered" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_openwhisk" "baza" {
username = "TODO" # Имя пользователя Openwhisk
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_pgadmin" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_rabbitmq" "baza" {
resource_realm = "TODO" # Выбрать платформу из списка
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_redis" "baza" {
resource_realm = "TODO" # Платформа для развертывания
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_s3" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_s3bucket" "baza" {
s3_user_uid = "235e0546-..." # UID Корневой услуги S3. На основе него будет создан бакет.
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_superset" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_template" "baza" {
resource_realm = "TODO" # Платформа для развертывания
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_tenant" "baza" {
grafana_org_name = "TODO" # WZ-Код клиента
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_valo_tenant" "baza" {
resource_realm = "TODO"
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vapp" "baza" {
nsxt_uid = "TODO" # UUID Услуги `Сетевой шлюз периметра (Edge)`
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vc_complex" "baza" {
resource_realm = "TODO" # Платформа для развертывания
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vc_nsxt" "baza" {
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vc_org" "baza" {
resource_realm = "TODO" # Облако в котором будет развёрнут тенант
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vc_org_saas" "baza" {
resource_realm = "TODO" # Платформа для развертывания
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vc_vdc" "baza" {
organization_uid = "TODO" # Для создания VDC предварительно необходимо создать организацию через услугу `Организация в Cloud Director`
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vc_vdc_group" "baza" {
vdc_uid = "TODO"
+1 -1
View File
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vc_vm" "baza" {
vapp_uid = "TODO" # InstanceUid vApp. vApp должен быть создан
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vc_vm_v2" "baza" {
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vc_vm_v3" "baza" {
vapp_uid = "TODO"
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vcexternalip" "baza" {
service_uid = "TODO"
@@ -21,7 +21,7 @@ terraform {
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc" <!-- LEGACY index.cfm удалён, заменён на Gateway -->
}
resource "nubes_vmpostgre" "baza" {
vdc_uid = "TODO" # InstanceUid vdc. Vdc должен быть создан
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# PostgreSQL backend bugs (2026-02-28)
## Scope
+75 -21
View File
@@ -33,30 +33,84 @@
---
## 3. Обнаружение схемы параметров для сервиса (Parameter Scheme Discovery)
## 3. Обнаружение схемы параметров для сервиса (метод Виталия)
Поскольку прямого эндпоинта со списком всех определений параметров нет, используется паттерн "Черновик операции".
> **Это канонический метод получения ВСЕХ параметров, включая подполя map-fixed.**
> Источник: Виталий Зайцев (DevOps Nubes), 15.07.2026.
### Шаг А: Создание черновика
1. **Запрос:** `POST /v1/index.cfm/instanceOperations`
2. **Тело:**
```json
{
"operation": "create",
"serviceId": <svcId_из_шага_2>,
"instanceUid": null
}
```
3. **Результат:** Заголовок `Location` или тело ответа содержат `instanceOperationUid` (UUID).
### Три шага — полный список параметров без создания инстанса:
### Шаг Б: Получение метаданных параметров
1. **Запрос:** `GET /v1/index.cfm/instanceOperations/{instanceOperationUid}?fields=cfsParams`
2. **Анализ `cfsParams`:**
- `svcOperationCfsParamId`: Числовой ID параметра (например, `8`). **Критично для работы провайдера.**
- `label`: Имя поля в UI (например, "UUID VDC").
- `dataType`: Тип (`string`, `boolean`, `list`, `uuid`).
- `isRequired`: Обязательность.
- `descr`: Подсказка по заполнению.
**Шаг 1: найти svcId по имени сервиса**
```bash
curl -s -H "Authorization: Bearer $TOKEN" $URL/services | jq '.results[] | select(.svc == "ApacheKafka") | .svcId'
# → 116
```
**Шаг 2: найти svcOperationId нужной операции**
```bash
curl -s -H "Authorization: Bearer $TOKEN" $URL/services/116 | jq '.svc.operations[] | select(.operation == "create") | .svcOperationId'
# → 148
```
**Шаг 3: получить параметры с подполями и допустимыми значениями**
```bash
curl -s -H "Authorization: Bearer $TOKEN" $URL/instanceOperations/default/148 | jq '.svcOperation.cfsParams[]'
```
### Почему `/instanceOperations/default/{id}` а не `/serviceOperation/{id}`:
| Данные | `/serviceOperation/{id}` | `/instanceOperations/default/{id}` |
|--------|--------------------------|-------------------------------------|
| ID, code, тип, isRequired | ✅ | ✅ |
| `valueList` (допустимые значения) | ❌ | ✅ `['false','true']`, `['HOT','COLD']` |
| `dataDescriptor` (подполя map-fixed) | ❌ | ✅ cpu, memory, replicas, disk... |
| `isModifiable` | ❌ | ✅ на уровне подполей |
| `regex`, `maxLength`, `minValue`... | ❌ | ✅ |
| `isSensitive` | ❌ | ✅ |
### Структура dataDescriptor (подполя map-fixed):
```json
{
"svcOperationCfsParamId": 788,
"svcOperationCfsParam": "clusterConfiguration",
"dataType": "map-fixed",
"dataDescriptor": {
"cpu": {
"svcOperationCfsSubparamId": 109,
"dataType": "integer > 0",
"isRequired": true,
"valueList": ""
},
"replicas": {
"svcOperationCfsSubparamId": 135,
"dataType": "integer > 0",
"isRequired": true,
"valueList": "1,3,5,7"
}
}
}
```
### Формат valueList:
- Для **верхнеуровневых** параметров: JSON-массив `["false", "true"]`
- Для **подполей** dataDescriptor: comma-separated строка `"1,3,5,7"`
- Для `boolean`: всегда `"false,true"` или `["false","true"]`
### URL для разных стендов:
| Стенд | Базовый URL |
|-------|-------------|
| test (новый Gateway) | `https://lk-api-gateway-test.ngcloud.ru/api/v1/svc` |
| test (старый proxy) | `https://deck-api-test.ngcloud.ru/api/v1/index.cfm?endpoint=` |
| dev | `https://deck-api-dev.ngcloud.ru/api/v1/index.cfm?endpoint=` |
| prod | `https://deck-api.ngcloud.ru/api/v1/index.cfm?endpoint=` |
### Старый метод (через черновик) — НЕ ИСПОЛЬЗОВАТЬ:
Ранее использовался паттерн "Черновик операции" (POST /instanceOperations → GET с ?fields=cfsParams).
Он НЕ даёт dataDescriptor и valueList. Вместо него использовать `/instanceOperations/default/{id}`.
---
+1 -1
View File
@@ -1,7 +1,7 @@
# Taffy API Technical Manual for AI Agents
## 1. Authentication & Security
**Base URL**: `https://deck-api.ngcloud.ru/api/v1/index.cfm`
**Base URL**: `https://lk-api-gateway.ngcloud.ru/api/v1/svc` <!-- ⛔ LEGACY: was deck-api.ngcloud.ru/api/v1/index.cfm -->
All requests MUST include these headers (as indicated by CORS `access-control-allow-headers`):
- `Authorization`: `Bearer <TOKEN>`
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Universal Rebuild — Архитектура и рабочая цепочка (актуально)
Документ для нового чата: описывает, как устроено «универсальное ядро», как формируются YAML‑спеки сервисов и как генерируются Go‑ресурсы. Учитывает ошибки/уроки из текущего чата.
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Резюме для нового чата (подробно)
## Контекст
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Полный анализ кодовой базы и план развития
**Дата:** 2026-03-13
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Матрица состояний ресурсов в облаке ngcloud
## Основные параметры состояния
+28
View File
@@ -8,6 +8,34 @@
- Чеклист разработки/клона: [docs/00_overview/dev-clone-checklist.md](00_overview/dev-clone-checklist.md)
- НЛИ/чат-материалы: [docs/00_overview/for_nomo_chat.md](00_overview/for_nomo_chat.md)
## ⛔ API: как работать с токеном (читать перед любым curl!)
**Токены НЕ ПРОТУХАЮТ до декабря 2026.** Они в `secrets/{dev,test,prod}.token`.
Проверить дату: `python3 -c "import json,base64; t=open('secrets/test.token').read().split('.'); d=json.loads(base64.urlsafe_b64decode(t[1]+'==')); from datetime import datetime,timezone; print(datetime.fromtimestamp(d['exp'],tz=timezone.utc))"`
**Старый API (index.cfm) — DDoS-Guard требует 3 заголовка, иначе 403:**
```bash
curl -s --max-time 10 \
-H "Authorization: Bearer $(cat secrets/test.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 должен совпадать со стендом!** Без Referer — 403. Без User-Agent — 403.
**Новый Gateway (lk-api-gateway) — только Authorization:**
```bash
curl -s --max-time 10 \
-H "Authorization: Bearer $(cat secrets/test.token)" \
"https://lk-api-gateway-test.ngcloud.ru/api/v1/svc/services/90"
```
| Стенд | Старый API | Новый Gateway | Referer |
|-------|-----------|---------------|---------|
| test | `deck-api-test.ngcloud.ru/api/v1/index.cfm` | `lk-api-gateway-test.ngcloud.ru/api/v1/svc` | `https://deck-test.ngcloud.ru/` |
| dev | `deck-api-dev.ngcloud.ru/api/v1/index.cfm` | `lk-api-gateway-dev.ngcloud.ru/api/v1/svc` | `https://deck-dev.ngcloud.ru/` |
| prod | `deck-api.ngcloud.ru/api/v1/index.cfm` | `lk-api-gateway.ngcloud.ru/api/v1/svc` | `https://deck.ngcloud.ru/` |
## API и схемы
- Алгоритмы API-дискавери: [docs/70_api/api-discovery-algorithms.md](70_api/api-discovery-algorithms.md)
- Полный API-дамп: [docs/70_api/api_analysis/API_DOCUMENTATION_SUMMARY.md](70_api/api_analysis/API_DOCUMENTATION_SUMMARY.md)
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Instance State Transitions - Матрица состояний инстансов ngcloud
Полное руководство по определению состояния инстансов через API ngcloud на основе комбинаций флагов и истории операций.
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# AI-Agent Glossary (Search-Oriented Index)
Purpose: compact, English, link-rich glossary to help AI agents find facts fast in this repo.
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Архитектура и методы (CRUD)
## 1. Актуальная архитектура (универсальный rebuild)
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# СУПЕРглоссарий (словарь с ссылками)
Каждый термин содержит ссылки на места употребления в документации.
+21
View File
@@ -1,3 +1,5 @@
<!-- ⛔⛔⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ! Все примеры ниже — ИСТОРИЧЕСКИЕ. -->
<!-- Актуальный API: https://lk-api-gateway.ngcloud.ru/api/v1/svc -->
# How It Was Done — Developer Guide (закрытая страница)
**Filename & Versioning:** howitwasdone.md / 20260204 / Draft v1
@@ -76,6 +78,25 @@
## 2. База знаний ошибок
### A. Аутентификация и токены
**Токены лежат в `secrets/{dev,test,prod}.token`. Срок действия — до декабря 2026.**
Проверить дату JWT:
```bash
python3 -c "import json,base64; t=open('secrets/test.token').read().split('.'); d=json.loads(base64.urlsafe_b64decode(t[1]+'==')); from datetime import datetime,timezone; print(datetime.fromtimestamp(d['exp'],tz=timezone.utc))"
```
**Симптом:** 403 Forbidden (НЕ 401!)
**Причина (старый API index.cfm):** DDoS-Guard блокирует — нет Referer или нет User-Agent.
**Решение для curl (старый API):**
```bash
curl -s --max-time 10 \
-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 должен совпадать со стендом (test/dev/prod). Новый Gateway (lk-api-gateway) требует только Authorization.
**Симптом:** 401 Unauthorized / Authorization header expected
**Причина:** токен истёк или не передан в окружение
**Решение:** обновить access_token и сохранить в файле HH‑MM‑SS.token; убедиться, что Terraform читает токен
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# API Token Saga — 30.06.2026
**Дата:** 30 июня 2026
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# ⛔⛔⛔ ПРАВИЛА РАЗДЕЛЕНИЯ СТЕНДОВ ⛔⛔⛔
> **НАРУШЕНИЕ = УВОЛЬНЕНИЕ. Без шуток.**
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Testing Safety Rules
## ⛔ ЗАПРЕЩЕНО — прогонять тесты в PROD
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# Troubleshooting
## API Nubes — ошибки доступа (403, 401, IAM error)
+1
View File
@@ -1,3 +1,4 @@
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
# План: валидация параметров с выбором из списка
Дата составления: 2026-03-25