diff options
author | Yuriy Zveryanskyy <yzveryanskyy@mirantis.com> | 2013-12-24 14:49:28 +0200 |
---|---|---|
committer | Roman Prykhodchenko <me@romcheg.me> | 2014-01-15 00:39:16 +0200 |
commit | 3c10b567ce07e9633b53acf6e51d182ce40c14ab (patch) | |
tree | b60ce4f7df922c26153cfe3b00a1589ce9aead0b | |
parent | 9bc5f92fb88169acdac48b367e9ea71930cfaf38 (diff) | |
download | ironic-3c10b567ce07e9633b53acf6e51d182ce40c14ab.tar.gz |
Disallow new provision for nodes in maintenance
New deploy operation will not allowed for nodes in
'maintenance' mode.
Partial-Bug: #1260099
Change-Id: Idaf8c3d70bd78b2c95bbdcff734e235eb8063d91
-rw-r--r-- | ironic/conductor/manager.py | 5 | ||||
-rw-r--r-- | ironic/tests/conductor/test_manager.py | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index c7145405a..71fe151d9 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -255,6 +255,11 @@ class ConductorManager(service.PeriodicService): "state is already %(state)s.") % {'node': node_id, 'state': node['provision_state']}) + if node.maintenance: + raise exception.InstanceDeployFailure(_( + "RPC do_node_deploy called for %s, but node is in " + "maintenance mode.") % node_id) + try: task.driver.deploy.validate(node) except Exception as e: diff --git a/ironic/tests/conductor/test_manager.py b/ironic/tests/conductor/test_manager.py index e346b25c8..e68793518 100644 --- a/ironic/tests/conductor/test_manager.py +++ b/ironic/tests/conductor/test_manager.py @@ -307,6 +307,13 @@ class ManagerTestCase(base.DbTestCase): self.service.do_node_deploy, self.context, node['uuid']) + def test_do_node_deploy_maintenance(self): + ndict = utils.get_test_node(driver='fake', maintenance=True) + node = self.dbapi.create_node(ndict) + self.assertRaises(exception.InstanceDeployFailure, + self.service.do_node_deploy, + self.context, node['uuid']) + def test_do_node_deploy_driver_raises_error(self): # test when driver.deploy.deploy raises an exception ndict = utils.get_test_node(driver='fake', |