summaryrefslogtreecommitdiff
path: root/nova/virt/libvirt/driver.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/virt/libvirt/driver.py')
-rw-r--r--nova/virt/libvirt/driver.py27
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)