diff options
| author | Daniel P. Berrange <berrange@redhat.com> | 2012-07-20 12:07:14 +0100 |
|---|---|---|
| committer | Daniel P. Berrange <berrange@redhat.com> | 2012-07-20 13:47:01 +0100 |
| commit | 1ec856db22c798bffbf0f7d5def0e880a8fc9842 (patch) | |
| tree | 6006be0e67d5df4c61513391f54700140f9a67de | |
| parent | 551078b567b9650353fd9695f7c88fb9ed1da0f9 (diff) | |
Move more libvirt disk setup into the imagebackend module
Move the setup of target bus and target dev out of the libvirt
driver and into the imagebackend module to reduce code duplication
Change-Id: I6796c125af769236f93341361ee07c8319817f7f
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
| -rw-r--r-- | nova/tests/fake_imagebackend.py | 5 | ||||
| -rw-r--r-- | nova/virt/libvirt/driver.py | 66 | ||||
| -rw-r--r-- | nova/virt/libvirt/imagebackend.py | 16 |
3 files changed, 48 insertions, 39 deletions
diff --git a/nova/tests/fake_imagebackend.py b/nova/tests/fake_imagebackend.py index 8707ad657..55e59f751 100644 --- a/nova/tests/fake_imagebackend.py +++ b/nova/tests/fake_imagebackend.py @@ -37,10 +37,13 @@ class Backend(object): def cache(self, fn, fname, size=None, *args, **kwargs): pass - def libvirt_info(self, device_type, cache_mode): + def libvirt_info(self, disk_bus, disk_dev, + device_type, cache_mode): info = config.LibvirtConfigGuestDisk() info.source_type = 'file' info.source_device = device_type + info.target_bus = disk_bus + info.target_dev = disk_dev info.driver_cache = cache_mode info.driver_format = 'raw' info.source_path = self.path diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index f6f3a5f9f..d279c2ef3 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -1655,40 +1655,44 @@ class LibvirtDriver(driver.ComputeDriver): else: root_device_type = 'disk' - def disk_info(name, device_type="disk"): - image = self.image_backend.image(instance['name'], - name) - return image.libvirt_info(device_type, - self.disk_cachemode) - if FLAGS.libvirt_type == "uml": - ephemeral_disk_bus = "uml" + default_disk_bus = "uml" elif FLAGS.libvirt_type == "xen": - ephemeral_disk_bus = "xen" + default_disk_bus = "xen" else: - ephemeral_disk_bus = "virtio" + default_disk_bus = "virtio" + + def disk_info(name, disk_dev, disk_bus=default_disk_bus, + device_type="disk"): + image = self.image_backend.image(instance['name'], + name) + return image.libvirt_info(disk_bus, + disk_dev, + device_type, + self.disk_cachemode) if rescue: - diskrescue = disk_info('disk.rescue', root_device_type) - diskrescue.target_dev = self.default_root_device - diskrescue.target_bus = ephemeral_disk_bus + diskrescue = disk_info('disk.rescue', + self.default_root_device, + device_type=root_device_type) guest.add_device(diskrescue) - diskos = disk_info('disk') - diskos.target_dev = self.default_second_device - diskos.target_bus = ephemeral_disk_bus + diskos = disk_info('disk', + self.default_second_device) guest.add_device(diskos) else: ebs_root = self._volume_in_mapping(self.default_root_device, block_device_info) if not ebs_root: - diskos = disk_info('disk', root_device_type) - diskos.target_dev = root_device if root_device_type == "cdrom": - diskos.target_bus = "ide" + bus = "ide" else: - diskos.target_bus = ephemeral_disk_bus + bus = default_disk_bus + diskos = disk_info('disk', + root_device, + bus, + root_device_type) guest.add_device(diskos) ephemeral_device = None @@ -1701,9 +1705,7 @@ class LibvirtDriver(driver.ComputeDriver): ephemeral_device = self.default_second_device if ephemeral_device is not None: - disklocal = disk_info('disk.local') - disklocal.target_dev = ephemeral_device - disklocal.target_bus = ephemeral_disk_bus + disklocal = disk_info('disk.local', ephemeral_device) guest.add_device(disklocal) if ephemeral_device is not None: @@ -1717,25 +1719,21 @@ class LibvirtDriver(driver.ComputeDriver): for eph in driver.block_device_info_get_ephemerals( block_device_info): - diskeph = disk_info(_get_eph_disk(eph)) - diskeph.target_dev = block_device.strip_dev( - eph['device_name']) - diskeph.target_bus = ephemeral_disk_bus + diskeph = disk_info(_get_eph_disk(eph), + block_device.strip_dev( + eph['device_name'])) guest.add_device(diskeph) swap = driver.block_device_info_get_swap(block_device_info) if driver.swap_is_usable(swap): - diskswap = disk_info('disk.swap') - diskswap.target_dev = block_device.strip_dev( - swap['device_name']) - diskswap.target_bus = ephemeral_disk_bus + diskswap = disk_info('disk.swap', + block_device.strip_dev( + swap['device_name'])) guest.add_device(diskswap) elif (inst_type['swap'] > 0 and not self._volume_in_mapping(swap_device, block_device_info)): - diskswap = disk_info('disk.swap') - diskswap.target_dev = swap_device - diskswap.target_bus = ephemeral_disk_bus + diskswap = disk_info('disk.swap', swap_device) guest.add_device(diskswap) db.instance_update( nova_context.get_admin_context(), instance['uuid'], @@ -1758,7 +1756,7 @@ class LibvirtDriver(driver.ComputeDriver): instance['name'], "disk.config") diskconfig.target_dev = self.default_last_device - diskconfig.target_bus = ephemeral_disk_bus + diskconfig.target_bus = default_disk_bus guest.add_device(diskconfig) for (network, mapping) in network_info: diff --git a/nova/virt/libvirt/imagebackend.py b/nova/virt/libvirt/imagebackend.py index 28f0c3a21..7140e6527 100644 --- a/nova/virt/libvirt/imagebackend.py +++ b/nova/virt/libvirt/imagebackend.py @@ -73,9 +73,11 @@ class Image(object): pass @abc.abstractmethod - def libvirt_info(self, device_type, cache_mode): + def libvirt_info(self, disk_bus, disk_dev, device_type, cache_mode): """Get `LibvirtConfigGuestDisk` filled for this image. + :disk_dev: Disk bus device name + :disk_bus: Disk bus type :device_type: Device type for this image. :cache_mode: Caching mode for this image """ @@ -113,10 +115,12 @@ class Raw(Image): self.path = os.path.join(FLAGS.instances_path, instance, name) - def libvirt_info(self, device_type, cache_mode): + def libvirt_info(self, disk_bus, disk_dev, device_type, cache_mode): info = config.LibvirtConfigGuestDisk() info.source_type = 'file' info.source_device = device_type + info.target_bus = disk_bus + info.target_dev = disk_dev info.driver_cache = cache_mode info.driver_format = 'raw' info.source_path = self.path @@ -140,10 +144,12 @@ class Raw(Image): class Qcow2(Raw): - def libvirt_info(self, device_type, cache_mode): + def libvirt_info(self, disk_bus, disk_dev, device_type, cache_mode): info = config.LibvirtConfigGuestDisk() info.source_type = 'file' info.source_device = device_type + info.target_bus = disk_bus + info.target_dev = disk_dev info.driver_cache = cache_mode info.driver_format = 'qcow2' info.source_path = self.path @@ -172,10 +178,12 @@ class Lvm(Image): def escape(fname): return fname.replace('_', '__') - def libvirt_info(self, device_type, cache_mode): + def libvirt_info(self, disk_bus, disk_dev, device_type, cache_mode): info = config.LibvirtConfigGuestDisk() info.source_type = 'block' info.source_device = device_type + info.target_bus = disk_bus + info.target_dev = disk_dev info.driver_cache = cache_mode info.driver_format = 'raw' info.source_path = self.path |
