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

from esu.base import BaseAPI, Field, FieldList, ObjectAlreadyHasId, \
    ObjectHasNoId, PortAlreadyConnected


class ConnectedObject(BaseAPI):
    """
    Args:
        id (str): Идентификатор подключённого объекта
        type (object): Тип объекта
        name (object): Имя подключённого объекта
        vdc (str): Объект :class:`esu.Vdc`
    """
    class Meta:
        id = Field(allow_none=True)
        type = Field()
        name = Field()
        vdc = Field('esu.Vdc', allow_none=True)


[документация]class Port(BaseAPI): """ Args: id (str): Идентификатор порта ip_address (str): IP адрес type (str): Тип vdc (object): Объект класса :class:`esu.Vdc`. ВЦОД, к которому относится данный виртуальный сервер fw_templates (list): Включенные шаблоны брандмауэра :class:`esu.FirewallTemplate` network (object): Сеть :class:`esu.Network` .. note:: Поле ``network`` необходимо для создания в качестве подключения к приватной сети ВЦОД. Поля ``ip_address`` и ``fw_templates`` опцональны при создании подключения к приватной сети ВЦОД Поля ``ip_address`` и ``fw_templates`` могут быть изменены для существующего объекта При создании подключения плавающего IP обязательных полей нет """ class Meta: id = Field() ip_address = Field() type = Field() vdc = Field("esu.Vdc", allow_none=True) fw_templates = FieldList('esu.FirewallTemplate', allow_none=True) network = Field('esu.Network') connected = Field(ConnectedObject, allow_none=True) vm = Field('esu.Vm') router = Field('esu.Router', allow_none=True)
[документация] @classmethod def get_object(cls, id, token=None): """ Получить объект порта по его ID Args: id (str): Идентификатор порта token (str): Токен для доступа к API. Если не передан, будет использована переменная окружения **ESU_API_TOKEN** Returns: object: Возвращает объект порта :class:`esu.Port` """ port = cls(token=token, id=id) port._get_object('v1/port', port.id) return port
[документация] def create_fip(self): """ Получить объект порта по его ID Args: id (str): Идентификатор порта token (str): Токен для доступа к API. Если не передан, будет использована переменная окружения **ESU_API_TOKEN** Returns: object: Возвращает объект порта :class:`esu.Port` """ port = {'vdc': self.vdc.id} self._commit_object('v1/port', **port)
[документация] 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): port = { 'ip_address': self.ip_address or '0.0.0.0', 'fw_templates': [o.id for o in self.fw_templates or []] } if self.id is None: port['network'] = self.network.id if self.vm is not None: port['vm'] = self.vm.id elif self.router is not None: port['router'] = self.router.id self._commit_object('v1/port', **port)
[документация] def connect(self): """ Подключить Raises: ObjectHasNoId: Если производится попытка присоединить несуществующий объект PortAlreadyConnected: Если производится попытка присоединить уже присоединенный порт """ if self.id is None: raise ObjectHasNoId if self.connected is not None: raise PortAlreadyConnected if self.vm is not None: port = {'vm': self.vm.id} elif self.router is not None: port = {'router': self.router.id} self._commit_object('v1/port', **port)
[документация] def disconnect(self): """ Отключить порт Raises: ObjectHasNoId: Если производится попытка сохранить несуществующий объект """ if self.id is None: raise ObjectHasNoId self._call('PATCH', 'v1/port/{}/disconnect'.format(self.id)) self._fill() self.connected = None self.vm = None self.router = None
[документация] def destroy(self): """ Удалить объект Raises: ObjectHasNoId: Когда производится попытка удалить несуществующий объект """ if self.id is None: raise ObjectHasNoId self._destroy_object('v1/port', self.id) self.id = None
[документация] def force_destroy(self): """ Удалить объект, даже если он подключен к сущности Raises: ObjectHasNoId: Если производится попытка сохранить несуществующий объект """ if self.id is None: raise ObjectHasNoId self._call('DELETE', 'v1/port/{}/force'.format(self.id)) self.id = None