Merge "NVP plugin support for dhcp network scheduling"
This commit is contained in:
commit
cc17b89b3a
@ -27,6 +27,7 @@ from oslo.config import cfg
|
|||||||
from sqlalchemy.orm import exc as sa_exc
|
from sqlalchemy.orm import exc as sa_exc
|
||||||
import webob.exc
|
import webob.exc
|
||||||
|
|
||||||
|
from quantum.api.rpc.agentnotifiers import dhcp_rpc_agent_api
|
||||||
from quantum.api.v2 import attributes as attr
|
from quantum.api.v2 import attributes as attr
|
||||||
from quantum.api.v2 import base
|
from quantum.api.v2 import base
|
||||||
from quantum.common import constants
|
from quantum.common import constants
|
||||||
@ -34,6 +35,8 @@ from quantum import context as q_context
|
|||||||
from quantum.common import exceptions as q_exc
|
from quantum.common import exceptions as q_exc
|
||||||
from quantum.common import rpc as q_rpc
|
from quantum.common import rpc as q_rpc
|
||||||
from quantum.common import topics
|
from quantum.common import topics
|
||||||
|
from quantum.db import agents_db
|
||||||
|
from quantum.db import agentschedulers_db
|
||||||
from quantum.db import api as db
|
from quantum.db import api as db
|
||||||
from quantum.db import db_base_plugin_v2
|
from quantum.db import db_base_plugin_v2
|
||||||
from quantum.db import dhcp_rpc_base
|
from quantum.db import dhcp_rpc_base
|
||||||
@ -47,6 +50,7 @@ from quantum.extensions import l3
|
|||||||
from quantum.extensions import portsecurity as psec
|
from quantum.extensions import portsecurity as psec
|
||||||
from quantum.extensions import providernet as pnet
|
from quantum.extensions import providernet as pnet
|
||||||
from quantum.extensions import securitygroup as ext_sg
|
from quantum.extensions import securitygroup as ext_sg
|
||||||
|
from quantum.openstack.common import importutils
|
||||||
from quantum.openstack.common import rpc
|
from quantum.openstack.common import rpc
|
||||||
from quantum.plugins.nicira.nicira_nvp_plugin.common import (metadata_access
|
from quantum.plugins.nicira.nicira_nvp_plugin.common import (metadata_access
|
||||||
as nvp_meta)
|
as nvp_meta)
|
||||||
@ -201,7 +205,8 @@ class NVPRpcCallbacks(dhcp_rpc_base.DhcpRpcCallbackMixin):
|
|||||||
If a manager would like to set an rpc API version, or support more than
|
If a manager would like to set an rpc API version, or support more than
|
||||||
one class as the target of rpc messages, override this method.
|
one class as the target of rpc messages, override this method.
|
||||||
'''
|
'''
|
||||||
return q_rpc.PluginRpcDispatcher([self])
|
return q_rpc.PluginRpcDispatcher([self,
|
||||||
|
agents_db.AgentExtRpcCallback()])
|
||||||
|
|
||||||
|
|
||||||
class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
|
class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
|
||||||
@ -211,7 +216,9 @@ class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
|
|||||||
networkgw_db.NetworkGatewayMixin,
|
networkgw_db.NetworkGatewayMixin,
|
||||||
qos_db.NVPQoSDbMixin,
|
qos_db.NVPQoSDbMixin,
|
||||||
nvp_sec.NVPSecurityGroups,
|
nvp_sec.NVPSecurityGroups,
|
||||||
nvp_meta.NvpMetadataAccess):
|
nvp_meta.NvpMetadataAccess,
|
||||||
|
agents_db.AgentDbMixin,
|
||||||
|
agentschedulers_db.AgentSchedulerDbMixin):
|
||||||
"""
|
"""
|
||||||
NvpPluginV2 is a Quantum plugin that provides L2 Virtual Network
|
NvpPluginV2 is a Quantum plugin that provides L2 Virtual Network
|
||||||
functionality using NVP.
|
functionality using NVP.
|
||||||
@ -283,6 +290,8 @@ class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
|
|||||||
self._extend_fault_map()
|
self._extend_fault_map()
|
||||||
# Set up RPC interface for DHCP agent
|
# Set up RPC interface for DHCP agent
|
||||||
self.setup_rpc()
|
self.setup_rpc()
|
||||||
|
self.network_scheduler = importutils.import_object(
|
||||||
|
cfg.CONF.network_scheduler_driver)
|
||||||
# TODO(salvatore-orlando): Handle default gateways in multiple clusters
|
# TODO(salvatore-orlando): Handle default gateways in multiple clusters
|
||||||
self._ensure_default_network_gateway()
|
self._ensure_default_network_gateway()
|
||||||
|
|
||||||
@ -878,6 +887,7 @@ class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
|
|||||||
self.dispatcher = NVPRpcCallbacks().create_rpc_dispatcher()
|
self.dispatcher = NVPRpcCallbacks().create_rpc_dispatcher()
|
||||||
self.conn.create_consumer(self.topic, self.dispatcher,
|
self.conn.create_consumer(self.topic, self.dispatcher,
|
||||||
fanout=False)
|
fanout=False)
|
||||||
|
self.dhcp_agent_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
|
||||||
# Consume from all consumers in a thread
|
# Consume from all consumers in a thread
|
||||||
self.conn.consume_in_thread()
|
self.conn.consume_in_thread()
|
||||||
|
|
||||||
@ -946,6 +956,7 @@ class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
|
|||||||
net_binding)
|
net_binding)
|
||||||
self._extend_network_port_security_dict(context, new_net)
|
self._extend_network_port_security_dict(context, new_net)
|
||||||
self._extend_network_dict_l3(context, new_net)
|
self._extend_network_dict_l3(context, new_net)
|
||||||
|
self.schedule_network(context, network['network'], new_net)
|
||||||
return new_net
|
return new_net
|
||||||
|
|
||||||
def delete_network(self, context, id):
|
def delete_network(self, context, id):
|
||||||
@ -1342,6 +1353,8 @@ class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
|
|||||||
self._extend_port_port_security_dict(context, port_data)
|
self._extend_port_port_security_dict(context, port_data)
|
||||||
self._extend_port_dict_security_group(context, port_data)
|
self._extend_port_dict_security_group(context, port_data)
|
||||||
self._extend_port_qos_queue(context, port_data)
|
self._extend_port_qos_queue(context, port_data)
|
||||||
|
net = self.get_network(context, port_data['network_id'])
|
||||||
|
self.schedule_network(context, None, net)
|
||||||
return port_data
|
return port_data
|
||||||
|
|
||||||
def update_port(self, context, id, port):
|
def update_port(self, context, id, port):
|
||||||
@ -2189,3 +2202,15 @@ class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
|
|||||||
return []
|
return []
|
||||||
return super(NvpPluginV2, self).get_qos_queues(context, filters,
|
return super(NvpPluginV2, self).get_qos_queues(context, filters,
|
||||||
fields)
|
fields)
|
||||||
|
|
||||||
|
def update_agent(self, context, id, agent):
|
||||||
|
original_agent = self.get_agent(context, id)
|
||||||
|
result = super(NvpPluginV2, self).update_agent(context, id, agent)
|
||||||
|
agent_data = agent['agent']
|
||||||
|
if ('admin_state_up' in agent_data and
|
||||||
|
original_agent['admin_state_up'] != agent_data['admin_state_up']):
|
||||||
|
if original_agent['agent_type'] == constants.AGENT_TYPE_DHCP:
|
||||||
|
self.dhcp_agent_notifier.agent_updated(
|
||||||
|
context, agent_data['admin_state_up'],
|
||||||
|
original_agent['host'])
|
||||||
|
return result
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
|
|
||||||
|
from quantum import scheduler
|
||||||
|
|
||||||
core_opts = [
|
core_opts = [
|
||||||
cfg.BoolOpt('metadata_dhcp_host_route', default=False),
|
cfg.BoolOpt('metadata_dhcp_host_route', default=False),
|
||||||
]
|
]
|
||||||
@ -74,6 +76,7 @@ cluster_opts = [
|
|||||||
# Register the configuration options
|
# Register the configuration options
|
||||||
cfg.CONF.register_opts(core_opts)
|
cfg.CONF.register_opts(core_opts)
|
||||||
cfg.CONF.register_opts(nvp_opts, "NVP")
|
cfg.CONF.register_opts(nvp_opts, "NVP")
|
||||||
|
cfg.CONF.register_opts(scheduler.AGENTS_SCHEDULER_OPTS)
|
||||||
|
|
||||||
|
|
||||||
class ClusterConfigOptions(cfg.ConfigOpts):
|
class ClusterConfigOptions(cfg.ConfigOpts):
|
||||||
|
Loading…
Reference in New Issue
Block a user