diff --git a/nova/tests/unit/virt/libvirt/fake_imagebackend.py b/nova/tests/unit/virt/libvirt/fake_imagebackend.py index 2091aafadafb..a8061b400f2c 100644 --- a/nova/tests/unit/virt/libvirt/fake_imagebackend.py +++ b/nova/tests/unit/virt/libvirt/fake_imagebackend.py @@ -196,16 +196,15 @@ class ImageBackendFixture(fixtures.Fixture): if self.imported_files is not None: self.imported_files.append((local_filename, remote_filename)) - def _fake_libvirt_info(self, mock_disk, disk_bus, disk_dev, device_type, - cache_mode, extra_specs, hypervisor_version, - disk_unit=None): + def _fake_libvirt_info(self, mock_disk, disk_info, cache_mode, + extra_specs, hypervisor_version, disk_unit=None): # For tests in test_virt_drivers which expect libvirt_info to be # functional info = config.LibvirtConfigGuestDisk() info.source_type = 'file' - info.source_device = device_type - info.target_bus = disk_bus - info.target_dev = disk_dev + info.source_device = disk_info['type'] + info.target_bus = disk_info['bus'] + info.target_dev = disk_info['dev'] info.driver_cache = cache_mode info.driver_format = 'raw' info.source_path = mock_disk.path diff --git a/nova/tests/unit/virt/libvirt/test_imagebackend.py b/nova/tests/unit/virt/libvirt/test_imagebackend.py index 7e21b06d284c..89223357f81b 100644 --- a/nova/tests/unit/virt/libvirt/test_imagebackend.py +++ b/nova/tests/unit/virt/libvirt/test_imagebackend.py @@ -171,10 +171,13 @@ class _ImageTestCase(object): 'quota:disk_total_bytes_sec': 30 * units.Mi, 'quota:disk_total_iops_sec': 3 * units.Ki, } + disk_info = { + 'bus': 'virtio', + 'dev': '/dev/vda', + 'type': 'cdrom', + } - disk = image.libvirt_info(disk_bus="virtio", - disk_dev="/dev/vda", - device_type="cdrom", + disk = image.libvirt_info(disk_info, cache_mode="none", extra_specs=extra_specs, hypervisor_version=4004001, diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 6e60f3fe2351..3a7ca144ed12 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -3892,10 +3892,7 @@ class LibvirtDriver(driver.ComputeDriver): if 'unit' in disk_mapping and disk_info['bus'] == 'scsi': disk_unit = disk_mapping['unit'] disk_mapping['unit'] += 1 # Increments for the next disk added - conf = disk.libvirt_info(disk_info['bus'], - disk_info['dev'], - disk_info['type'], - self.disk_cachemode, + conf = disk.libvirt_info(disk_info, self.disk_cachemode, inst_type['extra_specs'], self._host.get_version(), disk_unit=disk_unit) diff --git a/nova/virt/libvirt/imagebackend.py b/nova/virt/libvirt/imagebackend.py index fcdedac74de9..5b4f72354e7a 100644 --- a/nova/virt/libvirt/imagebackend.py +++ b/nova/virt/libvirt/imagebackend.py @@ -119,24 +119,23 @@ class Image(object): """ pass - def libvirt_info(self, disk_bus, disk_dev, device_type, cache_mode, + def libvirt_info(self, disk_info, cache_mode, extra_specs, hypervisor_version, boot_order=None, disk_unit=None): """Get `LibvirtConfigGuestDisk` filled for this image. - :disk_dev: Disk bus device name - :disk_bus: Disk bus type - :device_type: Device type for this image. + :disk_info: Metadata generated by libvirt.blockinfo.get_disk_mapping :cache_mode: Caching mode for this image :extra_specs: Instance type extra specs dict. :hypervisor_version: the hypervisor version :boot_order: Disk device boot order """ + disk_bus = disk_info['bus'] info = vconfig.LibvirtConfigGuestDisk() info.source_type = self.source_type - info.source_device = device_type + info.source_device = disk_info['type'] info.target_bus = disk_bus - info.target_dev = disk_dev + info.target_dev = disk_info['dev'] info.driver_cache = cache_mode info.driver_discard = self.discard_mode info.driver_io = self.driver_io @@ -825,28 +824,27 @@ class Rbd(Image): self.discard_mode = CONF.libvirt.hw_disk_discard - def libvirt_info(self, disk_bus, disk_dev, device_type, cache_mode, + def libvirt_info(self, disk_info, cache_mode, extra_specs, hypervisor_version, boot_order=None, disk_unit=None): """Get `LibvirtConfigGuestDisk` filled for this image. - :disk_dev: Disk bus device name - :disk_bus: Disk bus type - :device_type: Device type for this image. + :disk_info: Metadata generated by libvirt.blockinfo.get_disk_mapping :cache_mode: Caching mode for this image :extra_specs: Instance type extra specs dict. :hypervisor_version: the hypervisor version :boot_order: Disk device boot order """ info = vconfig.LibvirtConfigGuestDisk() + disk_bus = disk_info['bus'] hosts, ports = self.driver.get_mon_addrs() - info.source_device = device_type + info.source_device = disk_info['type'] info.driver_format = 'raw' info.driver_cache = cache_mode info.driver_discard = self.discard_mode info.target_bus = disk_bus - info.target_dev = disk_dev + info.target_dev = disk_info['dev'] info.source_type = 'network' info.source_protocol = 'rbd' info.source_name = '%s/%s' % (self.pool, self.rbd_name)