From 07c1b854192677eab8e778e9c1cfc3a5ce3dc30a Mon Sep 17 00:00:00 2001 From: Helen Walsh Date: Fri, 20 Jul 2018 14:33:00 +0100 Subject: [PATCH] VMAX driver - minor metadata additions Adding metadata for delete operation and adding OpenStack display name to all operations. Change-Id: Ia21a2688fc4ec2d974d866703abef38ae25a0048 --- .../volume/drivers/dell_emc/vmax/test_vmax.py | 9 +++++- cinder/volume/drivers/dell_emc/vmax/common.py | 3 +- .../volume/drivers/dell_emc/vmax/metadata.py | 28 +++++++++++++++++-- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/cinder/tests/unit/volume/drivers/dell_emc/vmax/test_vmax.py b/cinder/tests/unit/volume/drivers/dell_emc/vmax/test_vmax.py index 06f11392b1a..6cb4317d0ca 100644 --- a/cinder/tests/unit/volume/drivers/dell_emc/vmax/test_vmax.py +++ b/cinder/tests/unit/volume/drivers/dell_emc/vmax/test_vmax.py @@ -8213,6 +8213,13 @@ class VMAXVolumeMetadataDebugTest(test.TestCase): "test_group_id", self.data.extra_specs, {}, 'create', None) mock_uvim.assert_called_once() + @mock.patch.object(metadata.VMAXVolumeMetadata, + 'update_volume_info_metadata', + return_value={}) + def test_capture_delete_info(self, mock_uvim): + self.volume_metadata.capture_delete_info(self.data.test_volume) + mock_uvim.assert_called_once() + @mock.patch.object(metadata.VMAXVolumeMetadata, 'update_volume_info_metadata', return_value={}) @@ -8275,7 +8282,7 @@ class VMAXVolumeMetadataDebugTest(test.TestCase): return_value={}) def test_capture_retype_info(self, mock_uvim): self.volume_metadata.capture_retype_info( - self.data.test_volume.id, 20, self.data.device_id, self.data.array, + self.data.test_volume, self.data.device_id, self.data.array, self.data.srp, self.data.slo, self.data.workload, self.data.storagegroup_name_target, False, None, False) diff --git a/cinder/volume/drivers/dell_emc/vmax/common.py b/cinder/volume/drivers/dell_emc/vmax/common.py index 7594fb4f13d..3a4a18a0a84 100644 --- a/cinder/volume/drivers/dell_emc/vmax/common.py +++ b/cinder/volume/drivers/dell_emc/vmax/common.py @@ -427,6 +427,7 @@ class VMAXCommon(object): LOG.info("Deleting Volume: %(volume)s", {'volume': volume.name}) volume_name = self._delete_volume(volume) + self.volume_metadata.capture_delete_info(volume) LOG.info("Leaving delete_volume: %(volume_name)s.", {'volume_name': volume_name}) @@ -2605,7 +2606,7 @@ class VMAXCommon(object): rep_mode, is_rep_enabled, target_extra_specs) self.volume_metadata.capture_retype_info( - volume.id, volume.size, device_id, array, srp, target_slo, + volume, device_id, array, srp, target_slo, target_workload, target_sg_name, is_rep_enabled, rep_mode, is_compression_disabled) diff --git a/cinder/volume/drivers/dell_emc/vmax/metadata.py b/cinder/volume/drivers/dell_emc/vmax/metadata.py index 05d3cf0fd4e..c2d1f12396d 100644 --- a/cinder/volume/drivers/dell_emc/vmax/metadata.py +++ b/cinder/volume/drivers/dell_emc/vmax/metadata.py @@ -331,6 +331,7 @@ class VMAXVolumeMetadata(object): port_group=port_group, host=host, is_multipath=is_multipath, identifier_name=self.utils.get_volume_element_name(volume.id), + openstack_name=volume.display_name, mv_list=mv_list, sg_list=sg_list) volume_metadata = self.update_volume_info_metadata( @@ -357,6 +358,7 @@ class VMAXVolumeMetadata(object): workload=extra_specs[utils.WORKLOAD], srp=extra_specs[utils.SRP], default_sg_name=default_sg, identifier_name=self.utils.get_volume_element_name(volume.id), + openstack_name=volume.display_name, mv_list=mv_list, sg_list=sg_list ) volume_metadata = self.update_volume_info_metadata( @@ -383,6 +385,7 @@ class VMAXVolumeMetadata(object): workload=extra_specs[utils.WORKLOAD], srp=extra_specs[utils.SRP], identifier_name=self.utils.get_volume_element_name(volume.id), + openstack_name=volume.display_name, is_compression_disabled=self.utils.is_compression_disabled( extra_specs)) volume_metadata = self.update_volume_info_metadata( @@ -416,6 +419,7 @@ class VMAXVolumeMetadata(object): srp=extra_specs[utils.SRP], identifier_name=( self.utils.get_volume_element_name(source.id)), + openstack_name=source.display_name, snapshot_count=snapshot_count, last_ss_name=last_ss_name) volume_metadata = self.update_volume_info_metadata( @@ -494,6 +498,7 @@ class VMAXVolumeMetadata(object): workload=extra_specs[utils.WORKLOAD], srp=extra_specs[utils.SRP], identifier_name=self.utils.get_volume_element_name(volume.id), + openstack_name=volume.display_name, source_volid=volume.source_volid, group_name=group_name, group_id=group_id, rdf_group_no=rdf_group_no, @@ -558,6 +563,7 @@ class VMAXVolumeMetadata(object): workload=extra_specs[utils.WORKLOAD], srp=extra_specs[utils.SRP], identifier_name=self.utils.get_volume_element_name(volume.id), + openstack_name=volume.display_name, source_volid=volume.source_volid, rdf_group_no=rdf_group, remote_array=array, target_device_id=device_id, vol_grp_name=vol_grp_name, @@ -605,6 +611,7 @@ class VMAXVolumeMetadata(object): workload=extra_specs[utils.WORKLOAD], srp=extra_specs[utils.SRP], identifier_name=self.utils.get_volume_element_name(volume.id), + openstack_name=volume.display_name, source_volid=volume.source_volid, rdf_group_no=rdf_group_no, target_name=target_name, remote_array=remote_array, @@ -618,7 +625,7 @@ class VMAXVolumeMetadata(object): @debug_required def capture_retype_info( - self, volume_id, volume_size, device_id, array, srp, target_slo, + self, volume, device_id, array, srp, target_slo, target_workload, target_sg_name, is_rep_enabled, rep_mode, is_compression_disabled): """Captures manage existing info in volume metadata @@ -636,14 +643,15 @@ class VMAXVolumeMetadata(object): """ operation = "retype" datadict = self.gather_volume_info( - volume_id, operation, False, volume_size=volume_size, + volume.id, operation, False, volume_size=volume.size, device_id=device_id, target_sg_name=target_sg_name, serial_number=array, target_service_level=target_slo, target_workload=target_workload, srp=srp, - identifier_name=self.utils.get_volume_element_name(volume_id), + identifier_name=self.utils.get_volume_element_name(volume.id), + openstack_name=volume.display_name, is_rep_enabled=('yes' if is_rep_enabled else 'no'), rep_mode=rep_mode, is_compression_disabled = ( 'yes' if is_compression_disabled else 'no') @@ -651,3 +659,17 @@ class VMAXVolumeMetadata(object): volume_metadata = self.update_volume_info_metadata( datadict, self.version_dict) self.print_pretty_table(volume_metadata) + + @debug_required + def capture_delete_info(self, volume): + """Captures delete info in volume metadata + + :param volume: the volume object + """ + datadict = self.gather_volume_info( + volume.id, 'delete', False, + identifier_name=self.utils.get_volume_element_name(volume.id), + openstack_name=volume.display_name) + volume_metadata = self.update_volume_info_metadata( + datadict, self.version_dict) + self.print_pretty_table(volume_metadata)