summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamakrishnan G <rameshg87@gmail.com>2014-12-17 05:35:35 +0530
committerThom "tteggel" Leggett <thom@tteggel.org>2015-01-29 18:21:11 +0000
commit5d43d3cca269be4fa0f3a615c9c7400b5c882dc5 (patch)
tree417bc986fc8f7e0ae573c0d8f905504626501b80
parent858dc97ee6cd59d28f2fcd02a29fe0cf527bfce5 (diff)
downloadironic-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.py5
-rw-r--r--ironic/conductor/manager.py7
-rw-r--r--ironic/tests/conductor/test_manager.py9
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):