Исходный код esu.vdc

from esu.backup import Backup
from esu.base import BaseAPI, Field, ObjectAlreadyHasId, ObjectHasNoId
from esu.disk import Disk
from esu.firewall_template import FirewallTemplate
from esu.image import Image
from esu.kubernetes_template import KubernetesTemplate
from esu.port import Port
from esu.storage_profile import StorageProfile
from esu.template import Template
from esu.vm import Vm
from esu.vm_metadata import VmMetadata


[документация]class Vdc(BaseAPI): """ Args: id (str): Идентификатор ВЦОД name (str): Имя ВЦОД hypervisor (object): Объект класса :class:`esu.Hypervisor` project (object): Объект класса :class:`esu.Project`. Проект, к которому относится данный ВЦОД token (str): Токен для доступа к API. Если не передан, будет использована переменная окружения **ESU_API_TOKEN** .. note:: Поля ``name``, ``hypervisor`` и ``project`` необходимы для создания. Поле ``name`` может быть изменено для существующего объекта. """ class Meta: id = Field() name = Field() hypervisor = Field('esu.Hypervisor') project = Field('esu.Project')
[документация] @classmethod def get_object(cls, id, token=None): """ Получить объект ВЦОД по его ID Args: id (str): Идентификатор ВЦОД token (str): Токен для доступа к API. Если не передан, будет использована переменная окружения **ESU_API_TOKEN** Returns: object: Возвращает объект ВЦОД :class:`esu.Vdc` """ vdc = cls(token=token, id=id) vdc._get_object('v1/vdc', vdc.id) return vdc
[документация] def create(self): """ Создать объект Raises: ObjectAlreadyHasId: Если производится попытка создать объект, который уже существует """ if self.id is not None: raise ObjectAlreadyHasId self._commit()
[документация] def save(self): """ Сохранить изменения Raises: ObjectHasNoId: Если производится попытка сохранить несуществующий объект """ if self.id is None: raise ObjectHasNoId self._commit()
def _commit(self): self._commit_object('v1/vdc', project=self.project.id, name=self.name, hypervisor=self.hypervisor.id)
[документация] def destroy(self): """ Удалить объект Raises: ObjectHasNoId: Когда производится попытка удалить несуществующий объект """ if self.id is None: raise ObjectHasNoId self._destroy_object('v1/vdc', self.id) self.id = None
[документация] def get_vms(self): """ Получить список виртуальных машин, доступных в рамках данного ВЦОД. Returns: list: Список объектов :class:`esu.Vm` """ if self.id is None: raise ObjectHasNoId return self._get_list('v1/vm', Vm, vdc=self.id)
[документация] def get_templates(self): """ Получить список шаблонов ОС для создания виртуальных машин, доступных в данном ВЦОДе. Returns: list: Список объектов :class:`esu.Template` """ if self.id is None: raise ObjectHasNoId return self._get_list('v1/template', Template, with_pages=False, vdc=self.id)
[документация] def get_storage_profiles(self): """ Получить список профилей хранения, которые используются при добавлении дисков, доступных в данном ВЦОДе. Returns: list: Список объектов :class:`esu.StorageProfile` """ if self.id is None: raise ObjectHasNoId return self._get_list('v1/storage_profile', StorageProfile, vdc=self.id)
[документация] def get_firewall_templates(self): """ Получить список шаблонов брандмауэра, доступных в данном ВЦОДе. Returns: list: Список объектов :class:`esu.FirewallTemplate` """ if self.id is None: raise ObjectHasNoId return self._get_list('v1/firewall', FirewallTemplate, vdc=self.id)
[документация] def get_networks(self): """ Получить список сетей, которые существуют в рамках данного ВЦОД. Returns: list: Список объектов :class:`esu.Network` """ return self._get_list('v1/network', 'esu.Network', vdc=self.id)
[документация] def get_routers(self): """ Получить список маршрутизаторов, которые доступны в рамках данного ВЦОД. Returns: list: Список объектов :class:`esu.Router` """ return self._get_list('v1/router', 'esu.Router', vdc=self.id)
[документация] def get_ports(self): """ Получить список подключений, которые существуют в данном ВЦОДе. Returns: list: Список объектов :class:`esu.Port` """ return self._get_list('v1/port', 'esu.Port', vdc=self.id)
[документация] def get_disks(self): """ Получить список дисков, которые существуют в данном ВЦОДе. Returns: list: Список объектов :class:`esu.Disk` """ return self._get_list('v1/disk', 'esu.Disk', vdc=self.id)
[документация] def create_vm(self, name, template, password): # helper """ Быстрый способ создать виртуальный сервер в сети по-умолчанию и с настройками по-умолчанию. Args: name (str): Название нового виртуального сервера template (str): Название шаблона системы password (str): Пароль, который будет установлен на сервер """ # pylint: disable=undefined-loop-variable for template_ in self.get_templates(): if template_.name == template: break else: raise ValueError('Template not found') firewall = next(f for f in self.get_firewall_templates() \ if f.id == '00000000-0000-0000-0000-000000000000') network = next(n for n in self.get_networks() if n.is_default) port = Port(network=network, fw_templates=[firewall]) storage_profile = self.get_storage_profiles()[0] disk = Disk(name='Системный диск', size=template_.min_hdd, storage_profile=storage_profile) metadata = [] for field in template_.get_fields(): value = field.default if field.system_alias == 'password': value = password metadata.append(VmMetadata(field=field, value=value)) vm = Vm(name=name, cpu=template_.min_cpu, ram=template_.min_ram, vdc=self, template=template_, metadata=metadata, ports=[port], disks=[disk], token=self.token) vm.create() return vm
[документация] def get_k8s_templates(self): """ Получить список шаблонов k8s для создания кластеров, доступных в данном ВЦОДе. Returns: list: Список объектов :class:`esu.KubernetesTemplate` """ if self.id is None: raise ObjectHasNoId return self._get_list('v1/kubernetes_template', KubernetesTemplate, vdc=self.id)
[документация] def get_images(self): """ Получить список образов, доступных в данном ВЦОДе. Returns: list: Список объектов :class:`esu.Image` """ if self.id is None: raise ObjectHasNoId return self._get_list('v1/image', Image, vdc=self.id)
[документация] def get_backups(self): """ Получить список задач резервного копирования, доступных в данном ВЦОДе. Returns: list: Список объектов :class:`esu.Backup` """ if self.id is None: raise ObjectHasNoId return self._get_list('v1/backup', Backup, vdc=self.id)