import netaddr
from oslo.config import cfg
import sqlalchemy as sa
+from sqlalchemy import orm
from quantum.common import utils
+from quantum.db import db_base_plugin_v2
from quantum.db import l3_db
from quantum.db import model_base
from quantum.db import models_v2
from quantum.extensions import extraroute
+from quantum.extensions import l3
from quantum.openstack.common import log as logging
ondelete="CASCADE"),
primary_key=True)
+ router = orm.relationship(l3_db.Router,
+ backref=orm.backref("route_list",
+ lazy='joined',
+ cascade='delete'))
+
class ExtraRoute_db_mixin(l3_db.L3_NAT_db_mixin):
"""Mixin class to support extra route configuration on router."""
+
+ def _extend_router_dict_extraroute(self, router_res, router_db):
+ router_res['routes'] = (ExtraRoute_db_mixin.
+ _make_extra_route_list(
+ router_db['route_list']
+ ))
+
+ db_base_plugin_v2.QuantumDbPluginV2.register_dict_extend_funcs(
+ l3.ROUTERS, [_extend_router_dict_extraroute])
+
def update_router(self, context, id, router):
r = router['router']
with context.session.begin(subtransactions=True):
destination=route['destination'],
nexthop=route['nexthop']).delete()
- def _make_extra_route_list(self, extra_routes):
+ @staticmethod
+ def _make_extra_route_list(extra_routes):
return [{'destination': route['destination'],
'nexthop': route['nexthop']}
for route in extra_routes]
with context.session.begin(subtransactions=True):
router = super(ExtraRoute_db_mixin, self).get_router(
context, id, fields)
- router['routes'] = self._get_extra_routes_by_router_id(
- context, id)
return router
def get_routers(self, context, filters=None, fields=None,
routers = super(ExtraRoute_db_mixin, self).get_routers(
context, filters, fields, sorts=sorts, limit=limit,
marker=marker, page_reverse=page_reverse)
- for router in routers:
- router['routes'] = self._get_extra_routes_by_router_id(
- context, router['id'])
return routers
def _confirm_router_interface_not_in_use(self, context, router_id,
raise l3.RouterNotFound(router_id=id)
return router
- def _make_router_dict(self, router, fields=None):
+ def _make_router_dict(self, router, fields=None,
+ process_extensions=True):
res = {'id': router['id'],
'name': router['name'],
'tenant_id': router['tenant_id'],
if router['gw_port_id']:
nw_id = router.gw_port['network_id']
res['external_gateway_info'] = {'network_id': nw_id}
+ if process_extensions:
+ for func in self._dict_extend_functions.get(l3.ROUTERS, []):
+ func(self, res, router)
return self._fields(res, fields)
def create_router(self, context, router):