mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
VirtualDisk: Handle the blktap default
And cache the blktap lookup once for the localhost
This commit is contained in:
parent
ef878a5d49
commit
3f532fe263
@ -27,7 +27,6 @@ from gi.repository import Gdk
|
|||||||
# pylint: enable=E0611
|
# pylint: enable=E0611
|
||||||
|
|
||||||
import virtinst
|
import virtinst
|
||||||
from virtinst import util
|
|
||||||
from virtinst import (VirtualChannelDevice, VirtualParallelDevice,
|
from virtinst import (VirtualChannelDevice, VirtualParallelDevice,
|
||||||
VirtualSerialDevice, VirtualConsoleDevice,
|
VirtualSerialDevice, VirtualConsoleDevice,
|
||||||
VirtualVideoDevice, VirtualWatchdog,
|
VirtualVideoDevice, VirtualWatchdog,
|
||||||
@ -1374,7 +1373,7 @@ class vmmAddHardware(vmmGObjectUI):
|
|||||||
def validate(self, page_num):
|
def validate(self, page_num):
|
||||||
ret = self._validate(page_num)
|
ret = self._validate(page_num)
|
||||||
if ret is not False and self._dev:
|
if ret is not False and self._dev:
|
||||||
self._dev.set_defaults()
|
self._dev.set_defaults(self.vm.get_xmlobj())
|
||||||
self._dev.validate()
|
self._dev.validate()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@ -1413,7 +1412,8 @@ class vmmAddHardware(vmmGObjectUI):
|
|||||||
disk.bus = bus
|
disk.bus = bus
|
||||||
disk.set_create_storage(size=disksize, sparse=sparse,
|
disk.set_create_storage(size=disksize, sparse=sparse,
|
||||||
fmt=fmt or None)
|
fmt=fmt or None)
|
||||||
disk.driver_cache = cache
|
if cache:
|
||||||
|
disk.driver_cache = cache
|
||||||
|
|
||||||
if not fmt:
|
if not fmt:
|
||||||
fmt = self.conn.get_default_storage_format()
|
fmt = self.conn.get_default_storage_format()
|
||||||
@ -1422,11 +1422,6 @@ class vmmAddHardware(vmmGObjectUI):
|
|||||||
fmt in disk.get_vol_install().list_formats()):
|
fmt in disk.get_vol_install().list_formats()):
|
||||||
logging.debug("Setting disk format from prefs: %s", fmt)
|
logging.debug("Setting disk format from prefs: %s", fmt)
|
||||||
disk.get_vol_install().format = fmt
|
disk.get_vol_install().format = fmt
|
||||||
|
|
||||||
if (disk.type == virtinst.VirtualDisk.TYPE_FILE and
|
|
||||||
not self.vm.is_hvm() and
|
|
||||||
util.is_blktap_capable(self.conn.get_backend())):
|
|
||||||
disk.driver_name = virtinst.VirtualDisk.DRIVER_TAP
|
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
return self.err.val_err(_("Storage parameter error."), e)
|
return self.err.val_err(_("Storage parameter error."), e)
|
||||||
|
|
||||||
|
@ -744,10 +744,16 @@ class VirtualDisk(VirtualDevice):
|
|||||||
if volobj:
|
if volobj:
|
||||||
self._change_backend(None, volobj)
|
self._change_backend(None, volobj)
|
||||||
|
|
||||||
def set_defaults(self):
|
def set_defaults(self, guest):
|
||||||
if self.is_cdrom():
|
if self.is_cdrom():
|
||||||
self.read_only = True
|
self.read_only = True
|
||||||
|
|
||||||
|
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():
|
if not self.conn.is_qemu():
|
||||||
return
|
return
|
||||||
if not self.is_disk():
|
if not self.is_disk():
|
||||||
|
@ -30,7 +30,6 @@ import virtinst
|
|||||||
from virtinst import util
|
from virtinst import util
|
||||||
from virtinst import support
|
from virtinst import support
|
||||||
from virtinst import OSXML
|
from virtinst import OSXML
|
||||||
from virtinst import VirtualDisk
|
|
||||||
from virtinst import VirtualDevice
|
from virtinst import VirtualDevice
|
||||||
from virtinst import Clock
|
from virtinst import Clock
|
||||||
from virtinst import Seclabel
|
from virtinst import Seclabel
|
||||||
@ -209,7 +208,6 @@ class Guest(XMLBuilder):
|
|||||||
Add the passed device to the guest's device list.
|
Add the passed device to the guest's device list.
|
||||||
|
|
||||||
@param dev: VirtualDevice instance to attach to guest
|
@param dev: VirtualDevice instance to attach to guest
|
||||||
@param set_defaults: Whether to set defaults for the device
|
|
||||||
"""
|
"""
|
||||||
self._add_child(dev)
|
self._add_child(dev)
|
||||||
|
|
||||||
@ -605,7 +603,7 @@ class Guest(XMLBuilder):
|
|||||||
self._set_feature_defaults()
|
self._set_feature_defaults()
|
||||||
|
|
||||||
for dev in self.get_all_devices():
|
for dev in self.get_all_devices():
|
||||||
dev.set_defaults()
|
dev.set_defaults(self)
|
||||||
self._add_implied_controllers()
|
self._add_implied_controllers()
|
||||||
self._check_address_multi()
|
self._check_address_multi()
|
||||||
self._set_disk_defaults()
|
self._set_disk_defaults()
|
||||||
@ -790,13 +788,6 @@ class Guest(XMLBuilder):
|
|||||||
if not disk.bus:
|
if not disk.bus:
|
||||||
set_disk_bus(disk)
|
set_disk_bus(disk)
|
||||||
|
|
||||||
# Default file backed PV guests to tap driver
|
|
||||||
if (self.os.is_xenpv() and
|
|
||||||
disk.type == VirtualDisk.TYPE_FILE and
|
|
||||||
disk.driver_name is None and
|
|
||||||
util.is_blktap_capable(self.conn)):
|
|
||||||
disk.driver_name = VirtualDisk.DRIVER_TAP
|
|
||||||
|
|
||||||
# Generate disk targets
|
# Generate disk targets
|
||||||
if disk.target:
|
if disk.target:
|
||||||
used_targets.append(disk.target)
|
used_targets.append(disk.target)
|
||||||
|
@ -28,6 +28,9 @@ import libvirt
|
|||||||
import libxml2
|
import libxml2
|
||||||
|
|
||||||
|
|
||||||
|
_host_blktap_capable = None
|
||||||
|
|
||||||
|
|
||||||
def listify(l):
|
def listify(l):
|
||||||
if l is None:
|
if l is None:
|
||||||
return []
|
return []
|
||||||
@ -348,13 +351,19 @@ def is_blktap_capable(conn):
|
|||||||
if conn.is_remote():
|
if conn.is_remote():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
f = open("/proc/modules")
|
global _host_blktap_capable
|
||||||
lines = f.readlines()
|
if _host_blktap_capable is not None:
|
||||||
f.close()
|
return _host_blktap_capable
|
||||||
|
|
||||||
|
lines = file("/proc/modules").readlines()
|
||||||
for line in lines:
|
for line in lines:
|
||||||
if line.startswith("blktap ") or line.startswith("xenblktap "):
|
if line.startswith("blktap ") or line.startswith("xenblktap "):
|
||||||
return True
|
_host_blktap_capable = True
|
||||||
return False
|
break
|
||||||
|
|
||||||
|
if not _host_blktap_capable:
|
||||||
|
_host_blktap_capable = False
|
||||||
|
return _host_blktap_capable
|
||||||
|
|
||||||
|
|
||||||
def randomUUID(conn):
|
def randomUUID(conn):
|
||||||
|
@ -864,11 +864,11 @@ class XMLBuilder(object):
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def set_defaults(self):
|
def set_defaults(self, guest):
|
||||||
"""
|
"""
|
||||||
Encode any default values if needed
|
Encode any default values if needed
|
||||||
"""
|
"""
|
||||||
pass
|
ignore = guest
|
||||||
|
|
||||||
|
|
||||||
###################
|
###################
|
||||||
|
Loading…
Reference in New Issue
Block a user