AgentRAID: Account for empty results in post-configuration checks

Currently we only raise if no results are returned at all. Due to a bug
apply_configuration is currently returning None, resulting in a TypeError
later on. This changes help catching such situations earlier.

Also provides a clearer error message that mentions RAID rather then
just generic "deploying" or "cleaning".

Change-Id: I5e047b6b0a00043594a93e87e09ee60b9342dbfa
This commit is contained in:
Dmitry Tantsur 2020-07-29 10:18:47 +02:00
parent ebae6a40f1
commit 89275bd503
2 changed files with 16 additions and 5 deletions

View File

@ -736,17 +736,17 @@ class AgentRAID(base.RAIDInterface):
"""
try:
if task.node.provision_state == states.DEPLOYWAIT:
operation = "deploying"
result = command['command_result']['deploy_result']
else:
operation = "cleaning"
result = command['command_result']['clean_result']
except KeyError:
result = None
if not result:
raise exception.IronicException(
_("Agent ramdisk didn't return a proper command result while "
"%(operation)s %(node)s. It returned '%(result)s' after "
"command execution.") % {'operation': operation,
'node': task.node.uuid,
"building RAID on %(node)s. It returned '%(result)s' after "
"command execution.") % {'node': task.node.uuid,
'result': command})
raid.update_raid_info(task.node, result)

View File

@ -1818,6 +1818,17 @@ class AgentRAIDTestCase(db_base.DbTestCase):
task, command)
self.assertFalse(update_raid_info_mock.called)
@mock.patch.object(raid, 'update_raid_info', autospec=True)
def test__create_configuration_final_bad_command_result2(
self, update_raid_info_mock):
command = {'command_result': {'deploy_result': None}}
with task_manager.acquire(self.context, self.node.uuid) as task:
raid_mgmt = agent.AgentRAID
self.assertRaises(exception.IronicException,
raid_mgmt._create_configuration_final,
task, command)
self.assertFalse(update_raid_info_mock.called)
@mock.patch.object(agent_base, 'execute_step', autospec=True)
def test_delete_configuration(self, execute_mock):
execute_mock.return_value = states.CLEANING