diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index d310b4dc40..aee508ea7d 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -514,12 +514,13 @@ class ConductorManager(periodic_task.PeriodicTasks): node=node.uuid) try: + task.driver.power.validate(task) task.driver.deploy.validate(task) except (exception.InvalidParameterValue, exception.MissingParameterValue) as e: raise exception.InstanceDeployFailure(_( - "RPC do_node_deploy failed to validate deploy info. " - "Error: %(msg)s") % {'msg': e}) + "RPC do_node_deploy failed to validate deploy or " + "power info. Error: %(msg)s") % {'msg': e}) # Save the previous states so we can rollback the node to a # consistent state in case there's no free workers to do the diff --git a/ironic/tests/conductor/test_manager.py b/ironic/tests/conductor/test_manager.py index e224843924..7cdcf559bf 100644 --- a/ironic/tests/conductor/test_manager.py +++ b/ironic/tests/conductor/test_manager.py @@ -663,8 +663,7 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin, # Verify reservation has been cleared. self.assertIsNone(node.reservation) - @mock.patch('ironic.drivers.modules.fake.FakeDeploy.validate') - def test_do_node_deploy_validate_fail(self, mock_validate): + def _test_do_node_deploy_validate_fail(self, mock_validate): # InvalidParameterValue should be re-raised as InstanceDeployFailure mock_validate.side_effect = exception.InvalidParameterValue('error') node = obj_utils.create_test_node(self.context, driver='fake') @@ -678,6 +677,14 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin, # Verify reservation has been cleared. self.assertIsNone(node.reservation) + @mock.patch('ironic.drivers.modules.fake.FakeDeploy.validate') + def test_do_node_deploy_validate_fail(self, mock_validate): + self._test_do_node_deploy_validate_fail(mock_validate) + + @mock.patch('ironic.drivers.modules.fake.FakePower.validate') + def test_do_node_deploy_power_validate_fail(self, mock_validate): + self._test_do_node_deploy_validate_fail(mock_validate) + @mock.patch('ironic.drivers.modules.fake.FakeDeploy.deploy') def test__do_node_deploy_driver_raises_error(self, mock_deploy): # test when driver.deploy.deploy raises an exception