5.4 KiB
VM Service Discovery & Implementation Details
Обзор
Сервис управления виртуальными машинами (VM) в облаке Nubes. Позволяет выполнять операции полного жизненного цикла: создание, изменение, остановка, запуск, удаление.
ВАЖНО: Удаление ВМ происходит через механизм карантина (suspend), аналогично VDC. Реальное удаление происходит через 14 дней административными процессами облака.
API Endpoints
- Base URL:
/api/v1/index.cfm - Service ID: 28
Основные методы
| Операция | HTTP метод | URL | Описание |
|---|---|---|---|
| Create Draft | POST |
/instances |
Создание черновика инстанса. |
| Start Op | POST |
/instanceOperations |
Инициация операции (create, modify, suspend, resume). |
| Add Params | POST |
/instanceOperationCfsParams |
Добавление параметров к операции. |
| Validate | GET |
/instanceOperations/{opId}/validate-cfs |
Валидация (опционально). |
| Run Op | POST |
/instanceOperations/{opId}/run |
Запуск выполнения операции. |
Parameter Mapping (Code & IDs)
API использует svcOperationCfsParamId для идентификации параметров.
Внимание: ID отличаются для создани (create) и изменения (modify).
В провайдере (v1.0.3+) реализована логика маппинга по code (имени), а также fallback на ID.
| Parameter Name (Terraform) | API Code | Create ID | Modify ID | Тип данных | Описание |
|---|---|---|---|---|---|
vapp_uid |
vappUid |
407 | - | String | UUID vApp контейнера |
vm_name |
vmName |
408 | - | String | Уникальное имя ВМ |
vm_cpu |
vmCpu |
409 | 493 | Int | Кол-во ядер |
vm_ram |
vmRam |
410 | 494 | Int | RAM (GB) |
vm_disk |
vmDisk |
411 | 495? | Int | Доп. диск (GB) |
ip_space_name |
ipSpaceName |
412 | 496 | String | Public IP setting ("no-needed") |
access_ip_list |
accessIpList |
413 | 497 | JSON/List | Whitelist IP |
image_vm |
imageVm |
414 | - | String | OS Template (e.g. Ubuntu_22-20G) |
cloud_init |
cloudInit |
415 | - | String | YAML конфиг |
user_login |
userLogin |
416 | - | String | Admin User |
user_public_key |
userPublicKey |
417 | - | String | SSH Key (OpenSSH) |
access_port_list |
accessPortList |
448 | 498 | JSON/List | Whitelist Ports |
need_add_zabbix_template |
needAddZabbixTemplate |
449 | 499 | Bool | Мониторинг |
Операции и Жизненный цикл
Create (Создание)
POST /instances-> создает объект.POST /instanceOperations(op="create").- Заполняются параметры 407-449.
Run.
Modify (Изменение)
POST /instanceOperations(op="modify").- Заполняются параметры (ID 493-499).
Run.- Влияет на ресурсы (CPU, RAM), сеть и мониторинг. Имя и OS обычно не меняются.
Suspend (Карантин/Удаление)
POST /instanceOperations(op="suspend").Run(обычно без параметров).- ВМ останавливается и помечается для удаления.
Resume (Восстановление)
POST /instanceOperations(op="resume").Run.- ВМ запускается из состояния
suspend.
Реализация Terraform
Deletion Protection
Ресурс nubes_vm_instance поддерживает параметр deletion_protection (default: true).
- true: При
terraform destroyресурс удаляется только из tfstate. В облаке остается активным. - false: При
terraform destroyвыполняется операция suspend. ВМ выключается и попадает в карантин (14 дней).
Modify Logic
Метод Update распознает изменения и вызывает операцию modify.
Параметры CPU, RAM, PortList, IpList, Zabbix и др. обновляются.
Параметры создания (Template, Login, Key, vApp, Name) обычно immutable или требуют пересоздания (ForceNew).
Результаты анализа HAR
vmOK.har: Успешное создание ВМ. Подтверждены ID 407-449.vmsuspendresumemodify.har: Анализ операцийmodify(ID 493-499),suspend,resume.
Известные проблемы
- API не возвращает
code(имя параметра) в некоторых случаях, полагаемся на хардкод маппинг ID или порядок. (Исправлено в v1.0.3 через универсальный маппер). accessIpListиaccessPortListтребуют явной передачи зависимостей JSON/Array даже если пусты.