diff options
Diffstat (limited to 'nova/virt/libvirt/driver.py')
-rw-r--r-- | nova/virt/libvirt/driver.py | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 54b721e786..beb53325ed 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -5662,8 +5662,24 @@ class LibvirtDriver(driver.ComputeDriver): # Disconnect from volume server block_device_mapping = driver.block_device_info_get_mapping( block_device_info) + connector = self.get_volume_connector(instance) + volume_api = self._volume_api for vol in block_device_mapping: - connection_info = vol['connection_info'] + # Retrieve connection info from Cinder's initialize_connection API. + # The info returned will be accurate for the source server. + volume_id = vol['connection_info']['serial'] + connection_info = volume_api.initialize_connection(context, + volume_id, + connector) + + # Pull out multipath_id from the bdm information. The + # multipath_id can be placed into the connection info + # because it is based off of the volume and will be the + # same on the source and destination hosts. + if 'multipath_id' in vol['connection_info']['data']: + multipath_id = vol['connection_info']['data']['multipath_id'] + connection_info['data']['multipath_id'] = multipath_id + disk_dev = vol['mount_device'].rpartition("/")[2] self._disconnect_volume(connection_info, disk_dev) |