# License for the specific language governing permissions and limitations
# under the License.
+from oslo_config import cfg
from oslo_log import log
import stevedore
LOG = log.getLogger(__name__)
-class AgentExtensionsManager(stevedore.named.NamedExtensionManager):
- """Manage agent extensions."""
+L2_AGENT_EXT_MANAGER_NAMESPACE = 'neutron.agent.l2.extensions'
+L2_AGENT_EXT_MANAGER_OPTS = [
+ cfg.ListOpt('extensions',
+ default=[],
+ help=_('Extensions list to use')),
+]
+
- def __init__(self):
- # Ordered list of agent extensions, defining
- # the order in which the agent extensions are called.
+def register_opts(conf):
+ conf.register_opts(L2_AGENT_EXT_MANAGER_OPTS, 'agent')
- #TODO(QoS): get extensions from config
- agent_extensions = ('qos', )
- LOG.info(_LI("Configured agent extensions names: %s"),
- agent_extensions)
+class AgentExtensionsManager(stevedore.named.NamedExtensionManager):
+ """Manage agent extensions."""
+ def __init__(self, conf):
super(AgentExtensionsManager, self).__init__(
- 'neutron.agent.l2.extensions', agent_extensions,
+ L2_AGENT_EXT_MANAGER_NAMESPACE, conf.agent.extensions,
invoke_on_load=True, name_order=True)
- LOG.info(_LI("Loaded agent extensions names: %s"), self.names())
+ LOG.info(_LI("Loaded agent extensions: %s"), self.names())
def _call_on_agent_extensions(self, method_name, context, data):
"""Helper method for calling a method across all agent extensions."""
# under the License.
import mock
+from oslo_config import cfg
from neutron.agent.l2 import agent_extensions_manager
from neutron.tests import base
super(TestAgentExtensionsManager, self).setUp()
mock.patch('neutron.agent.l2.extensions.qos_agent.QosAgentExtension',
autospec=True).start()
- self.manager = agent_extensions_manager.AgentExtensionsManager()
+ conf = cfg.CONF
+ agent_extensions_manager.register_opts(conf)
+ cfg.CONF.set_override('extensions', ['qos'], 'agent')
+ self.manager = agent_extensions_manager.AgentExtensionsManager(conf)
def _get_extension(self):
return self.manager.extensions[0].obj
return_value=None):
self.assertFalse(get_dev_fn.called)
- #TODO(QoS) that this mock should go away once we don't hardcode
- #qos extension.
- @mock.patch('neutron.api.rpc.handlers.resources_rpc.'
- 'ResourcesServerRpcApi.get_info', return_value=[])
- def test_treat_devices_added_updated_updates_known_port(
- self, *args):
+ def test_treat_devices_added_updated_updates_known_port(self):
details = mock.MagicMock()
details.__contains__.side_effect = lambda x: True
self.assertTrue(self._mock_treat_devices_added_updated(