diff options
author | Ramakrishnan G <rameshg87@gmail.com> | 2014-12-17 05:35:35 +0530 |
---|---|---|
committer | Thom "tteggel" Leggett <thom@tteggel.org> | 2015-01-29 18:21:11 +0000 |
commit | 5d43d3cca269be4fa0f3a615c9c7400b5c882dc5 (patch) | |
tree | 417bc986fc8f7e0ae573c0d8f905504626501b80 | |
parent | 858dc97ee6cd59d28f2fcd02a29fe0cf527bfce5 (diff) | |
download | ironic-5d43d3cca269be4fa0f3a615c9c7400b5c882dc5.tar.gz |
Stop conductor if no drivers were loaded
This change stops ironic-conductor from starting if
no drivers were loaded.
Change-Id: I815a43e999095cdea07c1cd642ddeeb919a2aa00
Closes-Bug: 1404994
(cherry picked from commit fcc1a328dfe937984a449ae4fe5a4c412466a00d)
-rw-r--r-- | ironic/common/exception.py | 5 | ||||
-rw-r--r-- | ironic/conductor/manager.py | 7 | ||||
-rw-r--r-- | ironic/tests/conductor/test_manager.py | 9 |
3 files changed, 21 insertions, 0 deletions
diff --git a/ironic/common/exception.py b/ironic/common/exception.py index dd20761b8..c27774605 100644 --- a/ironic/common/exception.py +++ b/ironic/common/exception.py @@ -243,6 +243,11 @@ class ChassisNotFound(NotFound): message = _("Chassis %(chassis)s could not be found.") +class NoDriversLoaded(IronicException): + message = _("Conductor %(conductor)s cannot be started " + "because no drivers were loaded.") + + class ConductorNotFound(NotFound): message = _("Conductor %(conductor)s could not be found.") diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index 6d017d047..0a2edfccd 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -197,6 +197,13 @@ class ConductorManager(periodic_task.PeriodicTasks): self.drivers = self._driver_factory.names """List of driver names which this conductor supports.""" + if not self.drivers: + msg = _LE("Conductor %s cannot be started because no drivers " + "were loaded. This could be because no drivers were " + "specified in 'enabled_drivers' config option.") + LOG.error(msg, self.host) + raise exception.NoDriversLoaded(conductor=self.host) + try: # Register this conductor with the cluster cdr = self.dbapi.register_conductor({'hostname': self.host, diff --git a/ironic/tests/conductor/test_manager.py b/ironic/tests/conductor/test_manager.py index f1f49ddc0..e13465291 100644 --- a/ironic/tests/conductor/test_manager.py +++ b/ironic/tests/conductor/test_manager.py @@ -218,6 +218,15 @@ class StartStopTestCase(_ServiceSetUpMixin, tests_db_base.DbTestCase): self.assertTrue(mock_df.called) self.assertFalse(mock_reg.called) + @mock.patch.object(manager, 'LOG') + @mock.patch.object(driver_factory, 'DriverFactory') + def test_start_fails_on_no_driver(self, df_mock, log_mock): + driver_factory_mock = mock.MagicMock(names=[]) + df_mock.return_value = driver_factory_mock + self.assertRaises(exception.NoDriversLoaded, + self.service.init_host) + self.assertTrue(log_mock.error.called) + class KeepAliveTestCase(_ServiceSetUpMixin, tests_db_base.DbTestCase): def test__conductor_service_record_keepalive(self): |