mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
VirtualDisk: Add is_disk, is_cdrom, is_floppy helpers
This commit is contained in:
parent
c2a4ca66e9
commit
3130f64e35
@ -19,7 +19,7 @@
|
|||||||
<devices>
|
<devices>
|
||||||
<emulator>/usr/libexec/qemu-kvm</emulator>
|
<emulator>/usr/libexec/qemu-kvm</emulator>
|
||||||
<disk type="file" device="floppy">
|
<disk type="file" device="floppy">
|
||||||
<driver name="qemu" type="qcow2" cache="none"/>
|
<driver name="qemu" type="qcow2"/>
|
||||||
<source file="/dev/default-pool/testvol1.img"/>
|
<source file="/dev/default-pool/testvol1.img"/>
|
||||||
<target dev="fda" bus="fdc"/>
|
<target dev="fda" bus="fdc"/>
|
||||||
</disk>
|
</disk>
|
||||||
|
@ -590,10 +590,15 @@ class VirtualDisk(VirtualDevice):
|
|||||||
if fmt and self.driver_name == self.DRIVER_QEMU:
|
if fmt and self.driver_name == self.DRIVER_QEMU:
|
||||||
self.driver_type = fmt
|
self.driver_type = fmt
|
||||||
|
|
||||||
|
def is_cdrom(self):
|
||||||
|
return self.device == self.DEVICE_CDROM
|
||||||
|
def is_floppy(self):
|
||||||
|
return self.device == self.DEVICE_FLOPPY
|
||||||
|
def is_disk(self):
|
||||||
|
return self.device == self.DEVICE_DISK
|
||||||
|
|
||||||
def can_be_empty(self):
|
def can_be_empty(self):
|
||||||
return (self.device == self.DEVICE_FLOPPY or
|
return self.is_floppy() or self.is_cdrom()
|
||||||
self.device == self.DEVICE_CDROM)
|
|
||||||
|
|
||||||
def _change_backend(self, path, vol_object):
|
def _change_backend(self, path, vol_object):
|
||||||
backend, ignore = _distill_storage(
|
backend, ignore = _distill_storage(
|
||||||
@ -667,8 +672,7 @@ class VirtualDisk(VirtualDevice):
|
|||||||
|
|
||||||
# Make sure we have access to the local path
|
# Make sure we have access to the local path
|
||||||
if not managed_storage:
|
if not managed_storage:
|
||||||
if (os.path.isdir(self.path) and
|
if (os.path.isdir(self.path) and not self.is_floppy()):
|
||||||
not self.device == self.DEVICE_FLOPPY):
|
|
||||||
raise ValueError(_("The path '%s' must be a file or a "
|
raise ValueError(_("The path '%s' must be a file or a "
|
||||||
"device, not a directory") % self.path)
|
"device, not a directory") % self.path)
|
||||||
|
|
||||||
@ -704,26 +708,27 @@ class VirtualDisk(VirtualDevice):
|
|||||||
if volobj:
|
if volobj:
|
||||||
self._change_backend(None, volobj)
|
self._change_backend(None, volobj)
|
||||||
|
|
||||||
def set_defaults(self):
|
def _set_rhel_defaults(self):
|
||||||
if self.device == self.DEVICE_CDROM:
|
if not self.conn.is_qemu():
|
||||||
self.read_only = True
|
return
|
||||||
|
if not self.is_disk():
|
||||||
if not virtinst.enable_rhel_defaults:
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# Enable cache=none for non-CDROM devs
|
# Enable cache=none for disk devs
|
||||||
if (self.conn.is_qemu() and
|
if not self.driver_cache:
|
||||||
not self.driver_cache and
|
|
||||||
self.device != self.DEVICE_CDROM):
|
|
||||||
self.driver_cache = self.CACHE_MODE_NONE
|
self.driver_cache = self.CACHE_MODE_NONE
|
||||||
|
|
||||||
# Enable AIO native for block devices
|
# Enable AIO native for block devices
|
||||||
if (self.conn.is_qemu() and
|
if (not self.driver_io and self.type == self.TYPE_BLOCK):
|
||||||
not self.driver_io and
|
|
||||||
self.device == self.DEVICE_DISK and
|
|
||||||
self.type == self.TYPE_BLOCK):
|
|
||||||
self.driver_io = self.IO_MODE_NATIVE
|
self.driver_io = self.IO_MODE_NATIVE
|
||||||
|
|
||||||
|
def set_defaults(self):
|
||||||
|
if self.is_cdrom():
|
||||||
|
self.read_only = True
|
||||||
|
|
||||||
|
if virtinst.enable_rhel_defaults:
|
||||||
|
self._set_rhel_defaults()
|
||||||
|
|
||||||
def is_size_conflict(self):
|
def is_size_conflict(self):
|
||||||
"""
|
"""
|
||||||
reports if disk size conflicts with available space
|
reports if disk size conflicts with available space
|
||||||
@ -767,16 +772,15 @@ class VirtualDisk(VirtualDevice):
|
|||||||
# error as appropriate.
|
# error as appropriate.
|
||||||
if self.bus == "virtio":
|
if self.bus == "virtio":
|
||||||
return ("vd", 1024)
|
return ("vd", 1024)
|
||||||
elif self.bus in ["sata", "scsi", "usb"]:
|
|
||||||
return ("sd", 1024)
|
|
||||||
elif self.bus == "xen":
|
elif self.bus == "xen":
|
||||||
return ("xvd", 1024)
|
return ("xvd", 1024)
|
||||||
elif self.bus == "fdc" or self.device == self.DEVICE_FLOPPY:
|
elif self.bus == "fdc" or self.is_floppy():
|
||||||
return ("fd", 2)
|
return ("fd", 2)
|
||||||
elif self.bus == "ide":
|
elif self.bus == "ide":
|
||||||
return ("hd", 4)
|
return ("hd", 4)
|
||||||
else:
|
|
||||||
return (None, None)
|
# sata, scsi, usb, sd
|
||||||
|
return ("sd", 1024)
|
||||||
|
|
||||||
def generate_target(self, skip_targets):
|
def generate_target(self, skip_targets):
|
||||||
"""
|
"""
|
||||||
@ -799,7 +803,7 @@ class VirtualDisk(VirtualDevice):
|
|||||||
raise ValueError(_("Cannot determine device bus/type."))
|
raise ValueError(_("Cannot determine device bus/type."))
|
||||||
|
|
||||||
# Special case: IDE cdrom should prefer hdc for back compat
|
# Special case: IDE cdrom should prefer hdc for back compat
|
||||||
if self.device == self.DEVICE_CDROM and prefix == "hd":
|
if self.is_cdrom() and prefix == "hd":
|
||||||
if "hdc" not in skip_targets:
|
if "hdc" not in skip_targets:
|
||||||
self.target = "hdc"
|
self.target = "hdc"
|
||||||
return self.target
|
return self.target
|
||||||
|
@ -534,6 +534,24 @@ class Guest(XMLBuilder):
|
|||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
|
||||||
|
###################################
|
||||||
|
# Guest Dictionary Helper methods #
|
||||||
|
###################################
|
||||||
|
|
||||||
|
def _is_rhel6(self):
|
||||||
|
emulator = self.emulator or ""
|
||||||
|
|
||||||
|
return (self.type in ["qemu", "kvm"] and
|
||||||
|
emulator.startswith("/usr/libexec/qemu"))
|
||||||
|
|
||||||
|
def _lookup_osdict_key(self, key, default):
|
||||||
|
"""
|
||||||
|
Use self.os_variant to find key in OSTYPES
|
||||||
|
@returns: dict value, or None if os_type/variant wasn't set
|
||||||
|
"""
|
||||||
|
return osdict.lookup_osdict_key(self.conn, self.type,
|
||||||
|
self.os_variant, key, default)
|
||||||
|
|
||||||
###################
|
###################
|
||||||
# Device defaults #
|
# Device defaults #
|
||||||
###################
|
###################
|
||||||
@ -555,24 +573,19 @@ class Guest(XMLBuilder):
|
|||||||
# Keep cdrom around, but with no media attached,
|
# Keep cdrom around, but with no media attached,
|
||||||
# But only if we are a distro that doesn't have a multi
|
# But only if we are a distro that doesn't have a multi
|
||||||
# stage install (aka not Windows)
|
# stage install (aka not Windows)
|
||||||
return (d.virtual_device_type == "disk" and
|
return (d.is_cdrom() and
|
||||||
d.device == VirtualDisk.DEVICE_CDROM
|
d.transient and
|
||||||
and d.transient
|
not install and
|
||||||
and not install and
|
|
||||||
not self.get_continue_inst())
|
not self.get_continue_inst())
|
||||||
|
|
||||||
def do_skip_disk(d):
|
def do_skip_disk(d):
|
||||||
# Skip transient labeled non-media disks
|
# Skip transient labeled non-media disks
|
||||||
return (d.virtual_device_type == "disk" and
|
return (d.is_disk() and d.transient and not install)
|
||||||
d.device == VirtualDisk.DEVICE_DISK
|
|
||||||
and d.transient
|
|
||||||
and not install)
|
|
||||||
|
|
||||||
for dev in self.get_all_devices():
|
for dev in self.get_devices("disk"):
|
||||||
if do_skip_disk(dev):
|
if do_skip_disk(dev):
|
||||||
self.remove_device(dev)
|
self.remove_device(dev)
|
||||||
continue
|
elif do_remove_media(dev):
|
||||||
if do_remove_media(dev):
|
|
||||||
dev.path = None
|
dev.path = None
|
||||||
|
|
||||||
def _set_defaults(self):
|
def _set_defaults(self):
|
||||||
@ -668,20 +681,24 @@ class Guest(XMLBuilder):
|
|||||||
os_disk_bus = self._lookup_osdict_key("diskbus", None)
|
os_disk_bus = self._lookup_osdict_key("diskbus", None)
|
||||||
|
|
||||||
def set_disk_bus(d):
|
def set_disk_bus(d):
|
||||||
if d.device == d.DEVICE_FLOPPY:
|
if d.is_floppy():
|
||||||
d.bus = "fdc"
|
d.bus = "fdc"
|
||||||
return
|
return
|
||||||
if self.os.is_xenpv():
|
if self.os.is_xenpv():
|
||||||
d.bus = "xen"
|
d.bus = "xen"
|
||||||
return
|
return
|
||||||
|
if not self.os.is_hvm():
|
||||||
|
d.bus = "ide"
|
||||||
|
return
|
||||||
|
|
||||||
d.bus = "ide"
|
|
||||||
if self.os.is_hvm():
|
if os_disk_bus and d.is_disk():
|
||||||
if (os_disk_bus and d.device == VirtualDisk.DEVICE_DISK):
|
d.bus = os_disk_bus
|
||||||
d.bus = os_disk_bus
|
elif (self.type == "kvm" and
|
||||||
elif (self.type == "kvm" and
|
self.os.machine == "pseries"):
|
||||||
self.os.machine == "pseries"):
|
d.bus = "scsi"
|
||||||
d.bus = "scsi"
|
else:
|
||||||
|
d.bus = "ide"
|
||||||
|
|
||||||
used_targets = []
|
used_targets = []
|
||||||
for disk in self.get_devices("disk"):
|
for disk in self.get_devices("disk"):
|
||||||
@ -765,22 +782,3 @@ class Guest(XMLBuilder):
|
|||||||
agentdev = virtinst.VirtualChannelDevice(self.conn)
|
agentdev = virtinst.VirtualChannelDevice(self.conn)
|
||||||
agentdev.type = agentdev.TYPE_SPICEVMC
|
agentdev.type = agentdev.TYPE_SPICEVMC
|
||||||
self.add_device(agentdev)
|
self.add_device(agentdev)
|
||||||
|
|
||||||
|
|
||||||
###################################
|
|
||||||
# Guest Dictionary Helper methods #
|
|
||||||
###################################
|
|
||||||
|
|
||||||
def _is_rhel6(self):
|
|
||||||
emulator = self.emulator or ""
|
|
||||||
|
|
||||||
return (self.type in ["qemu", "kvm"] and
|
|
||||||
emulator.startswith("/usr/libexec/qemu"))
|
|
||||||
|
|
||||||
def _lookup_osdict_key(self, key, default):
|
|
||||||
"""
|
|
||||||
Use self.os_variant to find key in OSTYPES
|
|
||||||
@returns: dict value, or None if os_type/variant wasn't set
|
|
||||||
"""
|
|
||||||
return osdict.lookup_osdict_key(self.conn, self.type,
|
|
||||||
self.os_variant, key, default)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user