libvirt driver: set os_type to support xen hvm/pv
Generate libvirt config for xen hvm and pv guests based on instance vm_mode. The vm_mode can be set via the vm_mode image property. Use hvmloader for vm_mode.HVM guests. libvirt_type xen still defaults to vm_mode.XEN (pv), to not change any behavior. Change-Id: I5f92bedf6588ab2674d784772a5ecdb895fabe40
This commit is contained in:
@@ -800,6 +800,19 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
self._check_xml_and_uri(instance_data,
|
||||
expect_kernel=False, expect_ramdisk=False)
|
||||
|
||||
def test_xml_and_uri_no_ramdisk_no_kernel_xen_hvm(self):
|
||||
instance_data = dict(self.test_instance)
|
||||
instance_data.update({'vm_mode': vm_mode.HVM})
|
||||
self._check_xml_and_uri(instance_data, expect_kernel=False,
|
||||
expect_ramdisk=False, expect_xen_hvm=True)
|
||||
|
||||
def test_xml_and_uri_no_ramdisk_no_kernel_xen_pv(self):
|
||||
instance_data = dict(self.test_instance)
|
||||
instance_data.update({'vm_mode': vm_mode.XEN})
|
||||
self._check_xml_and_uri(instance_data, expect_kernel=False,
|
||||
expect_ramdisk=False, expect_xen_hvm=False,
|
||||
xen_only=True)
|
||||
|
||||
def test_xml_and_uri_no_ramdisk(self):
|
||||
instance_data = dict(self.test_instance)
|
||||
instance_data['kernel_id'] = 'aki-deadbeef'
|
||||
@@ -1356,7 +1369,7 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
instance_ref['uuid'])
|
||||
|
||||
def _check_xml_and_uri(self, instance, expect_ramdisk, expect_kernel,
|
||||
rescue=None):
|
||||
rescue=None, expect_xen_hvm=False, xen_only=False):
|
||||
user_context = context.RequestContext(self.user_id, self.project_id)
|
||||
instance_ref = db.instance_create(user_context, instance)
|
||||
network_ref = db.project_get_networks(context.get_admin_context(),
|
||||
@@ -1379,10 +1392,22 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
'xen': ('xen:///',
|
||||
[(lambda t: t.find('.').get('type'), 'xen'),
|
||||
(lambda t: t.find('./os/type').text,
|
||||
vm_mode.XEN)]),
|
||||
}
|
||||
vm_mode.XEN)])}
|
||||
|
||||
for hypervisor_type in ['qemu', 'kvm', 'xen']:
|
||||
if expect_xen_hvm or xen_only:
|
||||
hypervisors_to_check = ['xen']
|
||||
else:
|
||||
hypervisors_to_check = ['qemu', 'kvm', 'xen']
|
||||
|
||||
if expect_xen_hvm:
|
||||
type_uri_map = {}
|
||||
type_uri_map['xen'] = ('xen:///',
|
||||
[(lambda t: t.find('.').get('type'),
|
||||
'xen'),
|
||||
(lambda t: t.find('./os/type').text,
|
||||
vm_mode.HVM)])
|
||||
|
||||
for hypervisor_type in hypervisors_to_check:
|
||||
check_list = type_uri_map[hypervisor_type][1]
|
||||
|
||||
if rescue:
|
||||
|
||||
@@ -556,7 +556,7 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
|
||||
</devices>
|
||||
</domain>""")
|
||||
|
||||
def test_config_xen(self):
|
||||
def test_config_xen_pv(self):
|
||||
obj = config.LibvirtConfigGuest()
|
||||
obj.virt_type = "xen"
|
||||
obj.memory = 1024 * 1024 * 100
|
||||
@@ -599,6 +599,47 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
|
||||
</devices>
|
||||
</domain>""")
|
||||
|
||||
def test_config_xen_hvm(self):
|
||||
obj = config.LibvirtConfigGuest()
|
||||
obj.virt_type = "xen"
|
||||
obj.memory = 1024 * 1024 * 100
|
||||
obj.vcpus = 2
|
||||
obj.name = "demo"
|
||||
obj.uuid = "b38a3f43-4be2-4046-897f-b67c2f5e0147"
|
||||
obj.os_type = "hvm"
|
||||
obj.os_loader = '/usr/lib/xen/boot/hvmloader'
|
||||
obj.os_root = "root=xvda"
|
||||
obj.os_cmdline = "console=xvc0"
|
||||
|
||||
disk = config.LibvirtConfigGuestDisk()
|
||||
disk.source_type = "file"
|
||||
disk.source_path = "/tmp/img"
|
||||
disk.target_dev = "/dev/xvda"
|
||||
disk.target_bus = "xen"
|
||||
|
||||
obj.add_device(disk)
|
||||
|
||||
xml = obj.to_xml()
|
||||
self.assertXmlEqual(xml, """
|
||||
<domain type="xen">
|
||||
<uuid>b38a3f43-4be2-4046-897f-b67c2f5e0147</uuid>
|
||||
<name>demo</name>
|
||||
<memory>104857600</memory>
|
||||
<vcpu>2</vcpu>
|
||||
<os>
|
||||
<type>hvm</type>
|
||||
<loader>/usr/lib/xen/boot/hvmloader</loader>
|
||||
<cmdline>console=xvc0</cmdline>
|
||||
<root>root=xvda</root>
|
||||
</os>
|
||||
<devices>
|
||||
<disk type="file" device="disk">
|
||||
<source file="/tmp/img"/>
|
||||
<target bus="xen" dev="/dev/xvda"/>
|
||||
</disk>
|
||||
</devices>
|
||||
</domain>""")
|
||||
|
||||
def test_config_kvm(self):
|
||||
obj = config.LibvirtConfigGuest()
|
||||
obj.virt_type = "kvm"
|
||||
|
||||
Reference in New Issue
Block a user