From 3c10b567ce07e9633b53acf6e51d182ce40c14ab Mon Sep 17 00:00:00 2001 From: Yuriy Zveryanskyy Date: Tue, 24 Dec 2013 14:49:28 +0200 Subject: [PATCH] Disallow new provision for nodes in maintenance New deploy operation will not allowed for nodes in 'maintenance' mode. Partial-Bug: #1260099 Change-Id: Idaf8c3d70bd78b2c95bbdcff734e235eb8063d91 --- ironic/conductor/manager.py | 5 +++++ ironic/tests/conductor/test_manager.py | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index c7145405a0..71fe151d96 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 e346b25c8f..e687935183 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',