Allow specifying target devices for software RAID
This change adds support for the physical_disks RAID parameter in a form of device hints (same as for root device selection). Depends-On: https://review.opendev.org/713209 Change-Id: I9751ab0f86ada41e3b668670dc112d58093b8099 Story: #2006369 Task: #36153
This commit is contained in:
parent
9fd0aa859c
commit
cc1632a82d
@ -143,7 +143,12 @@ are hardware dependent.
|
||||
In order to trigger the setup of a Software RAID via the Ironic Python
|
||||
Agent, the value of this property needs to be set to ``software``.
|
||||
- ``physical_disks`` - A list of physical disks to use as read by the
|
||||
RAID interface. Not supported for software RAID.
|
||||
RAID interface.
|
||||
|
||||
For software RAID ``physical_disks`` is a list of device hints in the same
|
||||
format as used for :ref:`root-device-hints`. The number of provided hints
|
||||
must match the expected number of backing devices (repeat the same hint if
|
||||
necessary).
|
||||
|
||||
.. note::
|
||||
If properties from both "Backing physical disk hints" or
|
||||
@ -260,6 +265,25 @@ HDD:
|
||||
]
|
||||
}
|
||||
|
||||
*Example 6*. Software RAID, limiting backing block devices to exactly two
|
||||
devices with the size exceeding 100 GiB:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"logical_disks": [
|
||||
{
|
||||
"size_gb": "MAX",
|
||||
"raid_level": "0",
|
||||
"controller": "software",
|
||||
"physical_disks": [
|
||||
{"size": "> 100"},
|
||||
{"size": "> 100"}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Current RAID configuration
|
||||
--------------------------
|
||||
After target RAID configuration is applied on the bare metal node, Ironic
|
||||
|
@ -57,8 +57,10 @@
|
||||
"description": "Controller to use for this logical disk. If not specified, the driver will choose a suitable RAID controller on the bare metal node. Optional."
|
||||
},
|
||||
"physical_disks": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"anyOf": [
|
||||
{"type": "array", "items": { "type": "string" }},
|
||||
{"type": "array", "items": { "type": "object" }, "minItems": 2}
|
||||
],
|
||||
"description": "The physical disks to use for this logical disk. If not specified, the driver will choose suitable physical disks to use. Optional."
|
||||
}
|
||||
},
|
||||
|
@ -35,6 +35,11 @@ class ValidateRaidConfigurationTestCase(base.TestCase):
|
||||
raid.validate_configuration(
|
||||
raid_config, raid_config_schema=self.schema)
|
||||
|
||||
def test_validate_configuration_okay_software(self):
|
||||
raid_config = json.loads(raid_constants.RAID_SW_CONFIG_OKAY)
|
||||
raid.validate_configuration(
|
||||
raid_config, raid_config_schema=self.schema)
|
||||
|
||||
def test_validate_configuration_no_logical_disk(self):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
raid.validate_configuration,
|
||||
@ -140,6 +145,13 @@ class ValidateRaidConfigurationTestCase(base.TestCase):
|
||||
raid_config,
|
||||
raid_config_schema=self.schema)
|
||||
|
||||
def test_validate_configuration_too_few_physical_disks(self):
|
||||
raid_config = json.loads(raid_constants.RAID_CONFIG_TOO_FEW_PHY_DISKS)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
raid.validate_configuration,
|
||||
raid_config,
|
||||
raid_config_schema=self.schema)
|
||||
|
||||
def test_validate_configuration_additional_property(self):
|
||||
raid_config = json.loads(raid_constants.RAID_CONFIG_ADDITIONAL_PROP)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
|
@ -36,6 +36,19 @@ RAID_CONFIG_OKAY = '''
|
||||
}
|
||||
'''
|
||||
|
||||
RAID_SW_CONFIG_OKAY = '''
|
||||
{
|
||||
"logical_disks": [
|
||||
{
|
||||
"raid_level": "1",
|
||||
"size_gb": 100,
|
||||
"controller": "software",
|
||||
"physical_disks": [{"size": ">= 50"}, {"name": "/dev/sdc"}]
|
||||
}
|
||||
]
|
||||
}
|
||||
'''
|
||||
|
||||
RAID_CONFIG_NO_LOGICAL_DISKS = '''
|
||||
{
|
||||
"logical_disks": []
|
||||
@ -196,6 +209,19 @@ RAID_CONFIG_INVALID_PHY_DISKS = '''
|
||||
}
|
||||
'''
|
||||
|
||||
RAID_CONFIG_TOO_FEW_PHY_DISKS = '''
|
||||
{
|
||||
"logical_disks": [
|
||||
{
|
||||
"raid_level": "1",
|
||||
"size_gb": 100,
|
||||
"controller": "Smart Array P822 in Slot 2",
|
||||
"physical_disks": [{"size": ">= 50"}]
|
||||
}
|
||||
]
|
||||
}
|
||||
'''
|
||||
|
||||
RAID_CONFIG_ADDITIONAL_PROP = '''
|
||||
{
|
||||
"logical_disks": [
|
||||
|
7
releasenotes/notes/raid-hints-c27097ded0137f7c.yaml
Normal file
7
releasenotes/notes/raid-hints-c27097ded0137f7c.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Target devices for software RAID can now be specified in the form of
|
||||
device hints (same as for root devices) in the ``physical_disks``
|
||||
parameter of a logical disk configuration. This requires
|
||||
ironic-python-agent from the Ussuri release series.
|
Loading…
Reference in New Issue
Block a user