From 9b4aab1693dc82da3d0072360aee1fcedc0a78e0 Mon Sep 17 00:00:00 2001 From: Yuriy Zveryanskyy Date: Mon, 15 Dec 2014 12:04:46 +0200 Subject: [PATCH] Improve Agent deploy driver validation 1) Check that 'image_source' is specified. 2) More informative message about missing params. Change-Id: Ia002c4df71d5e39fbd6ef9a594c4fa67c5ae2f94 --- ironic/drivers/modules/agent.py | 25 +++++++++++++++---------- ironic/tests/drivers/test_agent.py | 17 ++++++++++++++--- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/ironic/drivers/modules/agent.py b/ironic/drivers/modules/agent.py index 6a9b700a59..a40ab6e7bb 100644 --- a/ironic/drivers/modules/agent.py +++ b/ironic/drivers/modules/agent.py @@ -171,19 +171,24 @@ class AgentDeploy(base.DeployInterface): def validate(self, task): """Validate the driver-specific Node deployment info. - This method validates whether the 'instance_info' property of the - supplied node contains the required information for this driver to - deploy images to the node. + This method validates whether the properties of the supplied node + contain the required information for this driver to deploy images to + the node. :param task: a TaskManager instance - :raises: InvalidParameterValue + :raises: MissingParameterValue """ - try: - _get_tftp_image_info(task.node) - except KeyError: - raise exception.InvalidParameterValue(_( - 'Node %s failed to validate deploy image info') % - task.node.uuid) + node = task.node + params = {} + params['driver_info.deploy_kernel'] = node.driver_info.get( + 'deploy_kernel') + params['driver_info.deploy_ramdisk'] = node.driver_info.get( + 'deploy_ramdisk') + params['instance_info.image_source'] = node.instance_info.get( + 'image_source') + error_msg = _('Node %s failed to validate deploy image info. Some ' + 'parameters were missing') % node.uuid + deploy_utils.check_for_missing_params(params, error_msg) @task_manager.require_exclusive_lock def deploy(self, task): diff --git a/ironic/tests/drivers/test_agent.py b/ironic/tests/drivers/test_agent.py index adc6d896b5..f5ddde8643 100644 --- a/ironic/tests/drivers/test_agent.py +++ b/ironic/tests/drivers/test_agent.py @@ -75,13 +75,24 @@ class TestAgentDeploy(db_base.DbTestCase): self.context, self.node['uuid'], shared=False) as task: self.driver.validate(task) - def test_validate_exception(self): + def test_validate_driver_info_missing_params(self): self.node.driver_info = {} self.node.save() with task_manager.acquire( self.context, self.node['uuid'], shared=False) as task: - self.assertRaises(exception.InvalidParameterValue, - self.driver.validate, task) + e = self.assertRaises(exception.MissingParameterValue, + self.driver.validate, task) + self.assertIn('driver_info.deploy_ramdisk', str(e)) + self.assertIn('driver_info.deploy_kernel', str(e)) + + def test_validate_instance_info_missing_params(self): + self.node.instance_info = {} + self.node.save() + with task_manager.acquire( + self.context, self.node['uuid'], shared=False) as task: + e = self.assertRaises(exception.MissingParameterValue, + self.driver.validate, task) + self.assertIn('instance_info.image_source', str(e)) @mock.patch.object(dhcp_factory.DHCPFactory, 'update_dhcp') @mock.patch('ironic.conductor.utils.node_set_boot_device')