from esu.base import BaseAPI, Field, ObjectAlreadyHasId, ObjectHasNoId
[документация]class RouterRoute(BaseAPI):
"""
Args:
id (str): Идентификатор маршрута
router (object): Объект класса :class:`esu.Router`. Роутер, к
которому относится данное правило
destination (str): CIDR сети в которую будет маршрутизирован трафик
nexthop (str): Адрес шлюза - роутера в сети из которой будет
осуществляться маршрутизация, подключенного к исходной
сети и к сети в которую будет маршрутизироваться трафик
token (str): Токен для доступа к API. Если не передан, будет
использована переменная окружения **ESU_API_TOKEN**
.. note:: Поля ``destination``, ``nexthop``, необходимы для создания.
"""
class Meta:
id = Field()
router = Field('esu.Router')
nexthop = Field()
destination = Field()
[документация] @classmethod
def get_object(cls, router, route_id, token=None):
"""
Получить объект маршрута на роутере по его ID
Args:
id (str): Идентификатор маршрута на роутере
token (str): Токен для доступа к API. Если не передан, будет
использована переменная окружения **ESU_API_TOKEN**
Returns:
object: Возвращает объект маршрута на роутере
:class:`esu.RouterRoute`
"""
route = cls(token=token, id=route_id, router=router)
route._get_object('v1/router/{}/route'.format(route.router.id),
route.id)
return route
[документация] 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):
route = {"nexthop": self.nexthop, "destination": self.destination}
self._commit_object('v1/router/{}/route'.format(self.router.id),
**route)
[документация] def destroy(self):
"""
Удалить объект
Raises:
ObjectHasNoId: Когда производится попытка удалить несуществующий
объект
"""
if self.id is None:
raise ObjectHasNoId
self._destroy_object('v1/router/{}/route'.format(self.router.id),
self.id)
self.id = None