From 01e7ca19ce4161d9153dfe45520072521b0164b0 Mon Sep 17 00:00:00 2001 From: Rachit7194 Date: Wed, 29 Jan 2020 01:25:16 -0500 Subject: [PATCH] Fix parsing for virtual disk RAIDStatus attribute This patch changes the parsing of virtual disks so that if the DCIM_VirutalDiskView.RAIDStatus attribute is not present then DCIM_VirutalDiskView.RaidStatus will be used instead. This is needed due to the attribute being renamed in LCC version 4.0.0 Change-Id: I4ca1b7f6df47ce808920b5e24ad0be6b76963917 --- dracclient/resources/raid.py | 12 +++- dracclient/tests/test_raid.py | 30 ++++++++++ dracclient/tests/utils.py | 2 + ...ual_disk_view-enum-with-raid-status-ok.xml | 55 +++++++++++++++++++ 4 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 dracclient/tests/wsman_mocks/virtual_disk_view-enum-with-raid-status-ok.xml diff --git a/dracclient/resources/raid.py b/dracclient/resources/raid.py index f07e39a..53d43ad 100644 --- a/dracclient/resources/raid.py +++ b/dracclient/resources/raid.py @@ -175,7 +175,12 @@ class RAIDManagement(object): drac_raid_level = self._get_virtual_disk_attr(drac_disk, 'RAIDTypes') size_b = self._get_virtual_disk_attr(drac_disk, 'SizeInBytes') drac_status = self._get_virtual_disk_attr(drac_disk, 'PrimaryStatus') - drac_raid_status = self._get_virtual_disk_attr(drac_disk, 'RAIDStatus') + drac_raid_status = self._get_virtual_disk_attr( + drac_disk, 'RAIDStatus', allow_missing=True) + if drac_raid_status is None: + drac_raid_status = self._get_virtual_disk_attr( + drac_disk, 'RaidStatus') + drac_pending_operations = self._get_virtual_disk_attr( drac_disk, 'PendingOperations') @@ -200,10 +205,11 @@ class RAIDManagement(object): physical_disks=self._get_virtual_disk_attrs(drac_disk, 'PhysicalDiskIDs')) - def _get_virtual_disk_attr(self, drac_disk, attr_name, nullable=False): + def _get_virtual_disk_attr( + self, drac_disk, attr_name, nullable=False, allow_missing=False): return utils.get_wsman_resource_attr( drac_disk, uris.DCIM_VirtualDiskView, attr_name, - nullable=nullable) + nullable=nullable, allow_missing=allow_missing) def _get_virtual_disk_attrs(self, drac_disk, attr_name): return utils.get_all_wsman_resource_attrs( diff --git a/dracclient/tests/test_raid.py b/dracclient/tests/test_raid.py index 151290e..3c0ee5d 100644 --- a/dracclient/tests/test_raid.py +++ b/dracclient/tests/test_raid.py @@ -163,6 +163,36 @@ class ClientRAIDManagementTestCase(base.BaseTest): self.assertIn(expected_virtual_disk, self.drac_client.list_virtual_disks()) + @mock.patch.object(dracclient.client.WSManClient, + 'wait_until_idrac_is_ready', spec_set=True, + autospec=True) + def test_list_virtual_disks_with_raid_status_change( + self, mock_requests, mock_wait_until_idrac_is_ready): + expected_virtual_disk = raid.VirtualDisk( + id='Disk.Virtual.0:RAID.Integrated.1-1', + name='disk 0', + description='Virtual Disk 0 on Integrated RAID Controller 1', + controller='RAID.Integrated.1-1', + raid_level='1', + size_mb=571776, + status='ok', + raid_status='online', + span_depth=1, + span_length=2, + pending_operations=None, + physical_disks=[ + 'Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1', + 'Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1' + ]) + + mock_requests.post( + 'https://1.2.3.4:443/wsman', + text=test_utils.RAIDEnumerations[ + uris.DCIM_VirtualDiskView]['Raid_Status_ok']) + + self.assertIn(expected_virtual_disk, + self.drac_client.list_virtual_disks()) + @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 f20349c..62dba75 100644 --- a/dracclient/tests/utils.py +++ b/dracclient/tests/utils.py @@ -246,6 +246,8 @@ RAIDEnumerations = { 'ok': load_wsman_xml('physical_disk_view-enum-ok') }, uris.DCIM_VirtualDiskView: { + 'Raid_Status_ok': load_wsman_xml( + 'virtual_disk_view-enum-with-raid-status-ok'), 'ok': load_wsman_xml('virtual_disk_view-enum-ok') } } diff --git a/dracclient/tests/wsman_mocks/virtual_disk_view-enum-with-raid-status-ok.xml b/dracclient/tests/wsman_mocks/virtual_disk_view-enum-with-raid-status-ok.xml new file mode 100644 index 0000000..c8e3151 --- /dev/null +++ b/dracclient/tests/wsman_mocks/virtual_disk_view-enum-with-raid-status-ok.xml @@ -0,0 +1,55 @@ + + + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + http://schemas.xmlsoap.org/ws/2004/09/enumeration/EnumerateResponse + uuid:b182f1ee-103a-103a-8002-fd0aa2bdb228 + uuid:b80f21ed-103f-103f-8992-a36fc6fe83b0 + + + + + + 512 + 6 + 0 + Virtual Disk 0 on Integrated RAID Controller 1 + 1024 + Disk.Virtual.0:RAID.Integrated.1-1 + Disk.Virtual.0:RAID.Integrated.1-1 + 20150301200527.000000+000 + 20150301200527.000000+000 + 0 + 1 + disk 0 + 0 + Background Intialization + 8 + 0 + Disk.Bay.4:Enclosure.Internal.0-1:RAID.Integrated.1-1 + Disk.Bay.5:Enclosure.Internal.0-1:RAID.Integrated.1-1 + 1 + 2 + 4 + 16 + 1 + 1 + 599550590976 + 1 + 2 + 0 + 128 + 0 + 0 + 2 + + + + + + +