router_res[az_ext.AZ_HINTS] = az_ext.convert_az_string_to_list(
router_res[az_ext.AZ_HINTS])
router_res['availability_zones'] = (
- self.get_router_availability_zones(router_db['id']))
+ self.get_router_availability_zones(router_db))
def _process_extra_attr_router_create(
self, context, router_db, router_req):
from neutron import context as n_ctx
from neutron.db import agents_db
from neutron.db import agentschedulers_db
-from neutron.db import api as db_api
from neutron.db import l3_attrs_db
from neutron.db import model_base
from neutron.extensions import l3agentscheduler
router_az.RouterAvailabilityZonePluginBase):
"""Mixin class to add availability_zone supported l3 agent scheduler."""
- def get_router_availability_zones(self, router_id):
- session = db_api.get_session()
- with session.begin():
- query = session.query(agents_db.Agent.availability_zone)
- query = query.join(RouterL3AgentBinding)
- query = query.filter(
- RouterL3AgentBinding.router_id == router_id)
- query = query.group_by(agents_db.Agent.availability_zone)
- return [item[0] for item in query]
+ def get_router_availability_zones(self, router):
+ return list({agent.availability_zone for agent in router.l3_agents})
RouterPort,
backref='router',
lazy='dynamic')
+ l3_agents = orm.relationship('Agent', lazy='joined', viewonly=True,
+ secondary='routerl3agentbindings')
class FloatingIP(model_base.HasStandardAttributes, model_base.BASEV2,
class RouterAvailabilityZonePluginBase(object):
@abc.abstractmethod
- def get_router_availability_zones(self, router_id):
+ def get_router_availability_zones(self, router):
"""Return availability zones which a router belongs to."""