summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2012-07-20 12:07:14 +0100
committerDaniel P. Berrange <berrange@redhat.com>2012-07-20 13:47:01 +0100
commit1ec856db22c798bffbf0f7d5def0e880a8fc9842 (patch)
tree6006be0e67d5df4c61513391f54700140f9a67de
parent551078b567b9650353fd9695f7c88fb9ed1da0f9 (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.py5
-rw-r--r--nova/virt/libvirt/driver.py66
-rw-r--r--nova/virt/libvirt/imagebackend.py16
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