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()