diff --git a/etc/octavia.conf b/etc/octavia.conf index cfc3dc9c30..dbdc61b014 100644 --- a/etc/octavia.conf +++ b/etc/octavia.conf @@ -6,6 +6,10 @@ # bind_host = 0.0.0.0 # bind_port = 9876 # api_handler = simulated_handler +# +# Plugin options are hot_plug_plugin (Hot-pluggable controller plugin) +# +# octavia_plugins = hot_plug_plugin # nova_region_name = # diff --git a/octavia/common/config.py b/octavia/common/config.py index 6228b2697b..d2efdff68b 100644 --- a/octavia/common/config.py +++ b/octavia/common/config.py @@ -75,6 +75,9 @@ core_opts = [ cfg.StrOpt('nova_region_name', help=_('Name of nova region to use. Useful if keystone manages' ' more than one region.')), + cfg.StrOpt('octavia_plugins', + default='hot_plug_plugin', + help=_('Name of the controller plugin to use')) ] networking_opts = [ @@ -183,7 +186,6 @@ controller_worker_opts = [ cfg.StrOpt('cert_generator', default='local_cert_generator', help=_('Name of the cert generator to use')) - ] task_flow_opts = [ diff --git a/octavia/controller/queue/endpoint.py b/octavia/controller/queue/endpoint.py index 3f68fcfb60..38b9afbbb8 100644 --- a/octavia/controller/queue/endpoint.py +++ b/octavia/controller/queue/endpoint.py @@ -12,13 +12,16 @@ # License for the specific language governing permissions and limitations # under the License. +from oslo_config import cfg from oslo_log import log as logging import oslo_messaging as messaging +from stevedore import driver as stevedore_driver from octavia.common import constants -from octavia.controller.worker import controller_worker from octavia.i18n import _LI +CONF = cfg.CONF + LOG = logging.getLogger(__name__) @@ -31,7 +34,11 @@ class Endpoint(object): version='1.0') def __init__(self): - self.worker = controller_worker.ControllerWorker() + self.worker = stevedore_driver.DriverManager( + namespace='octavia.plugins', + name=CONF.octavia_plugins, + invoke_on_load=True + ).driver def create_load_balancer(self, context, load_balancer_id): LOG.info(_LI('Creating load balancer \'%s\'...') % load_balancer_id) diff --git a/octavia/tests/unit/controller/queue/test_endpoint.py b/octavia/tests/unit/controller/queue/test_endpoint.py index 602fc2d092..f04d009105 100644 --- a/octavia/tests/unit/controller/queue/test_endpoint.py +++ b/octavia/tests/unit/controller/queue/test_endpoint.py @@ -12,6 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. +from oslo_config import cfg import six from octavia.controller.queue import endpoint @@ -29,20 +30,19 @@ class TestEndpoint(base.TestCase): def setUp(self): super(TestEndpoint, self).setUp() + cfg.CONF.import_group('controller_worker', 'octavia.common.config') + cfg.CONF.set_override('octavia_plugins', 'hot_plug_plugin') + mock_class = mock.create_autospec(controller_worker.ControllerWorker) self.worker_patcher = mock.patch('octavia.controller.queue.endpoint.' - 'controller_worker') + 'stevedore_driver') self.worker_patcher.start().ControllerWorker = mock_class + self.ep = endpoint.Endpoint() self.context = {} self.resource_updates = {} self.resource_id = 1234 - def reset_patches(): - self.worker_patcher.stop() - - self.addCleanup(reset_patches) - def test_create_load_balancer(self): self.ep.create_load_balancer(self.context, self.resource_id) self.ep.worker.create_load_balancer.assert_called_once_with( diff --git a/setup.cfg b/setup.cfg index 8e21303dfc..456c780cc7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -55,10 +55,12 @@ octavia.compute.drivers = octavia.network.drivers = network_noop_driver = octavia.network.drivers.noop_driver.driver:NoopNetworkDriver allowed_address_pairs_driver = octavia.network.drivers.neutron.allowed_address_pairs:AllowedAddressPairsDriver + containers_driver = octavia.network.drivers.neutron.containers:ContainersDriver octavia.cert_generator = local_cert_generator = octavia.certificates.generator.local:LocalCertGenerator barbican_cert_generator = octavia.certificates.generator.barbican:BarbicanCertGenerator octavia.cert_manager = local_cert_manager = octavia.certificates.manager.local:LocalCertManager barbican_cert_manager = octavia.certificates.manager.barbican:BarbicanCertManager - +octavia.plugins = + hot_plug_plugin = octavia.controller.worker.controller_worker:ControllerWorker