Skitflow
Self-hosted

Облачные провайдеры и управление ВМ

Подключите VMware vCenter или Proxmox VE к Skitflow и создавайте виртуальные машины прямо из дашборда (только self-hosted + enterprise).

Облачные провайдеры доступны только в self-hosted режиме и требуют активной enterprise-лицензии или триала с включённой функцией cloudProviders.

Skitflow может подключаться к локальным гипервизорам и создавать виртуальные машины по требованию. Поддерживаемые бэкенды:

ТипГипервизор
vmwareVMware vCenter (ESXi)
proxmoxProxmox 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

ПолеОписание
templateMoidManaged Object ID исходной ВМ/шаблона
networkMoidMOID целевой сети/портгруппы
datastoreMoidMOID целевого датастора
resourcePoolMoidMOID пула ресурсов
folderMoid(необязательно) MOID папки назначения

Поля размещения Proxmox

ПолеОписание
templateVmidVMID исходного шаблона
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 созданная ВМ появится в разделе Серверы и может использоваться для развёртывания.

Удаление заказа

При удалении заказа:

  1. ВМ уничтожается на гипервизоре (попытка — ошибка подключения логируется, но не блокирует удаление).
  2. Связанная запись сервера удаляется из списка серверов.
  3. Запись заказа удаляется.
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.

On this page