Merge "Fix get_boot_option logic for software raid"
This commit is contained in:
commit
53940f65f4
|
@ -857,10 +857,31 @@ def get_boot_option(node):
|
|||
:returns: A string representing the boot option type. Defaults to
|
||||
'netboot'.
|
||||
"""
|
||||
|
||||
# NOTE(TheJulia): Software raid always implies local deployment
|
||||
if is_software_raid(node):
|
||||
return 'local'
|
||||
capabilities = utils.parse_instance_info_capabilities(node)
|
||||
return capabilities.get('boot_option', get_default_boot_option()).lower()
|
||||
|
||||
|
||||
def is_software_raid(node):
|
||||
"""Determine if software raid is in use for the deployment.
|
||||
|
||||
:param node: A single Node.
|
||||
:returns: A boolean value of True when software raid is in use,
|
||||
otherwise False
|
||||
"""
|
||||
target_raid_config = node.target_raid_config
|
||||
logical_disks = target_raid_config.get('logical_disks', [])
|
||||
software_raid = False
|
||||
for logical_disk in logical_disks:
|
||||
if logical_disk.get('controller') == 'software':
|
||||
software_raid = True
|
||||
break
|
||||
return software_raid
|
||||
|
||||
|
||||
def build_agent_options(node):
|
||||
"""Build the options to be passed to the agent ramdisk.
|
||||
|
||||
|
|
|
@ -1255,6 +1255,31 @@ class OtherFunctionTestCase(db_base.DbTestCase):
|
|||
result = utils.get_boot_option(self.node)
|
||||
self.assertEqual("netboot", result)
|
||||
|
||||
@mock.patch.object(utils, 'is_software_raid', autospec=True)
|
||||
def test_get_boot_option_software_raid(self, mock_is_software_raid):
|
||||
mock_is_software_raid.return_value = True
|
||||
cfg.CONF.set_override('default_boot_option', 'netboot', 'deploy')
|
||||
result = utils.get_boot_option(self.node)
|
||||
self.assertEqual("local", result)
|
||||
|
||||
def test_is_software_raid(self):
|
||||
self.node.target_raid_config = {
|
||||
"logical_disks": [
|
||||
{
|
||||
"size_gb": 100,
|
||||
"raid_level": "1",
|
||||
"controller": "software",
|
||||
}
|
||||
]
|
||||
}
|
||||
result = utils.is_software_raid(self.node)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_is_software_raid_false(self):
|
||||
self.node.target_raid_config = {}
|
||||
result = utils.is_software_raid(self.node)
|
||||
self.assertFalse(result)
|
||||
|
||||
@mock.patch.object(image_cache, 'clean_up_caches', autospec=True)
|
||||
def test_fetch_images(self, mock_clean_up_caches):
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixes a minor issue with ``get_boot_option`` logic that did not account
|
||||
for Software RAID. This can erroniously cause the deployment to take the
|
||||
the incorrect deployment path and attempt to install a boot loader.
|
Loading…
Reference in New Issue