Merge "Libvirt: Making the video driver element configurable"

This commit is contained in:
Jenkins 2013-12-11 22:13:18 +00:00 committed by Gerrit Code Review
commit 5f14f9df59
3 changed files with 58 additions and 1 deletions

View File

@ -1490,3 +1490,7 @@ class PciDeviceUnsupportedHypervisor(NovaException):
class KeyManagerError(NovaException):
msg_fmt = _("Key manager error: %(reason)s")
class InvalidVideoMode(Invalid):
msg_fmt = _("Provided video model (%(model)s) is not supported.")

View File

@ -1137,6 +1137,51 @@ class LibvirtConnTestCase(test.TestCase):
self.assertEqual(cfg.devices[6].type, "vnc")
self.assertEqual(cfg.devices[7].type, "spice")
def test_unsupported_video_driver_through_image_meta(self):
self.flags(virt_type='kvm', group='libvirt')
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
instance_ref = db.instance_create(self.context, self.test_instance)
disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type,
instance_ref)
image_meta = {"properties": {"hw_video_model": "something"}}
self.assertRaises(exception.InvalidVideoMode,
conn.get_guest_config,
instance_ref,
[],
image_meta,
disk_info)
def test_get_guest_config_with_video_driver_through_image_meta(self):
self.flags(virt_type='kvm', group='libvirt')
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
instance_ref = db.instance_create(self.context, self.test_instance)
disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type,
instance_ref)
image_meta = {"properties": {"hw_video_model": "vmvga"}}
cfg = conn.get_guest_config(instance_ref, [], image_meta, disk_info)
self.assertEqual(len(cfg.devices), 7)
self.assertEqual(type(cfg.devices[0]),
vconfig.LibvirtConfigGuestDisk)
self.assertEqual(type(cfg.devices[1]),
vconfig.LibvirtConfigGuestDisk)
self.assertEqual(type(cfg.devices[2]),
vconfig.LibvirtConfigGuestSerial)
self.assertEqual(type(cfg.devices[3]),
vconfig.LibvirtConfigGuestSerial)
self.assertEqual(type(cfg.devices[4]),
vconfig.LibvirtConfigGuestInput)
self.assertEqual(type(cfg.devices[5]),
vconfig.LibvirtConfigGuestGraphics)
self.assertEqual(type(cfg.devices[6]),
vconfig.LibvirtConfigGuestVideo)
self.assertEqual(cfg.devices[5].type, "vnc")
self.assertEqual(cfg.devices[6].type, "vmvga")
def test_get_guest_config_with_qga_through_image_meta(self):
self.flags(virt_type='kvm', group='libvirt')

View File

@ -3162,8 +3162,16 @@ class LibvirtDriver(driver.ComputeDriver):
add_video_driver = True
if add_video_driver:
VALID_VIDEO_DEVICES = ("vga", "cirrus", "vmvga", "xen", "qxl")
video = vconfig.LibvirtConfigGuestVideo()
if CONF.spice.enabled:
meta_prop = image_meta.get('properties', {}) if image_meta else {}
if meta_prop.get('hw_video_model'):
video.type = meta_prop.get('hw_video_model')
if (video.type not in VALID_VIDEO_DEVICES):
raise exception.InvalidVideoMode(model=video.type)
elif CONF.spice.enabled:
video.type = 'qxl'
if guest.os_type == vm_mode.XEN:
video.type = 'xen'