diff --git a/cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py b/cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py index f5f2d53b99d..ec55b33328d 100644 --- a/cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py +++ b/cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py @@ -1471,6 +1471,7 @@ class PowerMaxData(object): snap_device_label = ('%(dev)s:%(label)s' % {'dev': device_id, 'label': managed_snap_id}) + priv_snap_response = { 'deviceName': snap_device_label, 'snapshotLnks': [], 'snapshotSrcs': [ @@ -1482,6 +1483,9 @@ class PowerMaxData(object): 'snapshotName': test_snapshot_snap_name, 'state': 'Established'}]} + priv_snap_response_no_label = deepcopy(priv_snap_response) + priv_snap_response_no_label.update({'deviceName': device_id}) + volume_metadata = { 'DeviceID': device_id, 'ArrayID': array, 'ArrayModel': array_model} diff --git a/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_common.py b/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_common.py index 7e1f9384543..bd1dcd056e4 100644 --- a/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_common.py +++ b/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_common.py @@ -3835,6 +3835,22 @@ class PowerMaxCommonTest(test.TestCase): array, device_id, snap_name) self.assertEqual(ref_metadata, act_metadata) + @mock.patch.object( + rest.PowerMaxRest, 'get_volume_snap_info', + return_value=(tpd.PowerMaxData.priv_snap_response_no_label)) + def test_get_snapshot_metadata_no_label(self, mck_snap): + array = self.data.array + device_id = self.data.device_id + snap_name = self.data.test_snapshot_snap_name + ref_metadata = {'SnapshotLabel': snap_name, + 'SourceDeviceID': device_id, + 'SnapIdList': six.text_type(self.data.snap_id), + 'is_snap_id': True} + + act_metadata = self.common.get_snapshot_metadata( + array, device_id, snap_name) + self.assertEqual(ref_metadata, act_metadata) + def test_update_metadata(self): model_update = {'provider_location': six.text_type( self.data.provider_location)} diff --git a/cinder/volume/drivers/dell_emc/powermax/common.py b/cinder/volume/drivers/dell_emc/powermax/common.py index 2d7ff329bc4..e4b99a5f28f 100644 --- a/cinder/volume/drivers/dell_emc/powermax/common.py +++ b/cinder/volume/drivers/dell_emc/powermax/common.py @@ -7076,14 +7076,17 @@ class PowerMaxCommon(object): snap_id_list.append(snapshot_src.get( 'snap_id') if self.rest.is_snap_id else snapshot_src.get( 'generation')) - device_label = device_name.split(':')[1] + try: + device_label = device_name.split(':')[1] if device_name else None + except IndexError: + device_label = None metadata = {'SnapshotLabel': snap_name, 'SourceDeviceID': device_id, - 'SourceDeviceLabel': device_label, 'SnapIdList': ', '.join( six.text_type(v) for v in snap_id_list), 'is_snap_id': self.rest.is_snap_id} - + if device_label: + metadata['SourceDeviceLabel'] = device_label return metadata def _check_and_add_tags_to_storage_array( diff --git a/releasenotes/notes/bug-1939139-02ab552420813e70.yaml b/releasenotes/notes/bug-1939139-02ab552420813e70.yaml new file mode 100644 index 00000000000..4edf6cf11a2 --- /dev/null +++ b/releasenotes/notes/bug-1939139-02ab552420813e70.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + PowerMax driver `bug #1939139 + `_: Fix + on create snapshot operation that exists when using PowerMax OS + 5978.711 and later.