Merge "Libvirt: Making the video driver element configurable"
This commit is contained in:
commit
5f14f9df59
|
@ -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.")
|
||||
|
|
|
@ -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')
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue