diff --git a/dracclient/client.py b/dracclient/client.py index ec802bc..cde3a58 100644 --- a/dracclient/client.py +++ b/dracclient/client.py @@ -753,6 +753,43 @@ class DRACClient(object): """ return self._raid_mgmt.list_raid_controllers() + def list_raid_settings(self): + """List the RAID configuration settings + + :returns: a dictionary with the RAID settings using InstanceID as the + key. The attributes are either RAIDEnumerableAttribute, + RAIDStringAttribute objects. + :raises: WSManRequestFailure on request failures + :raises: WSManInvalidResponse when receiving invalid response + :raises: DRACOperationFailed on error reported back by the DRAC + interface + """ + return self._raid_mgmt.list_raid_settings() + + def set_raid_settings(self, raid_fqdd, settings): + """Sets the RAID configuration + + It sets the pending_value parameter for each of the attributes + passed in. For the values to be applied, a config job must + be created. + :param raid_fqdd: the FQDD of the RAID setting. + :param settings: a dictionary containing the proposed values, with + each key being the name of attribute and the value + being the proposed value. + :returns: a dictionary containing: + - The is_commit_required key with a boolean value indicating + whether a config job must be created for the values to be + applied. + - The is_reboot_required key with a RebootRequired enumerated + value indicating whether the server must be rebooted for the + values to be applied. Possible values are true and false. + :raises: WSManRequestFailure on request failures + :raises: WSManInvalidResponse when receiving invalid response + :raises: DRACOperationFailed on error reported back by the DRAC + interface + """ + return self._raid_mgmt.set_raid_settings(raid_fqdd, settings) + def list_virtual_disks(self): """Returns the list of RAID arrays diff --git a/dracclient/resources/raid.py b/dracclient/resources/raid.py index c7b3243..606ce8b 100644 --- a/dracclient/resources/raid.py +++ b/dracclient/resources/raid.py @@ -95,12 +95,225 @@ VirtualDisk = collections.namedtuple( 'status', 'raid_status', 'span_depth', 'span_length', 'pending_operations', 'physical_disks']) - NO_FOREIGN_DRIVES = ["STOR058", "STOR018"] +class RAIDAttribute(object): + """Generic RAID attribute class""" + + def __init__(self, name, instance_id, current_value, pending_value, + read_only, fqdd): + """Creates RAIDAttribute object + + :param name: name of the RAID attribute + :param instance_id: InstanceID of the RAID attribute + :param current_value: list containing the current values of the + RAID attribute + :param pending_value: pending value of the RAID attribute, reflecting + an unprocessed change (eg. config job not completed) + :param read_only: indicates whether this RAID attribute can be changed + :param fqdd: Fully Qualified Device Description of the RAID Attribute + """ + + self.name = name + self.instance_id = instance_id + self.current_value = current_value + self.pending_value = pending_value + self.read_only = read_only + self.fqdd = fqdd + + def __eq__(self, other): + return self.__dict__ == other.__dict__ + + @classmethod + def parse(cls, namespace, raid_attr_xml): + """Parses XML and creates RAIDAttribute object""" + + name = utils.get_wsman_resource_attr( + raid_attr_xml, namespace, 'AttributeName') + instance_id = utils.get_wsman_resource_attr( + raid_attr_xml, namespace, 'InstanceID') + current_value = [attr.text for attr in + utils.find_xml(raid_attr_xml, 'CurrentValue', + namespace, find_all=True)] + pending_value = utils.get_wsman_resource_attr( + raid_attr_xml, namespace, 'PendingValue', nullable=True) + read_only = utils.get_wsman_resource_attr( + raid_attr_xml, namespace, 'IsReadOnly') + fqdd = utils.get_wsman_resource_attr( + raid_attr_xml, namespace, 'FQDD') + + return cls(name, instance_id, current_value, pending_value, + (read_only == 'true'), fqdd) + + +class RAIDEnumerableAttribute(RAIDAttribute): + """Enumerable RAID attribute class""" + + namespace = uris.DCIM_RAIDEnumeration + + def __init__(self, name, instance_id, current_value, pending_value, + read_only, fqdd, possible_values): + """Creates RAIDEnumerableAttribute object + + :param name: name of the RAID attribute + :param instance_id: InstanceID of the RAID attribute + :param current_value: list containing the current values of the + RAID attribute + :param pending_value: pending value of the RAID attribute, reflecting + an unprocessed change (eg. config job not completed) + :param read_only: indicates whether this RAID attribute can be changed + :param fqdd: Fully Qualified Device Description of the RAID + Attribute + :param possible_values: list containing the allowed values for the RAID + attribute + """ + super(RAIDEnumerableAttribute, self).__init__(name, instance_id, + current_value, + pending_value, + read_only, fqdd) + + self.possible_values = possible_values + + @classmethod + def parse(cls, raid_attr_xml): + """Parses XML and creates RAIDEnumerableAttribute object""" + + raid_attr = RAIDAttribute.parse(cls.namespace, raid_attr_xml) + possible_values = [attr.text for attr + in utils.find_xml(raid_attr_xml, + 'PossibleValues', + cls.namespace, find_all=True)] + + return cls(raid_attr.name, raid_attr.instance_id, + raid_attr.current_value, raid_attr.pending_value, + raid_attr.read_only, raid_attr.fqdd, possible_values) + + def validate(self, new_value): + """Validates new value""" + + if str(new_value) not in self.possible_values: + msg = ("Attribute '%(attr)s' cannot be set to value '%(val)s'." + " It must be in %(possible_values)r.") % { + 'attr': self.name, + 'val': new_value, + 'possible_values': self.possible_values} + return msg + + +class RAIDStringAttribute(RAIDAttribute): + """String RAID attribute class""" + + namespace = uris.DCIM_RAIDString + + def __init__(self, name, instance_id, current_value, pending_value, + read_only, fqdd, min_length, max_length): + """Creates RAIDStringAttribute object + + :param name: name of the RAID attribute + :param instance_id: InstanceID of the RAID attribute + :param current_value: list containing the current values of the + RAID attribute + :param pending_value: pending value of the RAID attribute, reflecting + an unprocessed change (eg. config job not completed) + :param read_only: indicates whether this RAID attribute can be changed + :param fqdd: Fully Qualified Device Description of the RAID + Attribute + :param min_length: minimum length of the string + :param max_length: maximum length of the string + """ + super(RAIDStringAttribute, self).__init__(name, instance_id, + current_value, pending_value, + read_only, fqdd) + self.min_length = min_length + self.max_length = max_length + + @classmethod + def parse(cls, raid_attr_xml): + """Parses XML and creates RAIDStringAttribute object""" + + raid_attr = RAIDAttribute.parse(cls.namespace, raid_attr_xml) + min_length = int(utils.get_wsman_resource_attr( + raid_attr_xml, cls.namespace, 'MinLength')) + max_length = int(utils.get_wsman_resource_attr( + raid_attr_xml, cls.namespace, 'MaxLength')) + + return cls(raid_attr.name, raid_attr.instance_id, + raid_attr.current_value, raid_attr.pending_value, + raid_attr.read_only, raid_attr.fqdd, + min_length, max_length) + + +class RAIDIntegerAttribute(RAIDAttribute): + """Integer RAID attribute class""" + + namespace = uris.DCIM_RAIDInteger + + def __init__(self, name, instance_id, current_value, pending_value, + read_only, fqdd, lower_bound, upper_bound): + """Creates RAIDIntegerAttribute object + + :param name: name of the RAID attribute + :param instance_id: InstanceID of the RAID attribute + :param current_value: list containing the current value of the + RAID attribute + :param pending_value: pending value of the RAID attribute, + reflecting an unprocessed change + (eg. config job not completed) + :param read_only: indicates whether this RAID attribute can be + changed + :param fqdd: Fully Qualified Device Description of the RAID + Attribute + :param lower_bound: minimum value for the RAID attribute + :param upper_bound: maximum value for the RAID attribute + """ + super(RAIDIntegerAttribute, self).__init__(name, instance_id, + current_value, + pending_value, + read_only, fqdd) + self.lower_bound = lower_bound + self.upper_bound = upper_bound + + @classmethod + def parse(cls, raid_attr_xml): + """Parses XML and creates RAIDIntegerAttribute object""" + + raid_attr = RAIDAttribute.parse(cls.namespace, raid_attr_xml) + lower_bound = utils.get_wsman_resource_attr( + raid_attr_xml, cls.namespace, 'LowerBound') + upper_bound = utils.get_wsman_resource_attr( + raid_attr_xml, cls.namespace, 'UpperBound') + + if raid_attr.current_value: + raid_attr.current_value = int(raid_attr.current_value[0]) + if raid_attr.pending_value: + raid_attr.pending_value = int(raid_attr.pending_value) + + return cls(raid_attr.name, raid_attr.instance_id, + raid_attr.current_value, raid_attr.pending_value, + raid_attr.read_only, raid_attr.fqdd, + int(lower_bound), int(upper_bound)) + + def validate(self, new_value): + """Validates new value""" + + val = int(new_value) + if val < self.lower_bound or val > self.upper_bound: + msg = ('Attribute %(attr)s cannot be set to value %(val)d.' + ' It must be between %(lower)d and %(upper)d.') % { + 'attr': self.name, + 'val': new_value, + 'lower': self.lower_bound, + 'upper': self.upper_bound} + return msg + + class RAIDManagement(object): + NAMESPACES = [(uris.DCIM_RAIDEnumeration, RAIDEnumerableAttribute), + (uris.DCIM_RAIDString, RAIDStringAttribute), + (uris.DCIM_RAIDInteger, RAIDIntegerAttribute)] + def __init__(self, client): """Creates RAIDManagement object @@ -108,6 +321,54 @@ class RAIDManagement(object): """ self.client = client + def list_raid_settings(self): + """List the RAID configuration settings + + :returns: a dictionary with the RAID settings using InstanceID as the + key. The attributes are either RAIDEnumerableAttribute, + RAIDStringAttribute objects. + :raises: WSManRequestFailure on request failures + :raises: WSManInvalidResponse when receiving invalid response + :raises: DRACOperationFailed on error reported back by the DRAC + interface + """ + + return utils.list_settings(self.client, self.NAMESPACES, + by_name=False) + + def set_raid_settings(self, raid_fqdd, new_settings): + """Sets the RAID configuration + + It sets the pending_value parameter for each of the attributes + passed in. For the values to be applied, a config job must + be created. + :param raid_fqdd: the FQDD of the RAID setting. + :param new_settings: a dictionary containing the proposed values, with + each key being the name of attribute and the value + being the proposed value. + :returns: a dictionary containing: + - The is_commit_required key with a boolean value indicating + whether a config job must be created for the values to be + applied. + - The is_reboot_required key with a RebootRequired enumerated + value indicating whether the server must be rebooted for the + values to be applied. Possible values are true and false. + :raises: WSManRequestFailure on request failures + :raises: WSManInvalidResponse when receiving invalid response + :raises: DRACOperationFailed on error reported back by the DRAC + interface + """ + + return utils.set_settings('RAID', + self.client, + self.NAMESPACES, + new_settings, + uris.DCIM_RAIDService, + "DCIM_RAIDService", + "DCIM:RAIDService", + raid_fqdd, + by_name=False) + def list_raid_controllers(self): """Returns the list of RAID controllers diff --git a/dracclient/resources/uris.py b/dracclient/resources/uris.py index b39a14b..218d85d 100644 --- a/dracclient/resources/uris.py +++ b/dracclient/resources/uris.py @@ -94,20 +94,30 @@ DCIM_PCIeSSDView = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' DCIM_PhysicalDiskView = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 'DCIM_PhysicalDiskView') +DCIM_RAIDEnumeration = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' + 'DCIM_RAIDEnumeration') + +DCIM_RAIDInteger = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' + 'DCIM_RAIDInteger') + DCIM_RAIDService = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 'DCIM_RAIDService') -DCIM_SystemView = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' - 'DCIM_SystemView') + +DCIM_RAIDString = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' + 'DCIM_RAIDString') DCIM_SystemEnumeration = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 'DCIM_SystemEnumeration') -DCIM_SystemString = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' - 'DCIM_SystemString') - DCIM_SystemInteger = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 'DCIM_SystemInteger') +DCIM_SystemString = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' + 'DCIM_SystemString') + +DCIM_SystemView = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' + 'DCIM_SystemView') + DCIM_VirtualDiskView = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 'DCIM_VirtualDiskView') diff --git a/dracclient/tests/test_raid.py b/dracclient/tests/test_raid.py index 273411f..99faab1 100644 --- a/dracclient/tests/test_raid.py +++ b/dracclient/tests/test_raid.py @@ -16,6 +16,7 @@ import collections import lxml.etree import mock import random +import re import requests_mock import dracclient.client @@ -117,6 +118,183 @@ class ClientRAIDManagementTestCase(base.BaseTest): device_protocol=None, bus=None) + @mock.patch.object(dracclient.client.WSManClient, + 'wait_until_idrac_is_ready', spec_set=True, + autospec=True) + def test_list_raid_settings(self, mock_requests, + mock_wait_until_idrac_is_ready): + expected_enum_attr = raid.RAIDEnumerableAttribute( + name='RAIDCurrentControllerMode', + instance_id='RAID.Integrated.1-1:RAIDCurrentControllerMode', # noqa + current_value=['RAID'], + pending_value=None, + read_only=True, + fqdd='RAID.Integrated.1-1', + possible_values=['RAID', 'Enhanced HBA']) + expected_string_attr = raid.RAIDStringAttribute( + name='Name', + instance_id='Disk.Virtual.1:RAID.Integrated.1-1:Name', # noqa + current_value='Virtual Disk 1', + pending_value=None, + read_only=True, + fqdd='Disk.Virtual.1:RAID.Integrated.1-1', + min_length=0, + max_length=129) + expected_integer_attr = raid.RAIDIntegerAttribute( + name='RAIDmaxSupportedVD', + instance_id='RAID.Integrated.1-1:RAIDmaxSupportedVD', # noqa + current_value=240, + pending_value=None, + read_only=True, + fqdd='RAID.Integrated.1-1', + lower_bound=0, + upper_bound=0) + # expected_string_attr + mock_requests.post('https://1.2.3.4:443/wsman', [ + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDEnumeration]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDString]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDInteger]['ok']} + ]) + + raid_settings = self.drac_client.list_raid_settings() + self.assertEqual(219, len(raid_settings)) + # enumerable attribute + self.assertIn( + 'RAID.Integrated.1-1:RAIDCurrentControllerMode', # noqa + raid_settings) + self.assertEqual(expected_enum_attr.fqdd, raid_settings[ + 'RAID.Integrated.1-1:RAIDCurrentControllerMode'].fqdd) # noqa + # string attribute + self.assertIn( + 'Disk.Virtual.1:RAID.Integrated.1-1:Name', # noqa + raid_settings) + self.assertEqual(expected_string_attr.fqdd, + raid_settings['Disk.Virtual.1:RAID.Integrated.1-1:Name'].fqdd) # noqa + # integer attribute + self.assertIn( + 'RAID.Integrated.1-1:RAIDmaxSupportedVD', # noqa + raid_settings) + self.assertEqual(expected_integer_attr.fqdd, raid_settings[ + 'RAID.Integrated.1-1:RAIDmaxSupportedVD'].fqdd) # noqa + + @mock.patch.object(dracclient.client.WSManClient, + 'wait_until_idrac_is_ready', spec_set=True, + autospec=True) + @mock.patch.object(dracclient.client.WSManClient, + 'invoke', spec_set=True, + autospec=True) + def test_set_raid_settings(self, mock_requests, + mock_invoke, + mock_wait_until_idrac_is_ready): + mock_requests.post('https://1.2.3.4:443/wsman', [ + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDEnumeration]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDString]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDInteger]['ok']}]) + mock_invoke.return_value = lxml.etree.fromstring( + test_utils.RAIDInvocations[uris.DCIM_RAIDService][ + 'SetAttributes']['ok']) + + result = self.drac_client.set_raid_settings( + self.raid_controller_fqdd, + {'RAID.Integrated.1-1:RAIDRequestedControllerMode': 'RAID'}) + + self.assertEqual({'is_commit_required': True, + 'is_reboot_required': constants.RebootRequired.true + }, + result) + + @mock.patch.object(dracclient.client.WSManClient, + 'wait_until_idrac_is_ready', spec_set=True, + autospec=True) + def test_set_raid_settings_with_unknown_attr( + self, mock_requests, mock_wait_until_idrac_is_ready): + mock_requests.post('https://1.2.3.4:443/wsman', [ + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDEnumeration]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDString]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDInteger]['ok']}, + {'text': test_utils.RAIDInvocations[ + uris.DCIM_RAIDService]['SetAttributes']['error']}]) + + self.assertRaises(exceptions.InvalidParameterValue, + self.drac_client.set_raid_settings, + self.raid_controller_fqdd, {'foo': 'bar'}) + + @mock.patch.object(dracclient.client.WSManClient, + 'wait_until_idrac_is_ready', spec_set=True, + autospec=True) + def test_set_raid_settings_with_unchanged_attr( + self, mock_requests, mock_wait_until_idrac_is_ready): + mock_requests.post('https://1.2.3.4:443/wsman', [ + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDEnumeration]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDString]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDInteger]['ok']}]) + attrKey = 'Disk.Virtual.1:RAID.Integrated.1-1:RAIDdefaultWritePolicy' + result = self.drac_client.set_raid_settings( + self.raid_controller_fqdd, + {attrKey: 'WriteBack'}) + + self.assertEqual({'is_commit_required': False, + 'is_reboot_required': + constants.RebootRequired.false}, + result) + + @mock.patch.object(dracclient.client.WSManClient, + 'wait_until_idrac_is_ready', spec_set=True, + autospec=True) + def test_set_raid_settings_with_readonly_attr( + self, mock_requests, mock_wait_until_idrac_is_ready): + expected_message = ( + "Cannot set read-only RAID attributes: " + "['RAID.Integrated.1-1:RAIDCurrentControllerMode']." + ) + mock_requests.post('https://1.2.3.4:443/wsman', [ + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDEnumeration]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDString]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDInteger]['ok']}]) + + self.assertRaisesRegexp( + exceptions.DRACOperationFailed, re.escape(expected_message), + self.drac_client.set_raid_settings, + self.raid_controller_fqdd, + {'RAID.Integrated.1-1:RAIDCurrentControllerMode': 'Enhanced HBA'}) + + @mock.patch.object(dracclient.client.WSManClient, + 'wait_until_idrac_is_ready', spec_set=True, + autospec=True) + def test_set_raid_settings_with_incorrect_enum_value( + self, mock_requests, mock_wait_until_idrac_is_ready): + expected_message = ("Attribute 'RAIDRequestedControllerMode' cannot " + "be set to value 'foo'. It must be in " + "['RAID', 'Enhanced HBA', 'None'].") + + mock_requests.post('https://1.2.3.4:443/wsman', [ + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDEnumeration]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDString]['ok']}, + {'text': test_utils.RAIDEnumerations[ + uris.DCIM_RAIDInteger]['ok']}]) + self.assertRaisesRegexp( + exceptions.DRACOperationFailed, re.escape(expected_message), + self.drac_client.set_raid_settings, + self.raid_controller_fqdd, + {'RAID.Integrated.1-1:RAIDRequestedControllerMode': 'foo'}) + @mock.patch.object(dracclient.client.WSManClient, 'wait_until_idrac_is_ready', spec_set=True, autospec=True) diff --git a/dracclient/tests/utils.py b/dracclient/tests/utils.py index 62dba75..4e4ee11 100644 --- a/dracclient/tests/utils.py +++ b/dracclient/tests/utils.py @@ -249,6 +249,15 @@ RAIDEnumerations = { 'Raid_Status_ok': load_wsman_xml( 'virtual_disk_view-enum-with-raid-status-ok'), 'ok': load_wsman_xml('virtual_disk_view-enum-ok') + }, + uris.DCIM_RAIDEnumeration: { + 'ok': load_wsman_xml('raid_enumeration-enum-ok') + }, + uris.DCIM_RAIDString: { + 'ok': load_wsman_xml('raid_string-enum-ok') + }, + uris.DCIM_RAIDInteger: { + 'ok': load_wsman_xml('raid_integer-enum-ok') } } @@ -287,6 +296,12 @@ RAIDInvocations = { 'raid_service-invoke-clear_foreign_config-invalid_controller'), 'foreign_drive_operation_not_supported': load_wsman_xml( 'raid_service-invoke-clear_foreign_config-not_supported'), + }, + 'SetAttributes': { + 'ok': load_wsman_xml( + 'raid_service-invoke-set_attributes-ok'), + 'error': load_wsman_xml( + 'raid_service-invoke-set_attributes-error'), } } } diff --git a/dracclient/tests/wsman_mocks/raid_enumeration-enum-ok.xml b/dracclient/tests/wsman_mocks/raid_enumeration-enum-ok.xml new file mode 100644 index 0000000..f031e64 --- /dev/null +++ b/dracclient/tests/wsman_mocks/raid_enumeration-enum-ok.xml @@ -0,0 +1,2347 @@ + + + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + http://schemas.xmlsoap.org/ws/2004/09/enumeration/EnumerateResponse + uuid:41a4f623-7f99-43b9-b240-4a773aa39860 + uuid:3b204fe0-9caa-1caa-a2f1-614a498fd94c + + + + + + RAIDSupportedRAIDLevels + 2(RAID-0) + 4(RAID-1) + 64(RAID-5) + 128(RAID-6) + 2048(RAID-10) + 8192(RAID-50) + 16384(RAID-60) + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDSupportedRAIDLevels + true + + 2(RAID-0) + 4(RAID-1) + 64(RAID-5) + 128(RAID-6) + 2048(RAID-10) + 8192(RAID-50) + 16384(RAID-60) + + + RAIDSupportedDiskProt + SAS + SATA + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDSupportedDiskProt + true + + SAS + SATA + + + RAIDSupportedInitTypes + Fast + Full + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDSupportedInitTypes + true + + Fast + Full + + + RAIDloadBalancedMode + Automatic + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDloadBalancedMode + false + + Automatic + Disabled + + + RAIDccMode + Normal + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDccMode + false + + Normal + Stop on Error + + + RAIDprMode + Automatic + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDprMode + false + + Disabled + Automatic + Manual + + + RAIDPatrolReadUnconfiguredArea + Enabled + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDPatrolReadUnconfiguredArea + false + + Disabled + Enabled + + + RAIDcopybackMode + On + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDcopybackMode + false + + On + On with SMART + Off + + + RAIDEnhancedAutoImportForeignConfig + Disabled + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDEnhancedAutoImportForeignConfig + false + + Disabled + Enabled + + + RAIDControllerBootMode + Headless Mode Continue On Error + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDControllerBootMode + false + + User Mode + Continue Boot On Error + Headless Mode Continue On Error + Headless Safe Mode + + + RAIDCurrentControllerMode + RAID + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDCurrentControllerMode + true + + RAID + Enhanced HBA + + + RAIDRequestedControllerMode + None + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDRequestedControllerMode + false + + RAID + Enhanced HBA + None + + + RAIDMode + None + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDMode + true + + None + Linux + Windows + Mixed + + + RAIDpersistentHotspare + Disabled + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDpersistentHotspare + false + + Disabled + Enabled + + + RAIDMaxCapableSpeed + 12_GBS + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDMaxCapableSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDSupportedInitTypes + None + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDSupportedInitTypes + true + + None + + + RAIDMode + None + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDMode + true + + None + Linux + Windows + Mixed + + + RAIDSupportedInitTypes + None + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDSupportedInitTypes + true + + None + + + RAIDMode + None + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDMode + true + + None + Linux + Windows + Mixed + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.0:RAID.Integrated.1-1 + Disk.Virtual.0:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.0:RAID.Integrated.1-1 + Disk.Virtual.0:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.0:RAID.Integrated.1-1 + Disk.Virtual.0:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.0:RAID.Integrated.1-1 + Disk.Virtual.0:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.0:RAID.Integrated.1-1 + Disk.Virtual.0:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.1:RAID.Integrated.1-1 + Disk.Virtual.1:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.1:RAID.Integrated.1-1 + Disk.Virtual.1:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.1:RAID.Integrated.1-1 + Disk.Virtual.1:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.1:RAID.Integrated.1-1 + Disk.Virtual.1:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.1:RAID.Integrated.1-1 + Disk.Virtual.1:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.2:RAID.Integrated.1-1 + Disk.Virtual.2:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.2:RAID.Integrated.1-1 + Disk.Virtual.2:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.2:RAID.Integrated.1-1 + Disk.Virtual.2:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.2:RAID.Integrated.1-1 + Disk.Virtual.2:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.2:RAID.Integrated.1-1 + Disk.Virtual.2:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.3:RAID.Integrated.1-1 + Disk.Virtual.3:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.3:RAID.Integrated.1-1 + Disk.Virtual.3:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.3:RAID.Integrated.1-1 + Disk.Virtual.3:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.3:RAID.Integrated.1-1 + Disk.Virtual.3:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.3:RAID.Integrated.1-1 + Disk.Virtual.3:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.4:RAID.Integrated.1-1 + Disk.Virtual.4:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.4:RAID.Integrated.1-1 + Disk.Virtual.4:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.4:RAID.Integrated.1-1 + Disk.Virtual.4:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.4:RAID.Integrated.1-1 + Disk.Virtual.4:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.4:RAID.Integrated.1-1 + Disk.Virtual.4:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.5:RAID.Integrated.1-1 + Disk.Virtual.5:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.5:RAID.Integrated.1-1 + Disk.Virtual.5:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.5:RAID.Integrated.1-1 + Disk.Virtual.5:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.5:RAID.Integrated.1-1 + Disk.Virtual.5:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.5:RAID.Integrated.1-1 + Disk.Virtual.5:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.6:RAID.Integrated.1-1 + Disk.Virtual.6:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.6:RAID.Integrated.1-1 + Disk.Virtual.6:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.6:RAID.Integrated.1-1 + Disk.Virtual.6:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.6:RAID.Integrated.1-1 + Disk.Virtual.6:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.6:RAID.Integrated.1-1 + Disk.Virtual.6:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.7:RAID.Integrated.1-1 + Disk.Virtual.7:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.7:RAID.Integrated.1-1 + Disk.Virtual.7:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.7:RAID.Integrated.1-1 + Disk.Virtual.7:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.7:RAID.Integrated.1-1 + Disk.Virtual.7:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.7:RAID.Integrated.1-1 + Disk.Virtual.7:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.8:RAID.Integrated.1-1 + Disk.Virtual.8:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.8:RAID.Integrated.1-1 + Disk.Virtual.8:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.8:RAID.Integrated.1-1 + Disk.Virtual.8:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.8:RAID.Integrated.1-1 + Disk.Virtual.8:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.8:RAID.Integrated.1-1 + Disk.Virtual.8:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.9:RAID.Integrated.1-1 + Disk.Virtual.9:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.9:RAID.Integrated.1-1 + Disk.Virtual.9:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.9:RAID.Integrated.1-1 + Disk.Virtual.9:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.9:RAID.Integrated.1-1 + Disk.Virtual.9:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.9:RAID.Integrated.1-1 + Disk.Virtual.9:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.10:RAID.Integrated.1-1 + Disk.Virtual.10:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.10:RAID.Integrated.1-1 + Disk.Virtual.10:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.10:RAID.Integrated.1-1 + Disk.Virtual.10:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.10:RAID.Integrated.1-1 + Disk.Virtual.10:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.10:RAID.Integrated.1-1 + Disk.Virtual.10:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.11:RAID.Integrated.1-1 + Disk.Virtual.11:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.11:RAID.Integrated.1-1 + Disk.Virtual.11:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.11:RAID.Integrated.1-1 + Disk.Virtual.11:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.11:RAID.Integrated.1-1 + Disk.Virtual.11:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.11:RAID.Integrated.1-1 + Disk.Virtual.11:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.12:RAID.Integrated.1-1 + Disk.Virtual.12:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.12:RAID.Integrated.1-1 + Disk.Virtual.12:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.12:RAID.Integrated.1-1 + Disk.Virtual.12:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.12:RAID.Integrated.1-1 + Disk.Virtual.12:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.12:RAID.Integrated.1-1 + Disk.Virtual.12:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.13:RAID.Integrated.1-1 + Disk.Virtual.13:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.13:RAID.Integrated.1-1 + Disk.Virtual.13:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Enabled + Disk.Virtual.13:RAID.Integrated.1-1 + Disk.Virtual.13:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.13:RAID.Integrated.1-1 + Disk.Virtual.13:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.13:RAID.Integrated.1-1 + Disk.Virtual.13:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.14:RAID.Integrated.1-1 + Disk.Virtual.14:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.14:RAID.Integrated.1-1 + Disk.Virtual.14:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Enabled + Disk.Virtual.14:RAID.Integrated.1-1 + Disk.Virtual.14:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.14:RAID.Integrated.1-1 + Disk.Virtual.14:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.14:RAID.Integrated.1-1 + Disk.Virtual.14:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.15:RAID.Integrated.1-1 + Disk.Virtual.15:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.15:RAID.Integrated.1-1 + Disk.Virtual.15:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Enabled + Disk.Virtual.15:RAID.Integrated.1-1 + Disk.Virtual.15:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.15:RAID.Integrated.1-1 + Disk.Virtual.15:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.15:RAID.Integrated.1-1 + Disk.Virtual.15:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.16:RAID.Integrated.1-1 + Disk.Virtual.16:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.16:RAID.Integrated.1-1 + Disk.Virtual.16:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Enabled + Disk.Virtual.16:RAID.Integrated.1-1 + Disk.Virtual.16:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.16:RAID.Integrated.1-1 + Disk.Virtual.16:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.16:RAID.Integrated.1-1 + Disk.Virtual.16:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.17:RAID.Integrated.1-1 + Disk.Virtual.17:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.17:RAID.Integrated.1-1 + Disk.Virtual.17:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.17:RAID.Integrated.1-1 + Disk.Virtual.17:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.17:RAID.Integrated.1-1 + Disk.Virtual.17:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.17:RAID.Integrated.1-1 + Disk.Virtual.17:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDdefaultWritePolicy + WriteBack + Disk.Virtual.18:RAID.Integrated.1-1 + Disk.Virtual.18:RAID.Integrated.1-1:RAIDdefaultWritePolicy + false + + WriteThrough + WriteBack + WriteBackForce + + + RAIDdefaultReadPolicy + ReadAhead + Disk.Virtual.18:RAID.Integrated.1-1 + Disk.Virtual.18:RAID.Integrated.1-1:RAIDdefaultReadPolicy + false + + NoReadAhead + ReadAhead + AdaptiveReadAhead + + + DiskCachePolicy + Disabled + Disk.Virtual.18:RAID.Integrated.1-1 + Disk.Virtual.18:RAID.Integrated.1-1:DiskCachePolicy + false + + Default + Enabled + Disabled + + + T10PIStatus + Disabled + Disk.Virtual.18:RAID.Integrated.1-1 + Disk.Virtual.18:RAID.Integrated.1-1:T10PIStatus + true + + Disabled + Enabled + + + RAIDStripeSize + 512(256 KB) + Disk.Virtual.18:RAID.Integrated.1-1 + Disk.Virtual.18:RAID.Integrated.1-1:RAIDStripeSize + true + + 0 + 1(512 Bytes) + 2(1 KB) + 4(2 KB) + 8(4 KB) + 16(8 KB) + 32(16 KB) + 64(32 KB) + 128(64 KB) + 256(128 KB) + 512(256 KB) + 1024(512 KB) + 2048(1024 KB) + 4096(2048 KB) + 8192(4096 KB) + 16384(8192 KB) + 32768(16384 KB) + + + RAIDMultipath + Off + Enclosure.Internal.0-1:RAID.Integrated.1-1 + Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDMultipath + true + + Off + On + + + BackplaneType + Not Shared + Enclosure.Internal.0-1:RAID.Integrated.1-1 + Enclosure.Internal.0-1:RAID.Integrated.1-1:BackplaneType + true + + Not Shared + Shared + + + RAIDPDState + Online + Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.6:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.6:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.6:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.6:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.6:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.6:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.7:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.7:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.7:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.7:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.7:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.7:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.8:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.8:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.8:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.8:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.8:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.8:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.9:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.9:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.9:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.9:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.9:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.9:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.10:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.10:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.10:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.10:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.10:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.10:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.11:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.11:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.11:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.11:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.11:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.11:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.12:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.12:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.12:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.12:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 6_GBS + Disk.Bay.12:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.12:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.13:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.13:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.13:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.13:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 6_GBS + Disk.Bay.13:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.13:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.14:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.14:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.14:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.14:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 6_GBS + Disk.Bay.14:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.14:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.15:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.15:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.15:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.15:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 6_GBS + Disk.Bay.15:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.15:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.16:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.16:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.16:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.16:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.16:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.16:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.17:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.17:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.17:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.17:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.17:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.17:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.18:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.18:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.18:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.18:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.18:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.18:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + RAIDPDState + Online + Disk.Bay.19:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.19:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDPDState + true + + Unknown + Ready + Online + Foreign + Blocked + Failed + Non-RAID + Missing + Offline + + + RAIDHotSpareStatus + No + Disk.Bay.19:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.19:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDHotSpareStatus + true + + No + Dedicated + Global + + + RAIDNegotiatedSpeed + 12_GBS + Disk.Bay.19:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.19:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNegotiatedSpeed + true + + 1_5_GBS + 3_GBS + 6_GBS + 12_GBS + + + + + + diff --git a/dracclient/tests/wsman_mocks/raid_integer-enum-ok.xml b/dracclient/tests/wsman_mocks/raid_integer-enum-ok.xml new file mode 100644 index 0000000..27c610c --- /dev/null +++ b/dracclient/tests/wsman_mocks/raid_integer-enum-ok.xml @@ -0,0 +1,416 @@ + + + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + http://schemas.xmlsoap.org/ws/2004/09/enumeration/EnumerateResponse + uuid:40206465-1566-46e3-bf05-9952ba57ec3c + uuid:6af777f7-9ef1-1ef1-b067-84d3878fd94c + + + + + + RAIDmaxSupportedVD + 240 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDmaxSupportedVD + true + 0 + + 0 + + + RAIDmaxPDsInSpan + 32 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDmaxPDsInSpan + true + 0 + + 0 + + + RAIDmaxSpansInVD + 8 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDmaxSpansInVD + true + 0 + + 0 + + + RAIDrebuildRate + 30 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDrebuildRate + false + 0 + + 100 + + + RAIDccRate + 30 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDccRate + false + 0 + + 100 + + + RAIDreconstructRate + 30 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDreconstructRate + false + 0 + + 100 + + + RAIDbgiRate + 30 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDbgiRate + false + 0 + + 100 + + + RAIDprRate + 30 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDprRate + true + 0 + + 100 + + + RAIDspinDownIdleTime + 30 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDspinDownIdleTime + true + 0 + + 65535 + + + RAIDprIterations + 0 + RAID.Integrated.1-1 + RAID.Integrated.1-1:RAIDprIterations + true + 1 + + 4294967295 + + + RAIDmaxSupportedVD + 0 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDmaxSupportedVD + true + 0 + + 0 + + + RAIDmaxPDsInSpan + 0 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDmaxPDsInSpan + true + 0 + + 0 + + + RAIDmaxSpansInVD + 0 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDmaxSpansInVD + true + 0 + + 0 + + + RAIDrebuildRate + 255 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDrebuildRate + true + 0 + + 100 + + + RAIDccRate + 255 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDccRate + true + 0 + + 100 + + + RAIDreconstructRate + 255 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDreconstructRate + true + 0 + + 100 + + + RAIDbgiRate + 255 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDbgiRate + true + 0 + + 100 + + + RAIDprRate + 255 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDprRate + true + 0 + + 100 + + + RAIDspinDownIdleTime + 0 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDspinDownIdleTime + true + 0 + + 65535 + + + RAIDprIterations + 0 + AHCI.Embedded.2-1 + AHCI.Embedded.2-1:RAIDprIterations + true + 1 + + 4294967295 + + + RAIDmaxSupportedVD + 0 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDmaxSupportedVD + true + 0 + + 0 + + + RAIDmaxPDsInSpan + 0 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDmaxPDsInSpan + true + 0 + + 0 + + + RAIDmaxSpansInVD + 0 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDmaxSpansInVD + true + 0 + + 0 + + + RAIDrebuildRate + 255 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDrebuildRate + true + 0 + + 100 + + + RAIDccRate + 255 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDccRate + true + 0 + + 100 + + + RAIDreconstructRate + 255 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDreconstructRate + true + 0 + + 100 + + + RAIDbgiRate + 255 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDbgiRate + true + 0 + + 100 + + + RAIDprRate + 255 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDprRate + true + 0 + + 100 + + + RAIDspinDownIdleTime + 0 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDspinDownIdleTime + true + 0 + + 65535 + + + RAIDprIterations + 0 + AHCI.Embedded.1-1 + AHCI.Embedded.1-1:RAIDprIterations + true + 1 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.6:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.6:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.7:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.7:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.8:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.8:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + RAIDNominalMediumRotationRate + 10000 + Disk.Bay.9:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.9:Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDNominalMediumRotationRate + true + 2 + + 4294967295 + + + + + + + diff --git a/dracclient/tests/wsman_mocks/raid_service-invoke-set_attributes-error.xml b/dracclient/tests/wsman_mocks/raid_service-invoke-set_attributes-error.xml new file mode 100644 index 0000000..e79807b --- /dev/null +++ b/dracclient/tests/wsman_mocks/raid_service-invoke-set_attributes-error.xml @@ -0,0 +1,21 @@ + + + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_RAIDService/SetAttributesResponse + + uuid:bf8adefe-6fc0-456d-b97c-fd8d4aca2d6c + + uuid:84abf7b9-7176-1176-a11c-a53ffbd9bed4 + + + + + Invalid parameter value + STOR004 + 2 + + + diff --git a/dracclient/tests/wsman_mocks/raid_service-invoke-set_attributes-ok.xml b/dracclient/tests/wsman_mocks/raid_service-invoke-set_attributes-ok.xml new file mode 100644 index 0000000..50d5fd4 --- /dev/null +++ b/dracclient/tests/wsman_mocks/raid_service-invoke-set_attributes-ok.xml @@ -0,0 +1,24 @@ + + + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_RAIDService/SetAttributesResponse + + uuid:bf8adefe-6fc0-456d-b97c-fd8d4aca2d6c + + uuid:84abf7b9-7176-1176-a11c-a53ffbd9bed4 + + + + + STOR001 + The command was successful for all attributes + 0 + Yes + Set PendingValue + + + + diff --git a/dracclient/tests/wsman_mocks/raid_string-enum-ok.xml b/dracclient/tests/wsman_mocks/raid_string-enum-ok.xml new file mode 100644 index 0000000..866961f --- /dev/null +++ b/dracclient/tests/wsman_mocks/raid_string-enum-ok.xml @@ -0,0 +1,49 @@ + + + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + http://schemas.xmlsoap.org/ws/2004/09/enumeration/EnumerateResponse + uuid:6f1e7eae-511a-4268-9913-c1ce1bb414be + uuid:6da65cf0-9cbb-1cbb-9773-deda878fd94c + + + + + + Name + Virtual Disk 0 + Disk.Virtual.0:RAID.Integrated.1-1 + Disk.Virtual.0:RAID.Integrated.1-1:Name + true + 129 + 0 + + + + Name + Virtual Disk 1 + Disk.Virtual.1:RAID.Integrated.1-1 + Disk.Virtual.1:RAID.Integrated.1-1:Name + true + 129 + 0 + + + + RAIDEffectiveSASAddress + 500056B3239C1AFD + Enclosure.Internal.0-1:RAID.Integrated.1-1 + Enclosure.Internal.0-1:RAID.Integrated.1-1:RAIDEffectiveSASAddress + true + 16 + 16 + + + + + + diff --git a/dracclient/utils.py b/dracclient/utils.py index 1814cda..d7f63e2 100644 --- a/dracclient/utils.py +++ b/dracclient/utils.py @@ -301,7 +301,8 @@ def set_settings(settings_type, cim_name, target, name_formatter=None, - wait_for_idrac=True): + wait_for_idrac=True, + by_name=True): """Generically handles setting various types of settings on the iDRAC This method pulls the current list of settings from the iDRAC then compares @@ -325,6 +326,8 @@ def set_settings(settings_type, :param wait_for_idrac: indicates whether or not to wait for the iDRAC to be ready to accept commands before issuing the command + :param by_name: Controls whether returned dictionary uses RAID + attribute name or instance_id as key. :returns: a dictionary containing: - The is_commit_required key with a boolean value indicating whether a config job must be created for the values to be @@ -340,17 +343,14 @@ def set_settings(settings_type, :raises: DRACUnexpectedReturnValue on return value mismatch :raises: InvalidParameterValue on invalid new setting """ - - current_settings = list_settings(client, namespaces, by_name=True, + current_settings = list_settings(client, namespaces, by_name=by_name, name_formatter=name_formatter, wait_for_idrac=wait_for_idrac) unknown_keys = set(new_settings) - set(current_settings) if unknown_keys: - msg = ('Unknown %(settings_type)s attributes found: ' - '%(unknown_keys)r' % - {'settings_type': settings_type, - 'unknown_keys': unknown_keys}) + msg = ('Unknown %(settings_type)s attributes found: %(unknown_keys)r' % + {'settings_type': settings_type, 'unknown_keys': unknown_keys}) raise exceptions.InvalidParameterValue(reason=msg) read_only_keys = [] @@ -360,11 +360,18 @@ def set_settings(settings_type, candidates = set(new_settings) for attr in candidates: - if str(new_settings[attr]) == str( - current_settings[attr].current_value): - unchanged_attribs.append(attr) - elif current_settings[attr].read_only: + # There are RAID settings that can have multiple values, + # however these are all read-only attributes. + # Filter out all read-only attributes first so that we exclude + # these settings from further consideration + current_setting_value = current_settings[attr].current_value + if type(current_setting_value) is list: + current_setting_value = current_setting_value[0] + + if current_settings[attr].read_only: read_only_keys.append(attr) + elif str(new_settings[attr]) == str(current_setting_value): + unchanged_attribs.append(attr) else: validation_msg = current_settings[attr].validate( new_settings[attr]) @@ -405,10 +412,20 @@ def set_settings(settings_type, 'SystemName': 'DCIM:ComputerSystem'} properties = {'Target': target, - 'AttributeName': attrib_names, 'AttributeValue': [new_settings[attr] for attr in attrib_names]} - + # To set RAID settings, above we fetched list raid settings using + # instance_id to retrieve attribute values. When we pass instance_id in + # setattribute method for setting any new RAID settings, wsman raises + # an error. So another approach to set those settings is to list raid + # settings using instance_id and for settings new settings, pass the + # attribute names in list to SetAttributes method along with the target. + # That's the reason, we need to handle RAID specific settings like below + if settings_type == 'RAID': + properties['AttributeName'] = [current_settings[attr].name for + attr in attrib_names] + else: + properties['AttributeName'] = attrib_names doc = client.invoke(resource_uri, 'SetAttributes', selectors, properties, wait_for_idrac=wait_for_idrac)