mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
devicedisk: Tweak driver defaults for xen
Following some discussion here: https://bugzilla.redhat.com/show_bug.cgi?id=1171550 jfehlig suggested better defaults for modern xen. End result is: - Drop the blktap check, since it's deprecated (yaay) - If xen + block device, use driver_name=phy - Otherwise if on modern enough libvirt + libxl, do the same thing we do for qemu.
This commit is contained in:
parent
117cad551d
commit
7c10d8a27f
@ -10,6 +10,7 @@
|
||||
<on_crash>restart</on_crash>
|
||||
<devices>
|
||||
<disk type="file" device="disk">
|
||||
<driver name="qemu" type="qcow2"/>
|
||||
<source file="/dev/default-pool/testvol1.img"/>
|
||||
<target dev="xvda" bus="xen"/>
|
||||
</disk>
|
||||
|
@ -20,11 +20,13 @@
|
||||
<on_crash>restart</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
|
||||
<disk type="file" device="disk">
|
||||
<source file="/dev/default-pool/testvol1.img"/>
|
||||
<disk type="block" device="disk">
|
||||
<driver name="phy"/>
|
||||
<source dev="/iscsi-pool/diskvol1"/>
|
||||
<target dev="hda" bus="ide"/>
|
||||
</disk>
|
||||
<disk type="file" device="cdrom">
|
||||
<driver name="qemu" type="qcow2"/>
|
||||
<source file="/dev/default-pool/testvol1.img"/>
|
||||
<target dev="hdb" bus="ide"/>
|
||||
<readonly/>
|
||||
|
@ -15,6 +15,7 @@
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<disk type="file" device="disk">
|
||||
<driver name="qemu" type="qcow2"/>
|
||||
<source file="/dev/default-pool/testvol1.img"/>
|
||||
<target dev="xvda" bus="xen"/>
|
||||
</disk>
|
||||
@ -39,6 +40,7 @@
|
||||
<on_crash>restart</on_crash>
|
||||
<devices>
|
||||
<disk type="file" device="disk">
|
||||
<driver name="qemu" type="qcow2"/>
|
||||
<source file="/dev/default-pool/testvol1.img"/>
|
||||
<target dev="xvda" bus="xen"/>
|
||||
</disk>
|
||||
|
@ -95,6 +95,7 @@ test_files = {
|
||||
'NEWCLONEIMG2' : new_images[1],
|
||||
'NEWCLONEIMG3' : new_images[2],
|
||||
'AUTOMANAGEIMG' : "/some/new/pool/dir/new",
|
||||
'BLOCKVOL' : '/iscsi-pool/diskvol1',
|
||||
'EXISTIMG1' : "/dev/default-pool/testvol1.img",
|
||||
'EXISTIMG2' : "/dev/default-pool/testvol2.img",
|
||||
'EXISTIMG3' : exist_images[0],
|
||||
@ -446,7 +447,7 @@ c.add_compare(""" \
|
||||
--disk %(NEWIMG1)s,sparse=false,size=.001,perms=ro,error_policy=enospace,discard=unmap \
|
||||
--disk device=cdrom,bus=sata,read_bytes_sec=1,read_iops_sec=2,total_bytes_sec=10,total_iops_sec=20,write_bytes_sec=5,write_iops_sec=6 \
|
||||
--disk size=1 \
|
||||
--disk /iscsi-pool/diskvol1 \
|
||||
--disk %(BLOCKVOL)s \
|
||||
--disk /dev/default-pool/iso-vol \
|
||||
--disk /dev/default-pool/iso-vol,format=qcow2 \
|
||||
--disk source_pool=rbd-ceph,source_volume=some-rbd-vol,size=.1 \
|
||||
@ -740,7 +741,7 @@ c = vinst.add_category("xen", "--connect %(URI-XEN)s --noautoconsole")
|
||||
c.add_valid("--disk %(EXISTIMG1)s --location %(TREEDIR)s --paravirt --graphics none") # Xen PV install headless
|
||||
c.add_compare("--disk %(EXISTIMG1)s --import", "xen-default") # Xen default
|
||||
c.add_compare("--disk %(EXISTIMG1)s --location %(TREEDIR)s --paravirt", "xen-pv") # Xen PV
|
||||
c.add_compare("--disk %(EXISTIMG1)s --cdrom %(EXISTIMG1)s --livecd --hvm", "xen-hvm") # Xen HVM
|
||||
c.add_compare("--disk %(BLOCKVOL)s --cdrom %(EXISTIMG1)s --livecd --hvm", "xen-hvm") # Xen HVM
|
||||
|
||||
|
||||
|
||||
|
@ -41,12 +41,12 @@ def _qemu_sanitize_drvtype(phystype, fmt, manual_format=False):
|
||||
|
||||
if phystype == VirtualDisk.TYPE_BLOCK:
|
||||
if not fmt:
|
||||
return VirtualDisk.DRIVER_QEMU_RAW
|
||||
return VirtualDisk.DRIVER_TYPE_RAW
|
||||
if fmt and not manual_format:
|
||||
return VirtualDisk.DRIVER_QEMU_RAW
|
||||
return VirtualDisk.DRIVER_TYPE_RAW
|
||||
|
||||
if fmt in raw_list:
|
||||
return VirtualDisk.DRIVER_QEMU_RAW
|
||||
return VirtualDisk.DRIVER_TYPE_RAW
|
||||
|
||||
return fmt
|
||||
|
||||
@ -94,22 +94,9 @@ def _is_dir_searchable(uid, username, path):
|
||||
class VirtualDisk(VirtualDevice):
|
||||
virtual_device_type = VirtualDevice.VIRTUAL_DEV_DISK
|
||||
|
||||
DRIVER_FILE = "file"
|
||||
DRIVER_PHY = "phy"
|
||||
DRIVER_TAP = "tap"
|
||||
DRIVER_QEMU = "qemu"
|
||||
driver_names = [DRIVER_FILE, DRIVER_PHY, DRIVER_TAP, DRIVER_QEMU]
|
||||
|
||||
DRIVER_QEMU_RAW = "raw"
|
||||
# No list here, since there are many other valid values
|
||||
|
||||
DRIVER_TAP_RAW = "aio"
|
||||
DRIVER_TAP_QCOW = "qcow"
|
||||
DRIVER_TAP_VMDK = "vmdk"
|
||||
DRIVER_TAP_VDISK = "vdisk"
|
||||
DRIVER_TAP_QED = "qed"
|
||||
driver_types = [DRIVER_TAP_RAW, DRIVER_TAP_QCOW,
|
||||
DRIVER_TAP_VMDK, DRIVER_TAP_VDISK, DRIVER_TAP_QED]
|
||||
DRIVER_NAME_PHY = "phy"
|
||||
DRIVER_NAME_QEMU = "qemu"
|
||||
DRIVER_TYPE_RAW = "raw"
|
||||
|
||||
CACHE_MODE_NONE = "none"
|
||||
CACHE_MODE_WRITETHROUGH = "writethrough"
|
||||
@ -548,8 +535,15 @@ class VirtualDisk(VirtualDevice):
|
||||
def _get_default_driver_name(self):
|
||||
if not self.path:
|
||||
return None
|
||||
if self.conn.is_qemu():
|
||||
return self.DRIVER_QEMU
|
||||
|
||||
# Recommended xen defaults from here:
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1171550#c9
|
||||
# If type block, use name=phy. Otherwise do the same as qemu
|
||||
if self.conn.is_xen() and self.type == self.TYPE_BLOCK:
|
||||
return self.DRIVER_NAME_PHY
|
||||
if self.conn.check_support(
|
||||
self.conn.SUPPORT_CONN_DISK_DRIVER_NAME_QEMU):
|
||||
return self.DRIVER_NAME_QEMU
|
||||
return None
|
||||
|
||||
def _get_default_driver_type(self):
|
||||
@ -562,7 +556,7 @@ class VirtualDisk(VirtualDevice):
|
||||
|
||||
http://lists.gnu.org/archive/html/qemu-devel/2008-04/msg00675.html
|
||||
"""
|
||||
if self.driver_name != self.DRIVER_QEMU:
|
||||
if self.driver_name != self.DRIVER_NAME_QEMU:
|
||||
return None
|
||||
|
||||
drvtype = self._storage_backend.get_driver_type()
|
||||
@ -879,12 +873,6 @@ class VirtualDisk(VirtualDevice):
|
||||
if self.is_cdrom() and guest.os.is_s390x():
|
||||
self.bus = "scsi"
|
||||
|
||||
if (guest.os.is_xenpv() and
|
||||
self.type == VirtualDisk.TYPE_FILE and
|
||||
self.driver_name is None and
|
||||
util.is_blktap_capable(self.conn)):
|
||||
self.driver_name = VirtualDisk.DRIVER_TAP
|
||||
|
||||
if not self.conn.is_qemu():
|
||||
return
|
||||
if not self.is_disk():
|
||||
|
@ -310,8 +310,18 @@ SUPPORT_CONN_SPICE_COMPRESSION = _make(version="0.9.1")
|
||||
SUPPORT_CONN_VMPORT = _make(
|
||||
version="1.2.16", hv_version={"qemu": "2.2.0", "test": 0})
|
||||
|
||||
# This is for disk <driver name=qemu>. xen supports this, but it's
|
||||
# limited to arbitrary new enough xen, since I know libxl can handle it
|
||||
# but I don't think the old xend driver does.
|
||||
SUPPORT_CONN_DISK_DRIVER_NAME_QEMU = _make(
|
||||
hv_version={"qemu": 0, "xen": "4.2.0"},
|
||||
hv_libvirt_version={"qemu": 0, "xen": "1.1.0"})
|
||||
|
||||
|
||||
#################
|
||||
# Domain checks #
|
||||
#################
|
||||
|
||||
# Domain checks
|
||||
SUPPORT_DOMAIN_GETVCPUS = _make(function="virDomain.vcpus", run_args=())
|
||||
SUPPORT_DOMAIN_XML_INACTIVE = _make(function="virDomain.XMLDesc", run_args=(),
|
||||
flag="VIR_DOMAIN_XML_INACTIVE")
|
||||
@ -338,7 +348,10 @@ SUPPORT_DOMAIN_MEMORY_STATS = _make(
|
||||
SUPPORT_DOMAIN_STATE = _make(function="virDomain.state", run_args=())
|
||||
|
||||
|
||||
# Pool checks
|
||||
###############
|
||||
# Pool checks #
|
||||
###############
|
||||
|
||||
SUPPORT_POOL_CREATEVOLFROM = _make(
|
||||
function="virStoragePool.createXMLFrom", version="0.8.0")
|
||||
SUPPORT_POOL_ISACTIVE = _make(function="virStoragePool.isActive", run_args=())
|
||||
@ -352,7 +365,10 @@ SUPPORT_POOL_REFLINK = _make(
|
||||
version="1.2.13")
|
||||
|
||||
|
||||
# Interface checks
|
||||
####################
|
||||
# Interface checks #
|
||||
####################
|
||||
|
||||
SUPPORT_INTERFACE_XML_INACTIVE = _make(function="virInterface.XMLDesc",
|
||||
flag="VIR_INTERFACE_XML_INACTIVE",
|
||||
run_args=())
|
||||
@ -360,12 +376,19 @@ SUPPORT_INTERFACE_ISACTIVE = _make(
|
||||
function="virInterface.isActive", run_args=())
|
||||
|
||||
|
||||
# Stream checks
|
||||
#################
|
||||
# Stream checks #
|
||||
#################
|
||||
|
||||
# Latest I tested with, and since we will use it by default
|
||||
# for URL installs, want to be sure it works
|
||||
SUPPORT_STREAM_UPLOAD = _make(version="0.9.4")
|
||||
|
||||
# Network checks
|
||||
|
||||
##################
|
||||
# Network checks #
|
||||
##################
|
||||
|
||||
SUPPORT_NET_ISACTIVE = _make(function="virNetwork.isActive", run_args=())
|
||||
|
||||
|
||||
|
@ -28,9 +28,6 @@ import sys
|
||||
import libvirt
|
||||
|
||||
|
||||
_host_blktap_capable = None
|
||||
|
||||
|
||||
def listify(l):
|
||||
if l is None:
|
||||
return []
|
||||
@ -288,27 +285,6 @@ def default_network(conn):
|
||||
return ["network", "default"]
|
||||
|
||||
|
||||
def is_blktap_capable(conn):
|
||||
# Ideally we would get this from libvirt capabilities XML
|
||||
if conn.is_remote():
|
||||
return False
|
||||
|
||||
global _host_blktap_capable
|
||||
if _host_blktap_capable is not None:
|
||||
return _host_blktap_capable
|
||||
|
||||
if "VIRTINST_TEST_SUITE" not in os.environ:
|
||||
lines = file("/proc/modules").readlines()
|
||||
for line in lines:
|
||||
if line.startswith("blktap ") or line.startswith("xenblktap "):
|
||||
_host_blktap_capable = True
|
||||
break
|
||||
|
||||
if not _host_blktap_capable:
|
||||
_host_blktap_capable = False
|
||||
return _host_blktap_capable
|
||||
|
||||
|
||||
def randomUUID(conn):
|
||||
if conn.fake_conn_predictable():
|
||||
# Testing hack
|
||||
|
Loading…
Reference in New Issue
Block a user