Improve Agent deploy driver validation

1) Check that 'image_source' is specified.
2) More informative message about missing params.

Change-Id: Ia002c4df71d5e39fbd6ef9a594c4fa67c5ae2f94
This commit is contained in:
Yuriy Zveryanskyy 2014-12-15 12:04:46 +02:00
parent d98ce6c38f
commit 9b4aab1693
2 changed files with 29 additions and 13 deletions

View File

@ -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):

View File

@ -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')