Merge "Revert "Software raid: mbr/gpt partition table alternative""
This commit is contained in:
commit
af1e32ba41
@ -1443,19 +1443,6 @@ class GenericHardwareManager(HardwareManager):
|
|||||||
LOG.debug("No target_raid_config found")
|
LOG.debug("No target_raid_config found")
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
partition_table_type = 'msdos'
|
|
||||||
|
|
||||||
# If explicitely specified by caller let's follow orders
|
|
||||||
instance_info = node.get('instance_info', {})
|
|
||||||
capabilities = instance_info.get('capabilities', {})
|
|
||||||
specified_table_type = capabilities.get('disk_label')
|
|
||||||
if specified_table_type:
|
|
||||||
if specified_table_type not in ['msdos', 'gpt']:
|
|
||||||
msg = ("Invalid disk_label capability. "
|
|
||||||
"Should either be 'msdos' or 'gpt'")
|
|
||||||
raise errors.SoftwareRAIDError(msg)
|
|
||||||
partition_table_type = specified_table_type
|
|
||||||
|
|
||||||
# No 'software' controller: do nothing. If 'controller' is
|
# No 'software' controller: do nothing. If 'controller' is
|
||||||
# set to 'software' on only one of the drives, the validation
|
# set to 'software' on only one of the drives, the validation
|
||||||
# code will catch it.
|
# code will catch it.
|
||||||
@ -1488,14 +1475,15 @@ class GenericHardwareManager(HardwareManager):
|
|||||||
partitions)
|
partitions)
|
||||||
raise errors.SoftwareRAIDError(msg)
|
raise errors.SoftwareRAIDError(msg)
|
||||||
|
|
||||||
# Create an MBR or GPT partition table on each disk.
|
|
||||||
parted_start_dict = {}
|
parted_start_dict = {}
|
||||||
|
# Create an MBR partition table on each disk.
|
||||||
|
# TODO(arne_wiebalck): Check if GPT would work as well.
|
||||||
for block_device in block_devices:
|
for block_device in block_devices:
|
||||||
LOG.info("Creating partition table on {}".format(
|
LOG.info("Creating partition table on {}".format(
|
||||||
block_device.name))
|
block_device.name))
|
||||||
try:
|
try:
|
||||||
utils.execute('parted', block_device.name, '-s', '--',
|
utils.execute('parted', block_device.name, '-s', '--',
|
||||||
'mklabel', partition_table_type)
|
'mklabel', 'msdos')
|
||||||
except processutils.ProcessExecutionError as e:
|
except processutils.ProcessExecutionError as e:
|
||||||
msg = "Failed to create partition table on {}: {}".format(
|
msg = "Failed to create partition table on {}: {}".format(
|
||||||
block_device.name, e)
|
block_device.name, e)
|
||||||
|
@ -2710,29 +2710,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
|
|||||||
|
|
||||||
@mock.patch.object(utils, 'execute', autospec=True)
|
@mock.patch.object(utils, 'execute', autospec=True)
|
||||||
def test_create_configuration(self, mocked_execute):
|
def test_create_configuration(self, mocked_execute):
|
||||||
self._test_create_configuration(mocked_execute, 'msdos')
|
node = self.node
|
||||||
|
|
||||||
@mock.patch.object(utils, 'execute', autospec=True)
|
|
||||||
def test_create_configuration_disk_label_specified(
|
|
||||||
self, mocked_execute):
|
|
||||||
|
|
||||||
# Override gpt default choice with msdos
|
|
||||||
node = {
|
|
||||||
'uuid': 'hello',
|
|
||||||
'instance_info': {
|
|
||||||
'capabilities': {
|
|
||||||
'disk_label': 'gpt'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self._test_create_configuration(mocked_execute, 'msdos')
|
|
||||||
self._test_create_configuration(mocked_execute, 'gpt', node)
|
|
||||||
|
|
||||||
def _test_create_configuration(self, mocked_execute,
|
|
||||||
expected_partition_table_type, node=None):
|
|
||||||
if node is None:
|
|
||||||
node = self.node
|
|
||||||
|
|
||||||
raid_config = {
|
raid_config = {
|
||||||
"logical_disks": [
|
"logical_disks": [
|
||||||
{
|
{
|
||||||
@ -2769,10 +2747,10 @@ class TestGenericHardwareManager(base.IronicAgentTest):
|
|||||||
|
|
||||||
mocked_execute.assert_has_calls([
|
mocked_execute.assert_has_calls([
|
||||||
mock.call('parted', '/dev/sda', '-s', '--', 'mklabel',
|
mock.call('parted', '/dev/sda', '-s', '--', 'mklabel',
|
||||||
expected_partition_table_type),
|
'msdos'),
|
||||||
mock.call('sgdisk', '-F', '/dev/sda'),
|
mock.call('sgdisk', '-F', '/dev/sda'),
|
||||||
mock.call('parted', '/dev/sdb', '-s', '--', 'mklabel',
|
mock.call('parted', '/dev/sdb', '-s', '--', 'mklabel',
|
||||||
expected_partition_table_type),
|
'msdos'),
|
||||||
mock.call('sgdisk', '-F', '/dev/sdb'),
|
mock.call('sgdisk', '-F', '/dev/sdb'),
|
||||||
mock.call('parted', '/dev/sda', '-s', '-a', 'optimal', '--',
|
mock.call('parted', '/dev/sda', '-s', '-a', 'optimal', '--',
|
||||||
'mkpart', 'primary', '42s', '10GiB'),
|
'mkpart', 'primary', '42s', '10GiB'),
|
||||||
@ -3031,41 +3009,6 @@ class TestGenericHardwareManager(base.IronicAgentTest):
|
|||||||
self.hardware.create_configuration,
|
self.hardware.create_configuration,
|
||||||
self.node, [])
|
self.node, [])
|
||||||
|
|
||||||
@mock.patch.object(utils, 'execute', autospec=True)
|
|
||||||
def test_create_configuration_bad_disk_label(self, mocked_execute):
|
|
||||||
|
|
||||||
# Override gpt default choice with msdos
|
|
||||||
node = {
|
|
||||||
'uuid': 'hello',
|
|
||||||
'instance_info': {
|
|
||||||
'capabilities': {
|
|
||||||
'disk_label': 'invalid'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# pass a sensible target_raid_config
|
|
||||||
raid_config = {
|
|
||||||
"logical_disks": [
|
|
||||||
{
|
|
||||||
"size_gb": "100",
|
|
||||||
"raid_level": "1",
|
|
||||||
"controller": "software",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size_gb": "MAX",
|
|
||||||
"raid_level": "0",
|
|
||||||
"controller": "software",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
||||||
node['target_raid_config'] = raid_config
|
|
||||||
|
|
||||||
error_regex = \
|
|
||||||
"Invalid disk_label capability. Should either be 'msdos' or 'gpt'"
|
|
||||||
self.assertRaisesRegex(errors.SoftwareRAIDError, error_regex,
|
|
||||||
self.hardware.create_configuration,
|
|
||||||
node, [])
|
|
||||||
|
|
||||||
def test_create_configuration_empty_target_raid_config(self):
|
def test_create_configuration_empty_target_raid_config(self):
|
||||||
self.node['target_raid_config'] = {}
|
self.node['target_raid_config'] = {}
|
||||||
result = self.hardware.create_configuration(self.node, [])
|
result = self.hardware.create_configuration(self.node, [])
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
features:
|
|
||||||
- Adds the ability to specify the partition table type when creating RAID.
|
|
||||||
When not specified, the type is set to ``msdos`` (MBR).
|
|
Loading…
x
Reference in New Issue
Block a user