name: vc_vm_v3 service_id: 28 service_display_name: Виртуальная машина service_short_name: vc_vm_v3 service_man: '# Документация по разворачиванию ВМ в Личном кабинете

Данный сервис позволяет разворачивать виртуальные машины (ВМ) непосредственно из Личного кабинета (ЛК).

## Доступные операции
- **create** — Создание виртуальной машины
- **delete** — Удаление виртуальной машины
- **resume** — Запуск виртуальной машины
- **suspend** — Остановка виртуальной машины

---

## Параметры для развёртывания ВМ

### Обязательные параметры:

**vappUid**
UUID vApp, в которой будет создаваться виртуальная машина.
*Пример: WZ00400*

**vmName**
Уникальное имя виртуальной машины.
*Пример: test-vm*

**vmCpu**
Количество ядер процессора. Должно быть больше 0.
*Пример: 1*

**vmRam**
Объем оперативной памяти в гигабайтах. Должно быть больше 0.
*Пример: 1*


**accessPortList**
Белый список портов для доступа к виртуальной машине извне в формате JSON.
*Пример: ["22","10050]*

**imageVm**
Образ операционной системы для развёртывания.
*Доступные значения: RockyLinux_9-16G-cloudinit, Ubuntu_22-20G, Debian_13-20G*

**userLogin**
Логин пользователя для SSH-доступа.
*По умолчанию: myuser*

**userPublicKey**
Публичный SSH-ключ пользователя в формате OpenSSH.
*Пример: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...*

**needAddZabbixTemplate**
Значение истина\ложь, определяющее будет ли добавлен хост в zabbix.
*Пример: true*

### Опциональные параметры:

**accessIpList**
Белый список IP-адресов для доступа к виртуальной машине в формате JSON. Если оставить пустым, вм будет доступена со всех адресов.
*Пример: ["192.168.1.1", "10.0.0.5"]*

**vmDisk**
Размер дополнительного диска в гигабайтах. Должно быть больше 0.
*Пример: 50*

**ipSpaceName**
Внешний IP-адрес. Если не требуется — укажите значение "no-needed" (В нем не будет работать сбор метрик zabbix).

**cloudInit**
YAML-скрипт для кастомизации системы через cloud-init.

---

## Доступные образы операционных систем

### RockyLinux_9-16G-cloudinit
Базовый образ на основе Rocky Linux 9 (Rocky-9.6-x86_64-minimal) для серверных задач.
- Размер системного диска: 16 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM

### Ubuntu_22-20G
Образ на основе Ubuntu Server 22.04 LTS для облачного окружения.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM

### Debian_13-20G
Образ на основе Debian 13 (Trixie) для стабильной серверной работы.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM

---

## Пример использования Cloud-init

```yaml
users:
- name: myuser
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...

packages:
- nginx

runcmd:
- systemctl enable --now nginx
- systemctl restart nginx
```

---

## Результат выполнения

После успешного развёртывания в Личном кабинете появится новая виртуальная машина с заданными характеристиками. SSH-доступ осуществляется с использованием указанных логина и публичного ключа.

---

## Важные примечания

### Особенности работы:
- Для отключения внешнего IP укажите значение "no-needed" в параметре ipSpaceName
- Параметр cloudInit является опциональным

### Ограничения:
- Не рекомендуется использовать продолжительные инструкции в cloud-init (таймаут 5 минут)
- Не поддерживается запись файлов через cloud-init
- Не реализовано создание резервных копий ВМ

---

## Диагностика проблем с cloud-init

### Основной лог-файл:
```bash
/var/log/cloud-init.log
```

### Пакет не устанавливается:
- Проверьте доступность пакета в репозитории
- Убедитесь в правильности написания имени пакета
- Попробуйте установить вручную: `apt install <имя_пакета>` (Debian/Ubuntu) или `dnf install <имя_пакета>` (Rocky Linux)

### Команда не выполняется:
- Проверьте наличие требуемой утилиты в системе
- Убедитесь в правильности синтаксиса команды
- Попробуйте выполнить команду вручную для диагностики' lifecycle: suspendOnDestroyDefault: true adoptExistingOnCreateDefault: false operations: - svcOperationId: 132 operation: create kind: instance action: create - svcOperationId: 133 operation: delete kind: instance action: delete - svcOperationId: 159 operation: modify kind: instance action: modify - svcOperationId: 286 operation: reconcile kind: action action: reconcile - svcOperationId: 164 operation: redeploy kind: action action: redeploy - svcOperationId: 135 operation: resume kind: instance action: resume - svcOperationId: 134 operation: suspend kind: instance action: suspend stateOut: {} cfsParams: - svcOperationCfsParamId: 407 svcOperationCfsParam: vappUid dataType: uuid isRequired: true defaultValue: '' isModifiable: false - svcOperationCfsParamId: 408 svcOperationCfsParam: vmName dataType: string isRequired: true defaultValue: web01 isModifiable: false - svcOperationCfsParamId: 409 svcOperationCfsParam: vmCpu dataType: integer > 0 isRequired: true defaultValue: '1' isModifiable: true - svcOperationCfsParamId: 410 svcOperationCfsParam: vmRam dataType: integer > 0 isRequired: true defaultValue: '1' isModifiable: true - svcOperationCfsParamId: 411 svcOperationCfsParam: vmDisk dataType: integer > 0 isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 412 svcOperationCfsParam: ipSpaceName dataType: string isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 413 svcOperationCfsParam: accessIpList dataType: json isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 414 svcOperationCfsParam: imageVm dataType: string isRequired: true defaultValue: '' isModifiable: false - svcOperationCfsParamId: 415 svcOperationCfsParam: cloudInit dataType: yaml isRequired: false defaultValue: '' isModifiable: false - svcOperationCfsParamId: 416 svcOperationCfsParam: userLogin dataType: string isRequired: true defaultValue: myuser isModifiable: false - svcOperationCfsParamId: 417 svcOperationCfsParam: userPublicKey dataType: string isRequired: true defaultValue: '' isModifiable: false - svcOperationCfsParamId: 448 svcOperationCfsParam: accessPortList dataType: string isRequired: true defaultValue: '["22"]' isModifiable: true - svcOperationCfsParamId: 493 svcOperationCfsParam: vmCpu dataType: integer > 0 isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 494 svcOperationCfsParam: vmRam dataType: integer > 0 isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 495 svcOperationCfsParam: vmDisk dataType: integer > 0 isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 496 svcOperationCfsParam: ipSpaceName dataType: string isRequired: false defaultValue: '' isModifiable: true valueList: - no-needed - internet-antiddos-v1 - internet-no-antiddos-v1 - internet-ipv4-v1 - svcOperationCfsParamId: 497 svcOperationCfsParam: accessIpList dataType: json isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 498 svcOperationCfsParam: accessPortList dataType: json isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 509 svcOperationCfsParam: vmName dataType: string isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 510 svcOperationCfsParam: vmCpu dataType: integer > 0 isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 511 svcOperationCfsParam: vmRam dataType: integer > 0 isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 512 svcOperationCfsParam: vmDisk dataType: integer > 0 isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 513 svcOperationCfsParam: ipSpaceName dataType: string isRequired: false defaultValue: '' isModifiable: true valueList: - no-needed - internet-antiddos-v1 - internet-no-antiddos-v1 - internet-ipv4-v1 - svcOperationCfsParamId: 514 svcOperationCfsParam: accessIpList dataType: json isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 515 svcOperationCfsParam: imageVm dataType: string isRequired: true defaultValue: '' isModifiable: true valueList: - RockyLinux_9-16G-cloudinit - Ubuntu_22-20G - Debian_13-20G - svcOperationCfsParamId: 516 svcOperationCfsParam: userLogin dataType: string isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 517 svcOperationCfsParam: userPublicKey dataType: string isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 518 svcOperationCfsParam: cloudInit dataType: yaml isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 520 svcOperationCfsParam: accessPortList dataType: json isRequired: false defaultValue: '' isModifiable: true cfsParamsByOp: 132: - 407 - 408 - 409 - 410 - 411 - 412 - 413 - 414 - 415 - 416 - 417 - 448 133: [] 159: - 493 - 494 - 495 - 496 - 497 - 498 286: [] 164: - 509 - 510 - 511 - 512 - 513 - 514 - 515 - 516 - 517 - 518 - 520 135: [] 134: [] stateParams: vappUid: '' vmName: web01 vmCpu: '1' vmRam: '1' vmDisk: '' ipSpaceName: '' accessIpList: '' imageVm: '' cloudInit: '' userLogin: myuser userPublicKey: '' accessPortList: '["22"]'