Vm

Виртуальный (выделенный) сервер эмулирует работу отдельного физического сервера. Сервер может быть создан с операционной системой семейства Linux или Windows, может иметь несколько сетевых подключений и дисков.

Объект «виртуальный сервер»

class esu.Vm(*args, token: Optional[str] = None, **kwargs)[исходный код]
Параметры:
  • id (str) – Идентификатор

  • name (str) – Имя

  • description (str) – Описание. Любой произвольный пользовательский текст

  • cpu (int) – Количество ядер

  • ram (int) – Количество ОЗУ в ГБ

  • power (bool) – Текущее состояние питания. Включен или выключен

  • vdc (object) – Объект класса esu.Vdc. ВЦОД, к которому относится данный виртуальный сервер

  • template (object) – Объект класса esu.Template. Шаблон операционной системы

  • metadata (list) – Список объектов класса esu.VmMetadata. Список полей, необходимых для создания виртуального выделенного сервера. Например, пароль или имя пользователя.

  • ports (list) – Список объектов класса esu.Port. Список сетей, к которым подключен данный виртуальный сервер

  • disks (list) – Список объектов класса esu.Disk. Список дисков, подключенных к данному виртуальному серверу

  • floating (object) – Объект класса esu.Port. Порт подключения виртаульаного выделенного сервера к внешней сети. Если None, сервер не имеет подключения к внешней сети.

  • token (str) – Токен для доступа к API. Если не передан, будет использована переменная окружения ESU_API_TOKEN

Примечание

Поля name, cpu, ram, template, ports, disks и vdc необходимы для создания.

Поля metadata, description и floating опциональны при создании.

Поля name, description, cpu, ram, floating могут быть изменены для существующего объекта.

classmethod get_object(id, token=None)[исходный код]

Получить объект виртуального сервера по его ID

Параметры:
  • id (str) – Идентификатор виртуального сервера

  • token (str) – Токен для доступа к API. Если не передан, будет использована переменная окружения ESU_API_TOKEN

Результат:

Возвращает объект виртуального сервера esu.Vm

Тип результата:

object

create()[исходный код]

Создать объект

Исключение:

ObjectAlreadyHasId – Если производится попытка создать объект, который уже существует

save()[исходный код]

Сохранить изменения

destroy()[исходный код]

Удалить объект

Исключение:

ObjectHasNoId – Когда производится попытка удалить несуществующий объект

add_disk(disk)[исходный код]

Создать и присоединить к виртуальному серверу новый диск

Параметры:

disk (object) – Объект диска esu.Disk

attach_disk(disk)[исходный код]

Присоединить существующий во ВЦОДе диск к виртуальному серверу

Параметры:

disk (object) – Объект диска esu.Disk

detach_disk(disk)[исходный код]

Отсоединить диск от виртуального сервера

Параметры:

disk (object) – Объект диска esu.Disk

add_port(port)[исходный код]

Добавить подключение

Параметры:

port (object) – Новый объект esu.Port

remove_port(port)[исходный код]

Удалить подключение

Параметры:

port (object) – Существующий объект esu.Port

power_on()[исходный код]

Включить виртуальный сервер

power_off()[исходный код]

Выключить виртуальный сервер

reboot()[исходный код]

Перезагрузить виртуальный сервер

get_vnc_url()[исходный код]

Получить ссылку на VNC для открытия консоли управления сервером

Результат:

Адрес VNC консоли

Тип результата:

str

revert(snapshot)[исходный код]

Восстановить сервер из снапшота

Параметры:

snapshot (object) – объект снапшота esu.Snapshot

mount_iso(image)[исходный код]

Примонтировать iso к серверу как CD-ROM. После перезагрузки сервера он будет загружен с этого диска если он загрузочный

Параметры:

image (object) – объект образа esu.Image

unmount_iso()[исходный код]

Отмонтировать iso от сервера После перезагрузки сервера он будет загружен с основного диска

Примеры использования

Создать виртуальный сервер на базе ОС Ubuntu 18:

from requests import HTTPError
from esu import Manager, VmMetadata, Port, Disk, Vm

vdc = Manager().get_all_vdcs()[0]  # Первый доступный пользователю ВЦОД
network = next(n for n in vdc.get_networks() if n.is_default)  # Сеть по умолчанию
template = next(v for v in vdc.get_templates() if 'Ubuntu 18' in v.name)  # Шаблон ОС
storage_profile = vdc.get_storage_profiles()[0]  # Первый доступный профиль хранения
firewall_template = next(f for f in vdc.get_firewall_templates() if f.name == 'По-умолчанию')  # Разрешить исходящие подключения
password = 'nw9fH4n$11'  # Пароль для виртуального сервера

metadata = []
for field in template.get_fields():
    value = field.default
    if field.system_alias == 'password':
        value = password
    metadata.append(VmMetadata(field=field, value=value))

port = Port(network=network, fw_templates=[firewall_template])
disk = Disk(name='Системный диск', size=15, storage_profile=storage_profile)

vm = Vm(name='Новый сервер', cpu=2, ram=2, vdc=vdc, template=template,
        metadata=metadata, ports=[port], disks=[disk])

try:
    vm.create()
except HTTPError as ex:
    api_answer = ex.response.json()
    print(f'Error has happend: {api_answer}')

Назначить случайный плавающий IP адрес на существующий виртуальный сервер:

from esu import Vm, Port

vm = Vm.get_object('954fd467-fd9a-4ce7-b4df-1e81e557bce9')
vm.floating = Port()
vm.save()