svc-api: переход на Gateway (lk-api-gateway), User-Agent+Referer для DDoS-Guard, метод Виталия /instanceOperations/default/{id} с dataDescriptor, LEGACY-пометки везде
This commit is contained in:
@@ -20,6 +20,7 @@ variable "api_token" {
|
|||||||
|
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = var.api_token
|
api_token = var.api_token
|
||||||
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
|
# ⛔ LEGACY: deck-api ЗАКРЫВАЕТСЯ. Gateway:
|
||||||
|
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ variable "api_token" {
|
|||||||
|
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = var.api_token
|
api_token = var.api_token
|
||||||
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
|
# ⛔ LEGACY: deck-api ЗАКРЫВАЕТСЯ. Gateway:
|
||||||
|
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ terraform {
|
|||||||
// Провайдер Nubes для создания ресурсов.
|
// Провайдер Nubes для создания ресурсов.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = var.api_token
|
api_token = var.api_token
|
||||||
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
|
# ⛔ LEGACY: deck-api ЗАКРЫВАЕТСЯ. Gateway:
|
||||||
|
api_endpoint = "https://lk-api-gateway.ngcloud.ru/api/v1/svc"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Токен доступа к Nubes API.
|
// Токен доступа к Nubes API.
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
// 2026-03-19
|
|
||||||
// main.tf — провайдер и переменные для managed RabbitMQ в облаке Nubes.
|
|
||||||
// Тест-стенд: deck-api-test.ngcloud.ru
|
|
||||||
terraform {
|
|
||||||
required_providers {
|
|
||||||
nubes = {
|
|
||||||
source = "terra.k8c.ru/nubes/nubes"
|
|
||||||
version = "5.0.19"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Токен доступа к Nubes API.
|
|
||||||
variable "api_token" {
|
|
||||||
type = string
|
|
||||||
sensitive = true
|
|
||||||
description = "Nubes API token"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Реалм, в котором создаётся RabbitMQ (например, k8s-5.ext.nubes.ru).
|
|
||||||
variable "realm" {
|
|
||||||
type = string
|
|
||||||
sensitive = true
|
|
||||||
description = "resource_realm для nubes_rabbitmq"
|
|
||||||
}
|
|
||||||
|
|
||||||
provider "nubes" {
|
|
||||||
api_token = var.api_token
|
|
||||||
api_endpoint = "https://deck-api-test.ngcloud.ru/api/v1/index.cfm"
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
// 2026-03-19
|
|
||||||
// resources.tf — managed RabbitMQ в облаке Nubes для sless и других сервисов.
|
|
||||||
|
|
||||||
resource "nubes_rabbitmq" "rmq" {
|
|
||||||
// Общий брокер для sless event-triggers и других сервисов облака.
|
|
||||||
resource_name = "sless-rabbit"
|
|
||||||
resource_realm = var.realm
|
|
||||||
resource_instances = 1
|
|
||||||
resource_memory = 512
|
|
||||||
resource_c_p_u = 500
|
|
||||||
resource_disk = 5
|
|
||||||
need_external_address_master = false
|
|
||||||
need_external_address_slave = false
|
|
||||||
}
|
|
||||||
|
|
||||||
locals {
|
|
||||||
// try() — обходим опечатку в API: поле называется как internalConnect, так и inernalConnect.
|
|
||||||
rmq_host = try(nubes_rabbitmq.rmq.state_out_flat["internalConnect.master"], nubes_rabbitmq.rmq.state_out_flat["inernalConnect.master"])
|
|
||||||
rmq_user = nubes_rabbitmq.rmq.vault_secrets["adminUser"]
|
|
||||||
rmq_password = nubes_rabbitmq.rmq.vault_secrets["adminPass"]
|
|
||||||
}
|
|
||||||
|
|
||||||
output "rabbitmq_host" {
|
|
||||||
value = local.rmq_host
|
|
||||||
}
|
|
||||||
|
|
||||||
output "rabbitmq_user" {
|
|
||||||
value = local.rmq_user
|
|
||||||
sensitive = true
|
|
||||||
}
|
|
||||||
|
|
||||||
output "rabbitmq_password" {
|
|
||||||
value = local.rmq_password
|
|
||||||
sensitive = true
|
|
||||||
}
|
|
||||||
|
|
||||||
output "rabbitmq_amqp_url" {
|
|
||||||
// Готовый URL для передачи в оператор sless (env RABBITMQ_URL).
|
|
||||||
value = "amqp://${local.rmq_user}:${local.rmq_password}@${local.rmq_host}:5672/"
|
|
||||||
sensitive = true
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Stand profile: DEV
|
# Stand profile: DEV
|
||||||
NUBES_API_ENDPOINT="https://deck-api-dev.ngcloud.ru/api/v1"
|
NUBES_API_ENDPOINT="https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc"
|
||||||
TOKEN_FILE="secrets/dev.token"
|
TOKEN_FILE="secrets/dev.token"
|
||||||
|
|
||||||
# Release versions
|
# Release versions
|
||||||
|
|||||||
@@ -1,49 +1,52 @@
|
|||||||
# service_id service_name # RU description
|
# service_id service_name # RU description
|
||||||
# DEV stand — generated from dev API 2026-03-26
|
|
||||||
# do not delete lines; to exclude a service, comment it with #
|
# do not delete lines; to exclude a service, comment it with #
|
||||||
1 dummy # Болванка
|
175 k8sGo # Go
|
||||||
2 template # Темплейт k8s
|
163 llmAi # LLM
|
||||||
12 s3 # S3 Object Storage
|
|
||||||
13 s3bucket # S3 бакет
|
|
||||||
19 vcOrg # Организация в Cloud Director
|
|
||||||
# 20 vcOrgSaas # DEPRECATED — Организация без Keycloak (isProductionReady=false)
|
|
||||||
21 vc_vdc # Виртуальный датацентр (vDC)
|
|
||||||
22 vc_nsxt # Сетевой шлюз периметра (Edge)
|
|
||||||
# 23 vc_vm # DEPRECATED — VM в Cloud Director старый формат (isProductionReady=false)
|
|
||||||
# 24 vcNat # DEPRECATED — Правила маршрутизации VM (isProductionReady=false)
|
|
||||||
25 vcexternalip # Публичные IP адреса
|
|
||||||
26 vapp # Виртуальный каталог ВМ (vApp)
|
|
||||||
# 27 vc_vm_v2 # VM в Cloud Director v2 (isProductionReady=false)
|
|
||||||
28 vc_vm_v3 # Виртуальная машина
|
|
||||||
29 vcVdcGroup # Группа датацентров
|
|
||||||
# 32 vmpostgre # vc_vm_postgresql_std (isProductionReady=false)
|
|
||||||
50 nextcloud # Nextcloud
|
|
||||||
81 superset # Apache Superset
|
|
||||||
82 harbor # Container Registry
|
|
||||||
88 k8sZitiController # k8sZitiController
|
|
||||||
89 flask # Web-сервер с фреймворком Flask
|
|
||||||
90 postgres # PostgreSQL
|
|
||||||
91 redis # Redis
|
|
||||||
92 mongodb # MongoDB
|
|
||||||
93 rabbitmq # RabbitMQ
|
|
||||||
94 lucee # Lucee
|
|
||||||
95 nodejs # NodeJS
|
|
||||||
96 pgadmin # pgAdmin
|
|
||||||
97 nodered # NodeRed
|
|
||||||
98 http # Простой HTTP контейнер
|
|
||||||
99 gitea # Gitea
|
|
||||||
# 100 openwhisk # Serverless Openwhisk (isProductionReady=false)
|
|
||||||
109 zonesV2 # Управление днс-зонами и записями
|
|
||||||
110 dnszone # DNS зона
|
|
||||||
111 dnsrecord # DNS запись
|
|
||||||
# 112 tenant # Тенант в Grafana (isProductionReady=false)
|
|
||||||
# 113 vcComplex # Быстрый старт (isProductionReady=false)
|
|
||||||
115 mariadb # Mariadb
|
|
||||||
116 kafka # ApacheKafka
|
|
||||||
119 Akhq # Akhq
|
|
||||||
120 clickhouse # ClickHouse
|
|
||||||
149 valoTenant # VALO Cloud
|
|
||||||
150 k8sSthutrvalCluster # Kubernetes кластер Штурвал
|
|
||||||
151 k8sOpenbao # Vault
|
|
||||||
# 152 template # Темплейт k8s-2-clone (isProductionReady=false)
|
|
||||||
153 nifi # Nifi
|
153 nifi # Nifi
|
||||||
|
151 k8sOpenbao # Vault
|
||||||
|
150 k8sSthutrvalCluster # Kubernetes кластер Штурвал
|
||||||
|
149 valoTenant # VALO Cloud
|
||||||
|
148 vcMgmtSthutrvalCluster # Менеджмент Kubernetes кластер Штурвал
|
||||||
|
120 clickhouse # ClickHouse
|
||||||
|
119 Akhq # Akhq
|
||||||
|
116 kafka # ApacheKafka
|
||||||
|
115 mariadb # Mariadb
|
||||||
|
113 vcComplex # Быстрый старт
|
||||||
|
112 tenant # Тенант в Grafana
|
||||||
|
111 dnsrecord # DNS запись
|
||||||
|
110 dnszone # DNS зона
|
||||||
|
109 zonesV2 # Управление DNS
|
||||||
|
100 openwhisk # Serverless Openwhisk (openwhisk_tenant)
|
||||||
|
99 gitea # Gitea
|
||||||
|
98 http # Простой HTTP контейнер
|
||||||
|
97 nodered # NodeRed
|
||||||
|
96 pgadmin # pgAdmin
|
||||||
|
95 nodejs # NodeJS
|
||||||
|
94 lucee # Lucee
|
||||||
|
93 rabbitmq # RabbitMQ
|
||||||
|
92 mongodb # MongoDB
|
||||||
|
91 redis # Redis
|
||||||
|
90 postgres # PostgreSQL
|
||||||
|
89 flask # Web-сервер с фреймворком Flask
|
||||||
|
88 k8sZitiController # k8sZitiController
|
||||||
|
87 k8svalkey # Valkey
|
||||||
|
86 k8sVelero # Velero
|
||||||
|
82 harbor # Container Registry
|
||||||
|
81 superset # Apache Superset
|
||||||
|
50 nextcloud # Nextcloud
|
||||||
|
32 vmpostgre # vc_vm_postgresql_std
|
||||||
|
29 vcVdcGroup # Группа датацентров
|
||||||
|
28 vc_vm_v3 # Виртуальная машина
|
||||||
|
27 vc_vm_v2 # VM в Cloud Director (vc_vmV2)
|
||||||
|
26 vapp # Виртуальный каталог ВМ (vApp)
|
||||||
|
25 vcexternalip # Публичные IP адреса
|
||||||
|
24 vcNat # DEPRECATED Правила маршрутизации для VM (vc_nat)
|
||||||
|
23 vc_vm # VM в Cloud Director (старый формат) (vc_vm)
|
||||||
|
22 vc_nsxt # Сетевой шлюз периметра (Edge)
|
||||||
|
21 vc_vdc # Виртуальный датацентр (vDC)
|
||||||
|
20 vcOrgSaas # Организация [DEPRECATED]
|
||||||
|
19 vcOrg # Организация в Cloud Director
|
||||||
|
13 s3bucket # S3 бакет
|
||||||
|
12 s3 # S3 Object Storage
|
||||||
|
2 template # Темплейт k8s
|
||||||
|
1 dummy # Болванка
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Stand profile: PROD
|
# Stand profile: PROD
|
||||||
NUBES_API_ENDPOINT="https://deck-api.ngcloud.ru/api/v1"
|
NUBES_API_ENDPOINT="https://lk-api-gateway.ngcloud.ru/api/v1/svc"
|
||||||
TOKEN_FILE="secrets/prod.token"
|
TOKEN_FILE="secrets/prod.token"
|
||||||
|
|
||||||
# Release versions
|
# Release versions
|
||||||
|
|||||||
@@ -1,46 +1,49 @@
|
|||||||
# service_id service_name # RU description
|
# service_id service_name # RU description
|
||||||
# do not delete lines; to exclude a service, comment it with #
|
# do not delete lines; to exclude a service, comment it with #
|
||||||
1 dummy # Болванка для тестов
|
163 llmAi # LLM
|
||||||
2 template # Болванка для тестирования
|
150 k8sSthutrvalCluster # Kubernetes кластер Штурвал
|
||||||
12 s3 # Масштабируемое хранилище данных
|
149 valoTenant # VALO Cloud
|
||||||
13 s3bucket # Бакет в сервисе S3
|
148 vcMgmtSthutrvalCluster # Менеджмент Kubernetes кластер Штурвал
|
||||||
19 vcOrg # Организация в Cloud Director
|
120 clickhouse # ClickHouse
|
||||||
20 vcOrgSaas # Без интеграции Keycloak
|
119 Akhq # Akhq
|
||||||
21 vc_vdc # Выделение вычислительных ресурсов
|
117 nifi # Nifi
|
||||||
22 vc_nsxt # Обеспечение сетевой доступности в тенанте
|
116 kafka # ApacheKafka
|
||||||
23 vc_vm # Виртуальная машина без каких-либо особенностей. <br/>Данная услуга запускает vc_ip для выдачи белого адреса и подключения к ВМ
|
115 mariadb # Mariadb
|
||||||
# 24 DEPRECATED Правила маршрутизации для VM (vc_nat) # excluded from active generation
|
114 GiteaComplex # Комплексная услуга по созданию gitea
|
||||||
25 vcexternalip # Резервирование IP адреса
|
113 vcComplex # Быстрый старт
|
||||||
26 vapp # Группировка виртуальных машин
|
112 tenant # Тенант в Grafana
|
||||||
27 vc_vm_v2 # Виртуальная машина с возможностью настройки Cloud Init<br/>Можно развернуть в услуге несколько ВМ<br/>В зависимости от настроек можно выдавать на ВМ vip + dns
|
111 dnsrecord # DNS запись
|
||||||
28 vc_vm_v3 # Создание виртуальной машины
|
110 dnszone # DNS зона
|
||||||
29 vcVdcGroup # Обеспечение сетевой доступности между датацентрами
|
109 zonesV2 # Управление DNS
|
||||||
32 vmpostgre # Сервис настройки PostgreSQL для виртуальной машины.<br/>Требует наличия ВМ
|
100 openwhisk # Serverless Openwhisk (openwhisk_tenant)
|
||||||
50 nextcloud # Платформа совместной работы
|
99 gitea # Gitea
|
||||||
81 superset # Сервер отчетов
|
|
||||||
82 harbor # Реестр для хранения образов контейнеров
|
|
||||||
88 k8sZitiController # Контроллер управления Client to service & service to service Zero trust network<br/>
|
|
||||||
89 flask # Flask
|
|
||||||
90 postgres # Управляемая база данных PostgreSQL
|
|
||||||
91 redis # Управляемая база данных Redis
|
|
||||||
92 mongodb # Управляемая база данных MongoDB
|
|
||||||
93 rabbitmq # Сервер очередей
|
|
||||||
94 lucee # Cервер приложений
|
|
||||||
95 nodejs # Cервер приложений
|
|
||||||
96 pgadmin # Административный интерфейс для PostgreSQL
|
|
||||||
97 nodered # Low-code платформа для IoT
|
|
||||||
98 http # Простой HTTP контейнер
|
98 http # Простой HTTP контейнер
|
||||||
99 gitea # Сервис контроля версий
|
97 nodered # NodeRed
|
||||||
100 openwhisk # Добавление и удаления пользователя (учетной записи, тенанта) для работы с Openwhisk
|
96 pgadmin # pgAdmin
|
||||||
110 dnszone # Хостинг DNS зоны
|
95 nodejs # NodeJS
|
||||||
111 dnsrecord # DNS запись в созданной зоне
|
94 lucee # Lucee
|
||||||
112 tenant # Организация доступов к мониторингу
|
93 rabbitmq # RabbitMQ
|
||||||
113 vcComplex # Создание готовой иерархии ресурсов
|
92 mongodb # MongoDB
|
||||||
114 GiteaComplex # Комплексная услуга из ["gittea", "postgres"]
|
91 redis # Redis
|
||||||
115 mariadb # Управляемая база данных MySQL
|
90 postgres # PostgreSQL
|
||||||
116 kafka # Сервис создания кластера Apache Kafka
|
89 flask # Web-сервер с фреймворком Flask
|
||||||
117 nifi # ETL-система
|
88 k8sZitiController # k8sZitiController
|
||||||
119 Akhq # Web интерфейс Akhq для работы с Apache Kafka
|
86 k8sVelero # Velero
|
||||||
120 clickhouse # Управляемая база данных ClickHouse
|
82 harbor # Container Registry
|
||||||
149 valoTenant # Корпоративная система обмена и синхронизации файлов
|
81 superset # Apache Superset
|
||||||
150 k8sSthutrvalCluster # Платформа управления K8s<br/>
|
50 nextcloud # Nextcloud
|
||||||
|
29 vcVdcGroup # Группа датацентров
|
||||||
|
28 vc_vm_v3 # Виртуальная машина
|
||||||
|
27 vc_vm_v2 # VM в Cloud Director (vc_vmV2)
|
||||||
|
26 vapp # Виртуальный каталог ВМ (vApp)
|
||||||
|
25 vcexternalip # Публичные IP адреса
|
||||||
|
24 svc24 # DEPRECATED Правила маршрутизации для VM (vc_nat)
|
||||||
|
23 vc_vm # VM в Cloud Director (старый формат) (vc_vm)
|
||||||
|
22 vc_nsxt # Сетевой шлюз периметра (Edge)
|
||||||
|
21 vc_vdc # Виртуальный датацентр (vDC)
|
||||||
|
20 vcOrgSaas # Организация [DEPRECATED]
|
||||||
|
19 vcOrg # Организация в Cloud Director
|
||||||
|
13 s3bucket # S3 бакет
|
||||||
|
12 s3 # S3 Object Storage
|
||||||
|
2 template # Темплейт k8s
|
||||||
|
1 dummy # Болванка
|
||||||
|
|||||||
@@ -1,46 +1,51 @@
|
|||||||
# service_id service_name # RU description
|
# service_id service_name # RU description
|
||||||
# do not delete lines; to exclude a service, comment it with #
|
# do not delete lines; to exclude a service, comment it with #
|
||||||
1 dummy # Болванка для тестов
|
163 llmAi # LLM
|
||||||
2 template # Болванка для тестирования
|
151 k8sOpenbao # Vault
|
||||||
12 s3 # Масштабируемое хранилище данных
|
150 k8sSthutrvalCluster # Kubernetes кластер Штурвал
|
||||||
13 s3bucket # Бакет в сервисе S3
|
149 valoTenant # VALO Cloud
|
||||||
19 vcOrg # Организация в Cloud Director
|
148 vcMgmtSthutrvalCluster # Менеджмент Kubernetes кластер Штурвал
|
||||||
20 vcOrgSaas # Без интеграции Keycloak
|
120 clickhouse # ClickHouse
|
||||||
21 vc_vdc # Выделение вычислительных ресурсов
|
119 Akhq # Akhq
|
||||||
22 vc_nsxt # Обеспечение сетевой доступности в тенанте
|
117 nifi # Nifi
|
||||||
23 vc_vm # Виртуальная машина без каких-либо особенностей. <br/>Данная услуга запускает vc_ip для выдачи белого адреса и подключения к ВМ
|
116 kafka # ApacheKafka
|
||||||
# 24 DEPRECATED Правила маршрутизации для VM (vc_nat) # excluded from active generation
|
115 mariadb # Mariadb
|
||||||
25 vcexternalip # Резервирование IP адреса
|
114 GiteaComplex # Комплексная услуга по созданию gitea
|
||||||
26 vapp # Группировка виртуальных машин
|
113 vcComplex # Быстрый старт
|
||||||
27 vc_vm_v2 # Виртуальная машина с возможностью настройки Cloud Init<br/>Можно развернуть в услуге несколько ВМ<br/>В зависимости от настроек можно выдавать на ВМ vip + dns
|
112 tenant # Тенант в Grafana
|
||||||
28 vc_vm_v3 # Создание виртуальной машины
|
111 dnsrecord # DNS запись
|
||||||
29 vcVdcGroup # Обеспечение сетевой доступности между датацентрами
|
110 dnszone # DNS зона
|
||||||
32 vmpostgre # Сервис настройки PostgreSQL для виртуальной машины.<br/>Требует наличия ВМ
|
109 zonesV2 # Управление DNS
|
||||||
50 nextcloud # Платформа совместной работы
|
100 openwhisk # Serverless Openwhisk (openwhisk_tenant)
|
||||||
81 superset # Сервер отчетов
|
99 gitea # Gitea
|
||||||
82 harbor # Реестр для хранения образов контейнеров
|
|
||||||
88 k8sZitiController # Контроллер управления Client to service & service to service Zero trust network<br/>
|
|
||||||
89 flask # Flask
|
|
||||||
90 postgres # Управляемая база данных PostgreSQL
|
|
||||||
91 redis # Управляемая база данных Redis
|
|
||||||
92 mongodb # Управляемая база данных MongoDB
|
|
||||||
93 rabbitmq # Сервер очередей
|
|
||||||
94 lucee # Cервер приложений
|
|
||||||
95 nodejs # Cервер приложений
|
|
||||||
96 pgadmin # Административный интерфейс для PostgreSQL
|
|
||||||
97 nodered # Low-code платформа для IoT
|
|
||||||
98 http # Простой HTTP контейнер
|
98 http # Простой HTTP контейнер
|
||||||
99 gitea # Сервис контроля версий
|
97 nodered # NodeRed
|
||||||
100 openwhisk # Добавление и удаления пользователя (учетной записи, тенанта) для работы с Openwhisk
|
96 pgadmin # pgAdmin
|
||||||
110 dnszone # Хостинг DNS зоны
|
95 nodejs # NodeJS
|
||||||
111 dnsrecord # DNS запись в созданной зоне
|
94 lucee # Lucee
|
||||||
112 tenant # Организация доступов к мониторингу
|
93 rabbitmq # RabbitMQ
|
||||||
113 vcComplex # Создание готовой иерархии ресурсов
|
92 mongodb # MongoDB
|
||||||
114 GiteaComplex # Комплексная услуга из ["gittea", "postgres"]
|
91 redis # Redis
|
||||||
115 mariadb # Управляемая база данных MySQL
|
90 postgres # PostgreSQL
|
||||||
116 kafka # Сервис создания кластера Apache Kafka
|
89 flask # Web-сервер с фреймворком Flask
|
||||||
117 nifi # ETL-система
|
88 k8sZitiController # k8sZitiController
|
||||||
119 Akhq # Web интерфейс Akhq для работы с Apache Kafka
|
86 k8sVelero # Velero
|
||||||
120 clickhouse # Управляемая база данных ClickHouse
|
82 harbor # Container Registry
|
||||||
149 valoTenant # Корпоративная система обмена и синхронизации файлов
|
81 superset # Apache Superset
|
||||||
150 k8sSthutrvalCluster # Платформа управления K8s<br/>
|
50 nextcloud # Nextcloud
|
||||||
|
32 vmpostgre # vc_vm_postgresql_std
|
||||||
|
29 vcVdcGroup # Группа датацентров
|
||||||
|
28 vc_vm_v3 # Виртуальная машина
|
||||||
|
27 vc_vm_v2 # VM в Cloud Director (vc_vmV2)
|
||||||
|
26 vapp # Виртуальный каталог ВМ (vApp)
|
||||||
|
25 vcexternalip # Публичные IP адреса
|
||||||
|
24 svc24 # DEPRECATED Правила маршрутизации для VM (vc_nat)
|
||||||
|
23 vc_vm # VM в Cloud Director (старый формат) (vc_vm)
|
||||||
|
22 vc_nsxt # Сетевой шлюз периметра (Edge)
|
||||||
|
21 vc_vdc # Виртуальный датацентр (vDC)
|
||||||
|
20 vcOrgSaas # Организация [DEPRECATED]
|
||||||
|
19 vcOrg # Организация в Cloud Director
|
||||||
|
13 s3bucket # S3 бакет
|
||||||
|
12 s3 # S3 Object Storage
|
||||||
|
2 template # Темплейт k8s
|
||||||
|
1 dummy # Болванка
|
||||||
|
|||||||
@@ -24,7 +24,9 @@ func main() {
|
|||||||
servicesListFlag := flag.String("services", "", "Path to TOOLS/config/{stand}/services_list.txt")
|
servicesListFlag := flag.String("services", "", "Path to TOOLS/config/{stand}/services_list.txt")
|
||||||
excludeFlag := flag.String("exclude", "", "Comma-separated resource names to skip")
|
excludeFlag := flag.String("exclude", "", "Comma-separated resource names to skip")
|
||||||
versionFlag := flag.String("version", "", "Provider version for example block")
|
versionFlag := flag.String("version", "", "Provider version for example block")
|
||||||
apiEndpointFlag := flag.String("api-endpoint", "https://deck-api.ngcloud.ru/api/v1/index.cfm", "API endpoint for example block")
|
// ⛔ LEGACY DEFAULT (index.cfm) — переопределяется через NUBES_API_ENDPOINT в profile.env.
|
||||||
|
// Никогда не использовать deck-api.ngcloud.ru напрямую.
|
||||||
|
apiEndpointFlag := flag.String("api-endpoint", "https://lk-api-gateway.ngcloud.ru/api/v1/svc", "API endpoint for example block")
|
||||||
opsFlag := flag.Bool("ops", false, "Generate per-service operations docs (resources_ops_yaml → docs/.../operations)")
|
opsFlag := flag.Bool("ops", false, "Generate per-service operations docs (resources_ops_yaml → docs/.../operations)")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
|||||||
@@ -74,4 +74,7 @@ type ParamSpec struct {
|
|||||||
// === Генератор-специфичные поля (не сериализуются в YAML) ===
|
// === Генератор-специфичные поля (не сериализуются в YAML) ===
|
||||||
IsModifiable *bool `yaml:"is_modifiable,omitempty"`
|
IsModifiable *bool `yaml:"is_modifiable,omitempty"`
|
||||||
IsSensitive bool `yaml:"is_sensitive,omitempty"`
|
IsSensitive bool `yaml:"is_sensitive,omitempty"`
|
||||||
|
// SubParams — подполя для map-fixed/array-map-fixed параметров.
|
||||||
|
// Заполняется из dataDescriptor при генерации YAML.
|
||||||
|
SubParams []ParamSpec `yaml:"sub_params,omitempty"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,7 +105,8 @@ if [[ ! -f "$SERVICES_FILE" ]]; then
|
|||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
API_ENDPOINT="${NUBES_API_ENDPOINT:-https://deck-api.ngcloud.ru/api/v1/index.cfm}"
|
# ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Default = Gateway. Override via NUBES_API_ENDPOINT.
|
||||||
|
API_ENDPOINT="${NUBES_API_ENDPOINT:-https://lk-api-gateway.ngcloud.ru/api/v1/svc}"
|
||||||
# Auto-detect API style: if endpoint contains "index.cfm" → legacy proxy (?endpoint=),
|
# Auto-detect API style: if endpoint contains "index.cfm" → legacy proxy (?endpoint=),
|
||||||
# otherwise → new REST gateway (direct paths). No forced /index.cfm normalization.
|
# otherwise → new REST gateway (direct paths). No forced /index.cfm normalization.
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,8 @@ mkdir -p "$DOCS_DIR"
|
|||||||
|
|
||||||
# Determine API endpoint for doc examples.
|
# Determine API endpoint for doc examples.
|
||||||
# Use NUBES_API_ENDPOINT from profile.env, fall back to production default.
|
# Use NUBES_API_ENDPOINT from profile.env, fall back to production default.
|
||||||
DOCS_API_ENDPOINT="${NUBES_API_ENDPOINT:-https://deck-api.ngcloud.ru/api/v1/index.cfm}"
|
# ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Default = Gateway. Override via NUBES_API_ENDPOINT.
|
||||||
|
DOCS_API_ENDPOINT="${NUBES_API_ENDPOINT:-https://lk-api-gateway.ngcloud.ru/api/v1/svc}"
|
||||||
# If endpoint looks like new REST gateway (no index.cfm), keep as-is.
|
# If endpoint looks like new REST gateway (no index.cfm), keep as-is.
|
||||||
# If it's old-style without index.cfm, append it for backward compat in docs.
|
# If it's old-style without index.cfm, append it for backward compat in docs.
|
||||||
if [[ "$DOCS_API_ENDPOINT" != *"/index.cfm"* ]] && [[ "$DOCS_API_ENDPOINT" != *"/svc"* ]]; then
|
if [[ "$DOCS_API_ENDPOINT" != *"/index.cfm"* ]] && [[ "$DOCS_API_ENDPOINT" != *"/svc"* ]]; then
|
||||||
|
|||||||
@@ -9,8 +9,9 @@ PROFILE_DIR="${PROFILE_DIR:-}"
|
|||||||
normalize_api_endpoint() {
|
normalize_api_endpoint() {
|
||||||
local endpoint="$1"
|
local endpoint="$1"
|
||||||
endpoint="${endpoint%/}"
|
endpoint="${endpoint%/}"
|
||||||
|
# ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ.
|
||||||
if [[ -z "$endpoint" ]]; then
|
if [[ -z "$endpoint" ]]; then
|
||||||
echo "https://deck-api.ngcloud.ru/api/v1/index.cfm"
|
echo "https://lk-api-gateway.ngcloud.ru/api/v1/svc"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
# Keep as-is: both legacy proxy (index.cfm) and new REST gateway are valid.
|
# Keep as-is: both legacy proxy (index.cfm) and new REST gateway are valid.
|
||||||
@@ -84,7 +85,8 @@ if [[ -n "$PROFILE_DIR" ]]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DOCS_API_ENDPOINT="${NUBES_API_ENDPOINT:-https://deck-api.ngcloud.ru/api/v1/index.cfm}"
|
# ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Default = Gateway.
|
||||||
|
DOCS_API_ENDPOINT="${NUBES_API_ENDPOINT:-https://lk-api-gateway.ngcloud.ru/api/v1/svc}"
|
||||||
DOCS_API_ENDPOINT="$(normalize_api_endpoint "$DOCS_API_ENDPOINT")"
|
DOCS_API_ENDPOINT="$(normalize_api_endpoint "$DOCS_API_ENDPOINT")"
|
||||||
|
|
||||||
if [[ -n "${MKDOCS_DOCS_DIR:-}" ]]; then
|
if [[ -n "${MKDOCS_DOCS_DIR:-}" ]]; then
|
||||||
|
|||||||
@@ -51,9 +51,12 @@ func (c *Client) GetService(serviceID int) (types.ServiceInfo, error) {
|
|||||||
return res.Service, nil
|
return res.Service, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetServiceOperation получает детали операции (параметры + MAN).
|
// GetServiceOperation получает детали операции (параметры + dataDescriptor + valueList).
|
||||||
|
// Использует /instanceOperations/default/{id} — метод Виталия (15.07.2026).
|
||||||
|
// Этот эндпоинт возвращает dataDescriptor (подполя map-fixed) и valueList,
|
||||||
|
// в отличие от /serviceOperation/{id} который даёт только плоский список.
|
||||||
func (c *Client) GetServiceOperation(svcOperationID int) (types.ServiceOperationInfo, error) {
|
func (c *Client) GetServiceOperation(svcOperationID int) (types.ServiceOperationInfo, error) {
|
||||||
endpoint := fmt.Sprintf("/serviceOperation/%d", svcOperationID)
|
endpoint := fmt.Sprintf("/instanceOperations/default/%d", svcOperationID)
|
||||||
var res types.ServiceOperationResponse
|
var res types.ServiceOperationResponse
|
||||||
if err := c.callAPI(endpoint, &res); err != nil {
|
if err := c.callAPI(endpoint, &res); err != nil {
|
||||||
return types.ServiceOperationInfo{}, err
|
return types.ServiceOperationInfo{}, err
|
||||||
@@ -84,7 +87,9 @@ func (c *Client) callAPI(endpoint string, out interface{}) error {
|
|||||||
if c.token != "" {
|
if c.token != "" {
|
||||||
req.Header.Set("Authorization", "Bearer "+c.token)
|
req.Header.Set("Authorization", "Bearer "+c.token)
|
||||||
}
|
}
|
||||||
req.Header.Set("User-Agent", "Mozilla/5.0 (compatible; Terraform-Provider-Nubes/Generator)")
|
// DDoS-Guard требует браузерный User-Agent ВСЕГДА (и старый, и новый API).
|
||||||
|
req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36")
|
||||||
|
req.Header.Set("Referer", c.refererFromEndpoint())
|
||||||
resp, err := c.httpClient.Do(req)
|
resp, err := c.httpClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lastErr = err
|
lastErr = err
|
||||||
@@ -123,6 +128,26 @@ func (c *Client) isProxyAPI() bool {
|
|||||||
return strings.Contains(c.endpoint, "index.cfm")
|
return strings.Contains(c.endpoint, "index.cfm")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// refererFromEndpoint извлекает Referer из URL API (DDoS-Guard).
|
||||||
|
// lk-api-gateway-test.ngcloud.ru → https://deck-test.ngcloud.ru/
|
||||||
|
// lk-api-gateway.ngcloud.ru → https://deck.ngcloud.ru/
|
||||||
|
func (c *Client) refererFromEndpoint() string {
|
||||||
|
ep := c.endpoint
|
||||||
|
if strings.HasPrefix(ep, "https://") {
|
||||||
|
ep = ep[8:]
|
||||||
|
} else if strings.HasPrefix(ep, "http://") {
|
||||||
|
ep = ep[7:]
|
||||||
|
}
|
||||||
|
host := ep
|
||||||
|
if idx := strings.Index(host, "/"); idx >= 0 {
|
||||||
|
host = host[:idx]
|
||||||
|
}
|
||||||
|
// lk-api-gateway-stand → deck-stand, lk-api-gateway → deck
|
||||||
|
refererHost := strings.Replace(host, "lk-api-gateway-", "deck-", 1)
|
||||||
|
refererHost = strings.Replace(refererHost, "lk-api-gateway.", "deck.", 1)
|
||||||
|
return "https://" + refererHost + "/"
|
||||||
|
}
|
||||||
|
|
||||||
// CollectOperations собирает и классифицирует все операции сервиса.
|
// CollectOperations собирает и классифицирует все операции сервиса.
|
||||||
func (c *Client) CollectOperations(ops []types.OperationInfo) ([]types.OperationSpec, bool, bool, bool, error) {
|
func (c *Client) CollectOperations(ops []types.OperationInfo) ([]types.OperationSpec, bool, bool, bool, error) {
|
||||||
result := make([]types.OperationSpec, 0, len(ops))
|
result := make([]types.OperationSpec, 0, len(ops))
|
||||||
@@ -140,7 +165,7 @@ func (c *Client) CollectOperations(ops []types.OperationInfo) ([]types.Operation
|
|||||||
}
|
}
|
||||||
params := make([]types.ParamSpec, 0, len(opInfo.CfsParams))
|
params := make([]types.ParamSpec, 0, len(opInfo.CfsParams))
|
||||||
for _, p := range opInfo.CfsParams {
|
for _, p := range opInfo.CfsParams {
|
||||||
params = append(params, types.ParamSpec{
|
param := types.ParamSpec{
|
||||||
ID: p.ID,
|
ID: p.ID,
|
||||||
Code: p.Code,
|
Code: p.Code,
|
||||||
DataType: strings.TrimSpace(p.DataType),
|
DataType: strings.TrimSpace(p.DataType),
|
||||||
@@ -161,7 +186,32 @@ func (c *Client) CollectOperations(ops []types.OperationInfo) ([]types.Operation
|
|||||||
DependsOn: p.DependsOnCfsParams,
|
DependsOn: p.DependsOnCfsParams,
|
||||||
IsModifiable: p.IsModifiable,
|
IsModifiable: p.IsModifiable,
|
||||||
IsSensitive: p.IsSensitive,
|
IsSensitive: p.IsSensitive,
|
||||||
})
|
}
|
||||||
|
|
||||||
|
// Разворачиваем dataDescriptor в SubParams (подполя map-fixed/array-map-fixed).
|
||||||
|
if len(p.DataDescriptor) > 0 {
|
||||||
|
subParams := make([]types.ParamSpec, 0, len(p.DataDescriptor))
|
||||||
|
for code, sub := range p.DataDescriptor {
|
||||||
|
subParams = append(subParams, types.ParamSpec{
|
||||||
|
ID: sub.SubParamID,
|
||||||
|
Code: code,
|
||||||
|
DataType: strings.TrimSpace(sub.DataType),
|
||||||
|
Required: sub.IsRequired,
|
||||||
|
Default: normalizeDefault(sub.DefaultValue),
|
||||||
|
// valueList в dataDescriptor — может быть строкой (comma-sep) или массивом
|
||||||
|
ValueList: normalizeSubValueList(sub.ValueList),
|
||||||
|
Descr: strings.TrimSpace(sub.Descr),
|
||||||
|
Man: strings.TrimSpace(sub.Man),
|
||||||
|
Regex: strings.TrimSpace(sub.Regex),
|
||||||
|
// isModifiableDefinition → IsModifiable
|
||||||
|
IsModifiable: boolPtr(sub.IsModifiableDefinition),
|
||||||
|
IsSensitive: sub.IsSensitive,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
param.SubParams = subParams
|
||||||
|
}
|
||||||
|
|
||||||
|
params = append(params, param)
|
||||||
}
|
}
|
||||||
sort.Slice(params, func(i, j int) bool { return params[i].ID < params[j].ID })
|
sort.Slice(params, func(i, j int) bool { return params[i].ID < params[j].ID })
|
||||||
|
|
||||||
@@ -232,3 +282,48 @@ func normalizeDefault(value interface{}) interface{} {
|
|||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// normalizeSubValueList — приводит valueList из dataDescriptor к []string.
|
||||||
|
// API может вернуть строку (comma-separated), массив, или null.
|
||||||
|
func normalizeSubValueList(v interface{}) []string {
|
||||||
|
if v == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
switch t := v.(type) {
|
||||||
|
case string:
|
||||||
|
return splitCommaList(t)
|
||||||
|
case []interface{}:
|
||||||
|
out := make([]string, 0, len(t))
|
||||||
|
for _, item := range t {
|
||||||
|
out = append(out, fmt.Sprintf("%v", item))
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// splitCommaList — разбивает comma-separated строку из dataDescriptor в []string.
|
||||||
|
func splitCommaList(s string) []string {
|
||||||
|
s = strings.TrimSpace(s)
|
||||||
|
if s == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
parts := strings.Split(s, ",")
|
||||||
|
out := make([]string, 0, len(parts))
|
||||||
|
for _, p := range parts {
|
||||||
|
p = strings.TrimSpace(p)
|
||||||
|
if p != "" {
|
||||||
|
out = append(out, p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(out) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// boolPtr — возвращает указатель на bool.
|
||||||
|
func boolPtr(b bool) *bool {
|
||||||
|
return &b
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ type ServiceRef struct {
|
|||||||
|
|
||||||
// Load читает конфигурацию из переменных окружения и файлов.
|
// Load читает конфигурацию из переменных окружения и файлов.
|
||||||
func Load() (Config, error) {
|
func Load() (Config, error) {
|
||||||
apiEndpoint := getenvDefault("NUBES_API_ENDPOINT", "https://deck-api.ngcloud.ru/api/v1/index.cfm")
|
apiEndpoint := getenvDefault("NUBES_API_ENDPOINT", "https://lk-api-gateway.ngcloud.ru/api/v1/svc")
|
||||||
apiEndpoint = normalize.APIEndpoint(apiEndpoint)
|
apiEndpoint = normalize.APIEndpoint(apiEndpoint)
|
||||||
apiToken, err := loadToken()
|
apiToken, err := loadToken()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -63,6 +63,33 @@ type CfsParam struct {
|
|||||||
DependsOnCfsParams interface{} `json:"dependsOnCfsParams"`
|
DependsOnCfsParams interface{} `json:"dependsOnCfsParams"`
|
||||||
IsModifiable *bool `json:"isModifiable"`
|
IsModifiable *bool `json:"isModifiable"`
|
||||||
IsSensitive bool `json:"isSensitive"`
|
IsSensitive bool `json:"isSensitive"`
|
||||||
|
// DataDescriptor — подполя для map-fixed/array-map-fixed параметров.
|
||||||
|
// Ключ — код подполя (например "cpu"), значение — метаданные подполя.
|
||||||
|
// Доступно только через /instanceOperations/default/{id}.
|
||||||
|
DataDescriptor map[string]CfsSubParam `json:"dataDescriptor"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CfsSubParam — подполе map-fixed параметра из dataDescriptor.
|
||||||
|
type CfsSubParam struct {
|
||||||
|
SubParamID int `json:"svcOperationCfsSubparamId"`
|
||||||
|
Code string `json:"svcOperationCfsSubparam"`
|
||||||
|
DataType string `json:"dataType"`
|
||||||
|
ValueList interface{} `json:"valueList"` // string (comma-sep) or array
|
||||||
|
IsRequired bool `json:"isRequired"`
|
||||||
|
IsModifiableDefinition bool `json:"isModifiableDefinition"`
|
||||||
|
IsSensitive bool `json:"isSensitive"`
|
||||||
|
IsHidden bool `json:"isHidden"`
|
||||||
|
DefaultValue interface{} `json:"defaultValue"`
|
||||||
|
Descr string `json:"descr"`
|
||||||
|
Man string `json:"man"`
|
||||||
|
Label string `json:"label"`
|
||||||
|
Regex string `json:"regex"`
|
||||||
|
Expression string `json:"expression"`
|
||||||
|
MaxLength interface{} `json:"maxlength"`
|
||||||
|
MinLength interface{} `json:"minlength"`
|
||||||
|
RefSvcID interface{} `json:"refSvcId"`
|
||||||
|
UniqueScope string `json:"uniqueScope"`
|
||||||
|
DependsOnCfsParams interface{} `json:"dependsOnCfsParams"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ─── YAML-типы (алиасы к lib — общий контракт) ─────────────────────────────
|
// ─── YAML-типы (алиасы к lib — общий контракт) ─────────────────────────────
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# ⛔⛔⛔ LEGACY — СТАРЫЕ API ЗАКРЫВАЮТСЯ ⛔⛔⛔
|
||||||
|
# НИКОГДА не использовать для генерации! Только для справки.
|
||||||
|
# Актуальные API:
|
||||||
|
# https://lk-api-gateway.ngcloud.ru/api/v1/svc (prod)
|
||||||
|
# https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc (dev)
|
||||||
|
# https://lk-api-gateway-test.ngcloud.ru/api/v1/svc (test)
|
||||||
|
#
|
||||||
|
# === НИЖЕ — ЛЕГАСИ, НЕ ИСПОЛЬЗОВАТЬ ===
|
||||||
|
|
||||||
|
https://deck-api.ngcloud.ru/api/v1
|
||||||
|
|
||||||
|
https://deck-api-dev.ngcloud.ru/api/v1
|
||||||
|
|
||||||
|
https://deck-api-test.ngcloud.ru/api/v1
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<!-- ⛔⛔⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ! Все примеры ниже — ИСТОРИЧЕСКИЕ. -->
|
||||||
|
<!-- Актуальный API: https://lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# Сводка по разработке Terraform-провайдера Nubes
|
# Сводка по разработке Terraform-провайдера Nubes
|
||||||
|
|
||||||
Дата: 2026-01-22
|
Дата: 2026-01-22
|
||||||
@@ -111,7 +113,8 @@ curl -s -X POST "https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/
|
|||||||
```
|
```
|
||||||
- Проверка API:
|
- Проверка API:
|
||||||
```bash
|
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# Terraform Provider для Nubes Cloud - История разработки
|
# Terraform Provider для Nubes Cloud - История разработки
|
||||||
|
|
||||||
|
<!-- ⛔⛔⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ! Все упоминания ниже — ИСТОРИЧЕСКИЕ. -->
|
||||||
|
<!-- Актуальный API: https://lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
|
|
||||||
**Дата**: 21 января 2026
|
**Дата**: 21 января 2026
|
||||||
**Проект**: terraform-provider-mycloud
|
**Проект**: terraform-provider-mycloud
|
||||||
**Цель**: Создание Terraform Provider для управления ресурсами в облачной платформе Nubes
|
**Цель**: Создание Terraform Provider для управления ресурсами в облачной платформе Nubes
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# PostgreSQL Service Analysis & Implementation Plan
|
# PostgreSQL Service Analysis & Implementation Plan
|
||||||
|
|
||||||
**Date:** 2026-01-27
|
**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
|
# Resource Realm: универсальное определение через API
|
||||||
|
|
||||||
## Зачем это нужно
|
## Зачем это нужно
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# VM Service Discovery & Implementation Details
|
# VM Service Discovery & Implementation Details
|
||||||
|
|
||||||
## Обзор
|
## Обзор
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ terraform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
provider "nubes" {
|
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
|
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: изменения в бакете и вызов функции
|
# S3 Bucket Notifications: изменения в бакете и вызов функции
|
||||||
|
|
||||||
## Короткий ответ
|
## Короткий ответ
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_akhq" "baza" {
|
||||||
resource_realm = "TODO" # Выбрать платформу из списка
|
resource_realm = "TODO" # Выбрать платформу из списка
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_dnsrecord" "baza" {
|
||||||
zone_uid = "TODO" # UUID экземпляра услуги DNS-зоны
|
zone_uid = "TODO" # UUID экземпляра услуги DNS-зоны
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_dnszone" "baza" {
|
||||||
zone_email = "TODO" # Контактный e-mail
|
zone_email = "TODO" # Контактный e-mail
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_dummy" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_flask" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_gitea_complex" "baza" {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_gitea" "baza" {
|
||||||
psql_uid = "TODO" # UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически
|
psql_uid = "TODO" # UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_harbor" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_http" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_k8s_sthutrval_cluster" "baza" {
|
||||||
nsxt_uid = "TODO" # InstanceUid nsxt. Nsxt должен быть создан
|
nsxt_uid = "TODO" # InstanceUid nsxt. Nsxt должен быть создан
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_k8s_ziti_controller" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_kafka" "baza" {
|
||||||
resource_instances = 1 # Пример: `2`
|
resource_instances = 1 # Пример: `2`
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_lucee" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_mariadb" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_mongodb" "baza" {
|
||||||
resource_instances = 1 # Пример: `2`
|
resource_instances = 1 # Пример: `2`
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_nextcloud" "baza" {
|
||||||
psql_uid = "TODO"
|
psql_uid = "TODO"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_nifi" "baza" {
|
||||||
kafka_uid = "TODO" # Выбрать кластер из списка
|
kafka_uid = "TODO" # Выбрать кластер из списка
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_nodejs" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_nodered" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_openwhisk" "baza" {
|
||||||
username = "TODO" # Имя пользователя Openwhisk
|
username = "TODO" # Имя пользователя Openwhisk
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_pgadmin" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_rabbitmq" "baza" {
|
||||||
resource_realm = "TODO" # Выбрать платформу из списка
|
resource_realm = "TODO" # Выбрать платформу из списка
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_redis" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_s3" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_s3bucket" "baza" {
|
||||||
s3_user_uid = "235e0546-..." # UID Корневой услуги S3. На основе него будет создан бакет.
|
s3_user_uid = "235e0546-..." # UID Корневой услуги S3. На основе него будет создан бакет.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_superset" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_template" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_tenant" "baza" {
|
||||||
grafana_org_name = "TODO" # WZ-Код клиента
|
grafana_org_name = "TODO" # WZ-Код клиента
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_valo_tenant" "baza" {
|
||||||
resource_realm = "TODO"
|
resource_realm = "TODO"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_vapp" "baza" {
|
||||||
nsxt_uid = "TODO" # UUID Услуги `Сетевой шлюз периметра (Edge)`
|
nsxt_uid = "TODO" # UUID Услуги `Сетевой шлюз периметра (Edge)`
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_vc_complex" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_vc_nsxt" "baza" {
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_vc_org" "baza" {
|
||||||
resource_realm = "TODO" # Облако в котором будет развёрнут тенант
|
resource_realm = "TODO" # Облако в котором будет развёрнут тенант
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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 "nubes_vc_org_saas" "baza" {
|
||||||
resource_realm = "TODO" # Платформа для развертывания
|
resource_realm = "TODO" # Платформа для развертывания
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_vc_vdc" "baza" {
|
||||||
organization_uid = "TODO" # Для создания VDC предварительно необходимо создать организацию через услугу `Организация в Cloud Director`
|
organization_uid = "TODO" # Для создания VDC предварительно необходимо создать организацию через услугу `Организация в Cloud Director`
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_vc_vdc_group" "baza" {
|
||||||
vdc_uid = "TODO"
|
vdc_uid = "TODO"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_vc_vm" "baza" {
|
||||||
vapp_uid = "TODO" # InstanceUid vApp. vApp должен быть создан
|
vapp_uid = "TODO" # InstanceUid vApp. vApp должен быть создан
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_vc_vm_v2" "baza" {
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_vc_vm_v3" "baza" {
|
||||||
vapp_uid = "TODO"
|
vapp_uid = "TODO"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_vcexternalip" "baza" {
|
||||||
service_uid = "TODO"
|
service_uid = "TODO"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ terraform {
|
|||||||
# Токен доступа api_token к Nubes API — замените на реальный.
|
# Токен доступа api_token к Nubes API — замените на реальный.
|
||||||
provider "nubes" {
|
provider "nubes" {
|
||||||
api_token = "token_***"
|
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" {
|
resource "nubes_vmpostgre" "baza" {
|
||||||
vdc_uid = "TODO" # InstanceUid vdc. Vdc должен быть создан
|
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)
|
# PostgreSQL backend bugs (2026-02-28)
|
||||||
|
|
||||||
## Scope
|
## Scope
|
||||||
|
|||||||
@@ -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: найти svcId по имени сервиса**
|
||||||
1. **Запрос:** `GET /v1/index.cfm/instanceOperations/{instanceOperationUid}?fields=cfsParams`
|
```bash
|
||||||
2. **Анализ `cfsParams`:**
|
curl -s -H "Authorization: Bearer $TOKEN" $URL/services | jq '.results[] | select(.svc == "ApacheKafka") | .svcId'
|
||||||
- `svcOperationCfsParamId`: Числовой ID параметра (например, `8`). **Критично для работы провайдера.**
|
# → 116
|
||||||
- `label`: Имя поля в UI (например, "UUID VDC").
|
```
|
||||||
- `dataType`: Тип (`string`, `boolean`, `list`, `uuid`).
|
|
||||||
- `isRequired`: Обязательность.
|
**Шаг 2: найти svcOperationId нужной операции**
|
||||||
- `descr`: Подсказка по заполнению.
|
```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,7 +1,7 @@
|
|||||||
# Taffy API Technical Manual for AI Agents
|
# Taffy API Technical Manual for AI Agents
|
||||||
|
|
||||||
## 1. Authentication & Security
|
## 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`):
|
All requests MUST include these headers (as indicated by CORS `access-control-allow-headers`):
|
||||||
- `Authorization`: `Bearer <TOKEN>`
|
- `Authorization`: `Bearer <TOKEN>`
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# Universal Rebuild — Архитектура и рабочая цепочка (актуально)
|
# Universal Rebuild — Архитектура и рабочая цепочка (актуально)
|
||||||
|
|
||||||
Документ для нового чата: описывает, как устроено «универсальное ядро», как формируются YAML‑спеки сервисов и как генерируются Go‑ресурсы. Учитывает ошибки/уроки из текущего чата.
|
Документ для нового чата: описывает, как устроено «универсальное ядро», как формируются YAML‑спеки сервисов и как генерируются Go‑ресурсы. Учитывает ошибки/уроки из текущего чата.
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# Резюме для нового чата (подробно)
|
# Резюме для нового чата (подробно)
|
||||||
|
|
||||||
## Контекст
|
## Контекст
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# Полный анализ кодовой базы и план развития
|
# Полный анализ кодовой базы и план развития
|
||||||
|
|
||||||
**Дата:** 2026-03-13
|
**Дата:** 2026-03-13
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# Матрица состояний ресурсов в облаке ngcloud
|
# Матрица состояний ресурсов в облаке ngcloud
|
||||||
|
|
||||||
## Основные параметры состояния
|
## Основные параметры состояния
|
||||||
|
|||||||
@@ -8,6 +8,34 @@
|
|||||||
- Чеклист разработки/клона: [docs/00_overview/dev-clone-checklist.md](00_overview/dev-clone-checklist.md)
|
- Чеклист разработки/клона: [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)
|
- НЛИ/чат-материалы: [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 и схемы
|
||||||
- Алгоритмы API-дискавери: [docs/70_api/api-discovery-algorithms.md](70_api/api-discovery-algorithms.md)
|
- Алгоритмы 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)
|
- Полный API-дамп: [docs/70_api/api_analysis/API_DOCUMENTATION_SUMMARY.md](70_api/api_analysis/API_DOCUMENTATION_SUMMARY.md)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# Instance State Transitions - Матрица состояний инстансов ngcloud
|
# Instance State Transitions - Матрица состояний инстансов ngcloud
|
||||||
|
|
||||||
Полное руководство по определению состояния инстансов через API ngcloud на основе комбинаций флагов и истории операций.
|
Полное руководство по определению состояния инстансов через API ngcloud на основе комбинаций флагов и истории операций.
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# AI-Agent Glossary (Search-Oriented Index)
|
# AI-Agent Glossary (Search-Oriented Index)
|
||||||
|
|
||||||
Purpose: compact, English, link-rich glossary to help AI agents find facts fast in this repo.
|
Purpose: compact, English, link-rich glossary to help AI agents find facts fast in this repo.
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# Архитектура и методы (CRUD)
|
# Архитектура и методы (CRUD)
|
||||||
|
|
||||||
## 1. Актуальная архитектура (универсальный rebuild)
|
## 1. Актуальная архитектура (универсальный rebuild)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# СУПЕРглоссарий (словарь с ссылками)
|
# СУПЕРглоссарий (словарь с ссылками)
|
||||||
|
|
||||||
Каждый термин содержит ссылки на места употребления в документации.
|
Каждый термин содержит ссылки на места употребления в документации.
|
||||||
|
|||||||
@@ -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 (закрытая страница)
|
# How It Was Done — Developer Guide (закрытая страница)
|
||||||
|
|
||||||
**Filename & Versioning:** howitwasdone.md / 2026‑02‑04 / Draft v1
|
**Filename & Versioning:** howitwasdone.md / 2026‑02‑04 / Draft v1
|
||||||
@@ -76,6 +78,25 @@
|
|||||||
## 2. База знаний ошибок
|
## 2. База знаний ошибок
|
||||||
|
|
||||||
### A. Аутентификация и токены
|
### 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
|
**Симптом:** 401 Unauthorized / Authorization header expected
|
||||||
**Причина:** токен истёк или не передан в окружение
|
**Причина:** токен истёк или не передан в окружение
|
||||||
**Решение:** обновить access_token и сохранить в файле HH‑MM‑SS.token; убедиться, что Terraform читает токен
|
**Решение:** обновить access_token и сохранить в файле HH‑MM‑SS.token; убедиться, что Terraform читает токен
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# API Token Saga — 30.06.2026
|
# API Token Saga — 30.06.2026
|
||||||
|
|
||||||
**Дата:** 30 июня 2026
|
**Дата:** 30 июня 2026
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# ⛔⛔⛔ ПРАВИЛА РАЗДЕЛЕНИЯ СТЕНДОВ ⛔⛔⛔
|
# ⛔⛔⛔ ПРАВИЛА РАЗДЕЛЕНИЯ СТЕНДОВ ⛔⛔⛔
|
||||||
|
|
||||||
> **НАРУШЕНИЕ = УВОЛЬНЕНИЕ. Без шуток.**
|
> **НАРУШЕНИЕ = УВОЛЬНЕНИЕ. Без шуток.**
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# Testing Safety Rules
|
# Testing Safety Rules
|
||||||
|
|
||||||
## ⛔ ЗАПРЕЩЕНО — прогонять тесты в PROD
|
## ⛔ ЗАПРЕЩЕНО — прогонять тесты в PROD
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# Troubleshooting
|
# Troubleshooting
|
||||||
|
|
||||||
## API Nubes — ошибки доступа (403, 401, IAM error)
|
## API Nubes — ошибки доступа (403, 401, IAM error)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<!-- ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Актуальный API: lk-api-gateway.ngcloud.ru/api/v1/svc -->
|
||||||
# План: валидация параметров с выбором из списка
|
# План: валидация параметров с выбором из списка
|
||||||
|
|
||||||
Дата составления: 2026-03-25
|
Дата составления: 2026-03-25
|
||||||
|
|||||||
@@ -98,9 +98,9 @@ func (p *NubesProvider) Configure(ctx context.Context, req provider.ConfigureReq
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(api-gateway): default is legacy proxy (index.cfm?endpoint=).
|
// ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Использовать ТОЛЬКО lk-api-gateway.
|
||||||
// core.UniversalClient still uses ?endpoint= pattern — needs migration to REST paths.
|
// По умолчанию — Gateway. Переопределяется через NUBES_API_ENDPOINT.
|
||||||
apiEndpoint := "https://deck-api.ngcloud.ru/api/v1/index.cfm"
|
apiEndpoint := "https://lk-api-gateway.ngcloud.ru/api/v1/svc"
|
||||||
apiToken := ""
|
apiToken := ""
|
||||||
|
|
||||||
if !config.ApiEndpoint.IsNull() {
|
if !config.ApiEndpoint.IsNull() {
|
||||||
|
|||||||
@@ -50,7 +50,8 @@ class InstanceInfo:
|
|||||||
class CloudInstanceChecker:
|
class CloudInstanceChecker:
|
||||||
"""Проверяет статус инстансов в облаке"""
|
"""Проверяет статус инстансов в облаке"""
|
||||||
|
|
||||||
BASE_URL = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
|
# ⛔ LEGACY: deck-api ЗАКРЫВАЕТСЯ. Использовать lk-api-gateway.
|
||||||
|
BASE_URL = "https://lk-api-gateway.ngcloud.ru/api/v1/svc"
|
||||||
|
|
||||||
def __init__(self, token: str):
|
def __init__(self, token: str):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user