Облачные провайдеры и управление ВМ
Подключите VMware vCenter или Proxmox VE к Skitflow и создавайте виртуальные машины прямо из дашборда (только self-hosted + enterprise).
Облачные провайдеры доступны только в self-hosted режиме и требуют
активной enterprise-лицензии или триала с включённой функцией cloudProviders.
Skitflow может подключаться к локальным гипервизорам и создавать виртуальные машины по требованию. Поддерживаемые бэкенды:
| Тип | Гипервизор |
|---|---|
vmware | VMware vCenter (ESXi) |
proxmox | Proxmox VE |
Разрешения
Доступ регулируется тремя ролями. Владельцы и администраторы обходят проверки разрешений автоматически.
| Разрешение | Что позволяет |
|---|---|
cloud.manage | Создание/изменение/удаление провайдеров, VM-тиров и VM-заказов |
cloud.order | Заказ ВМ и удаление VM-заказов своей организации |
cloud.read | Доступ только для чтения к провайдерам, тирам и заказам |
Настройте роли в разделе Настройки → Пользовательские роли.
Облачные провайдеры
Облачный провайдер — запись о подключении к конечной точке гипервизора. Учётные данные хранятся в зашифрованном виде (AES-GCM).
Добавление провайдера
Перейдите в Настройки → Облачные провайдеры → Добавить провайдер и заполните:
| Поле | Описание |
|---|---|
| Название | Отображаемое имя |
| Тип | vmware или proxmox |
| Хост | Имя хоста или IP vCenter/Proxmox |
| Режим аутентификации | password (логин + пароль) или token (API-токен) |
| Имя пользователя | Сервисная учётная запись |
| Пароль / токен | Учётная запись (только запись — прочитать после сохранения невозможно) |
| Пропустить проверку TLS | Отключить проверку сертификата для самоподписанных сертификатов |
Нажмите Проверить соединение, чтобы убедиться в корректности настроек перед сохранением.
Управление провайдерами
| Действие | Примечания |
|---|---|
| Изменить | Обновить можно все поля, кроме type. Пароль перешифровывается только при передаче нового значения. |
| Удалить | Удаляет запись провайдера. VM-тиры и записи VM-заказов удаляются каскадно. Зарегистрированные записи серверов и работающие ВМ не затрагиваются. |
| Инвентаризация | Получает актуальный список ресурсов с гипервизора (сети, датасторы, шаблоны, пулы ресурсов для VMware; узлы, хранилища, мосты, шаблоны для Proxmox). |
Примеры API
# Получить список провайдеров
curl -X GET 'https://your-instance/api/cloud.listProviders' \
-H 'x-api-key: YOUR_API_KEY'
# Создать VMware-провайдер
curl -X POST 'https://your-instance/api/cloud.createProvider' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "vCenter Dev",
"providerType": "vmware",
"authMode": "password",
"host": "vcenter.internal",
"username": "[email protected]",
"password": "secret",
"skipTlsVerify": false
}'
# Проверить соединение без сохранения
curl -X POST 'https://your-instance/api/cloud.testProvider' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"providerType": "proxmox",
"authMode": "token",
"host": "proxmox.internal:8006",
"username": "root@pam",
"password": "TOKEN_VALUE",
"skipTlsVerify": true
}'VM-тиры
VM-тир — сохранённый шаблон конфигурации оборудования и размещения, привязанный к одному провайдеру. Пользователи с разрешением cloud.order могут заказывать ВМ из тиров без cloud.manage.
Поля размещения VMware
| Поле | Описание |
|---|---|
templateMoid | Managed Object ID исходной ВМ/шаблона |
networkMoid | MOID целевой сети/портгруппы |
datastoreMoid | MOID целевого датастора |
resourcePoolMoid | MOID пула ресурсов |
folderMoid | (необязательно) MOID папки назначения |
Поля размещения Proxmox
| Поле | Описание |
|---|---|
templateVmid | VMID исходного шаблона |
node | Имя целевого узла Proxmox |
storageId | (необязательно) Хранилище для клонированного диска |
bridge | (необязательно) Сетевой мост; если не указан, сохраняется существующая сетевая конфигурация шаблона. vlanTag применяется только вместе с bridge. |
vlanTag | (необязательно) VLAN-тег 1–4094 |
ipAddress | (необязательно) Статический IP для cloud-init |
ipCidr | (необязательно) Длина префикса (0–32) |
gateway | (необязательно) Шлюз по умолчанию |
sshUsername | (необязательно) Имя пользователя, передаваемое через cloud-init |
extraDiskGb | (необязательно) Размер дополнительного диска |
extraDiskStorageId | (необязательно) Хранилище для дополнительного диска |
Общие поля оборудования (оба типа)
| Поле | Описание |
|---|---|
cpu | Количество vCPU (≥ 1) |
memoryMb | Оперативная память в МиБ (≥ 256) |
diskGb | Размер корневого диска в ГиБ (≥ 1) |
sshKeyId | (необязательно) SSH-ключ для внедрения (должен принадлежать той же организации) |
cloudInitExtra | (необязательно) Дополнительные данные пользователя cloud-init |
Примеры API
# Получить список тиров провайдера
curl -X GET 'https://your-instance/api/cloud.listTiers?cloudProviderId=PROVIDER_ID' \
-H 'x-api-key: YOUR_API_KEY'
# Создать тир Proxmox
curl -X POST 'https://your-instance/api/cloud.createTier' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "2vCPU / 4 GB",
"cloudProviderId": "PROVIDER_ID",
"cpu": 2,
"memoryMb": 4096,
"diskGb": 40,
"placement": {
"kind": "proxmox",
"templateVmid": 9000,
"node": "pve01",
"bridge": "vmbr0"
}
}'Управление заказами ВМ
Заказ ВМ (provision) отслеживает весь жизненный цикл одной ВМ — от запроса через гипервизор до регистрации как сервера Skitflow.
Создание заказа
Перейдите в Настройки → Серверы → Заказать ВМ (также доступно в Настройки → Облачные провайдеры). Выберите сохранённый тир или укажите параметры вручную.
Для заказов Proxmox из тира можно переопределить IP-адрес и дополнительный диск при создании заказа без изменения самого тира.
Заказ из тира
curl -X POST 'https://your-instance/api/cloud.orderVm' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"vmName": "app-01",
"vmTierId": "TIER_ID"
}'Пользовательский заказ (VMware)
curl -X POST 'https://your-instance/api/cloud.orderVm' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"vmName": "app-02",
"cloudProviderId": "PROVIDER_ID",
"custom": {
"kind": "vmware",
"cpu": 4,
"memoryMb": 8192,
"diskGb": 80,
"templateMoid": "vm-100",
"networkMoid": "network-10",
"datastoreMoid": "datastore-5",
"resourcePoolMoid": "resgroup-8"
}
}'Жизненный цикл заказа
pending → cloning → customizing ─┬→ waiting_ip → ready
│ ↘ failed
└──────────────────↘ manual| Статус | Значение |
|---|---|
pending | В очереди, ещё не начат |
cloning | Гипервизор клонирует шаблон |
customizing | Применяется конфигурация CPU/RAM/диска/сети |
waiting_ip | Ожидание IP-адреса от ВМ. Полностью пропускается для заказа Proxmox со статическим ipAddress — этот адрес используется напрямую. |
ready | ВМ запущена и зарегистрирована как сервер Skitflow |
failed | Ошибка создания — см. поле errorMessage в записи заказа |
manual | ВМ создана, требуется ручная регистрация сервера — либо нет SSH-ключа/ошибка cloud-init (переход сразу из customizing), либо истекло время ожидания IP после waiting_ip. Поле errorMessage указывает, какой именно случай произошёл. |
После перехода в статус ready созданная ВМ появится в разделе Серверы и может использоваться для развёртывания.
Удаление заказа
При удалении заказа:
- ВМ уничтожается на гипервизоре (попытка — ошибка подключения логируется, но не блокирует удаление).
- Связанная запись сервера удаляется из списка серверов.
- Запись заказа удаляется.
curl -X POST 'https://your-instance/api/cloud.removeProvision' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"vmProvisionId": "PROVISION_ID"}'Журнал аудита
Каждое действие по созданию, изменению и удалению провайдеров, тиров и заказов фиксируется в Журнале аудита с типами ресурсов cloud-provider, vm-tier и vm-provision.