diff options
Diffstat (limited to 'nova/virt/libvirt/driver.py')
-rw-r--r-- | nova/virt/libvirt/driver.py | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 8668087b65..158b647510 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -1266,9 +1266,10 @@ class LibvirtDriver(driver.ComputeDriver): driver_block_device.get_volume_id(connection_info), instance=instance) - def _extend_volume(self, connection_info, instance): + def _extend_volume(self, connection_info, instance, requested_size): vol_driver = self._get_volume_driver(connection_info) - return vol_driver.extend_volume(connection_info, instance) + return vol_driver.extend_volume(connection_info, instance, + requested_size) def _use_native_luks(self, encryption=None): """Is LUKS the required provider and native QEMU LUKS available @@ -1618,9 +1619,10 @@ class LibvirtDriver(driver.ComputeDriver): self._disconnect_volume(context, connection_info, instance, encryption=encryption) - def extend_volume(self, connection_info, instance): + def extend_volume(self, connection_info, instance, requested_size): try: - new_size = self._extend_volume(connection_info, instance) + new_size = self._extend_volume(connection_info, instance, + requested_size) except NotImplementedError: raise exception.ExtendVolumeNotSupported() @@ -1631,7 +1633,22 @@ class LibvirtDriver(driver.ComputeDriver): state = guest.get_power_state(self._host) active_state = state in (power_state.RUNNING, power_state.PAUSED) if active_state: - disk_path = connection_info['data']['device_path'] + if 'device_path' in connection_info['data']: + disk_path = connection_info['data']['device_path'] + else: + # Some drivers (eg. net) don't put the device_path + # into the connection_info. Match disks by their serial + # number instead + volume_id = driver_block_device.get_volume_id( + connection_info) + disk = next(iter([ + d for d in guest.get_all_disks() + if d.serial == volume_id + ]), None) + if not disk: + raise exception.VolumeNotFound(volume_id=volume_id) + disk_path = disk.target_dev + LOG.debug('resizing block device %(dev)s to %(size)u kb', {'dev': disk_path, 'size': new_size}) dev = guest.get_block_device(disk_path) |