summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuriy Zveryanskyy <yzveryanskyy@mirantis.com>2013-12-24 14:49:28 +0200
committerRoman Prykhodchenko <me@romcheg.me>2014-01-15 00:39:16 +0200
commit3c10b567ce07e9633b53acf6e51d182ce40c14ab (patch)
treeb60ce4f7df922c26153cfe3b00a1589ce9aead0b
parent9bc5f92fb88169acdac48b367e9ea71930cfaf38 (diff)
downloadironic-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.py5
-rw-r--r--ironic/tests/conductor/test_manager.py7
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',