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>
|
||||
<emulator>/usr/libexec/qemu-kvm</emulator>
|
||||
<disk type="file" device="floppy">
|
||||
<driver name="qemu" type="qcow2" cache="none"/>
|
||||
<driver name="qemu" type="qcow2"/>
|
||||
<source file="/dev/default-pool/testvol1.img"/>
|
||||
<target dev="fda" bus="fdc"/>
|
||||
</disk>
|
||||
|
@ -590,10 +590,15 @@ class VirtualDisk(VirtualDevice):
|
||||
if fmt and self.driver_name == self.DRIVER_QEMU:
|
||||
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):
|
||||
return (self.device == self.DEVICE_FLOPPY or
|
||||
self.device == self.DEVICE_CDROM)
|
||||
return self.is_floppy() or self.is_cdrom()
|
||||
|
||||
def _change_backend(self, path, vol_object):
|
||||
backend, ignore = _distill_storage(
|
||||
@ -667,8 +672,7 @@ class VirtualDisk(VirtualDevice):
|
||||
|
||||
# Make sure we have access to the local path
|
||||
if not managed_storage:
|
||||
if (os.path.isdir(self.path) and
|
||||
not self.device == self.DEVICE_FLOPPY):
|
||||
if (os.path.isdir(self.path) and not self.is_floppy()):
|
||||
raise ValueError(_("The path '%s' must be a file or a "
|
||||
"device, not a directory") % self.path)
|
||||
|
||||
@ -704,26 +708,27 @@ class VirtualDisk(VirtualDevice):
|
||||
if volobj:
|
||||
self._change_backend(None, volobj)
|
||||
|
||||
def set_defaults(self):
|
||||
if self.device == self.DEVICE_CDROM:
|
||||
self.read_only = True
|
||||
|
||||
if not virtinst.enable_rhel_defaults:
|
||||
def _set_rhel_defaults(self):
|
||||
if not self.conn.is_qemu():
|
||||
return
|
||||
if not self.is_disk():
|
||||
return
|
||||
|
||||
# Enable cache=none for non-CDROM devs
|
||||
if (self.conn.is_qemu() and
|
||||
not self.driver_cache and
|
||||
self.device != self.DEVICE_CDROM):
|
||||
# Enable cache=none for disk devs
|
||||
if not self.driver_cache:
|
||||
self.driver_cache = self.CACHE_MODE_NONE
|
||||
|
||||
# Enable AIO native for block devices
|
||||
if (self.conn.is_qemu() and
|
||||
not self.driver_io and
|
||||
self.device == self.DEVICE_DISK and
|
||||
self.type == self.TYPE_BLOCK):
|
||||
if (not self.driver_io and self.type == self.TYPE_BLOCK):
|
||||
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):
|
||||
"""
|
||||
reports if disk size conflicts with available space
|
||||
@ -767,16 +772,15 @@ class VirtualDisk(VirtualDevice):
|
||||
# error as appropriate.
|
||||
if self.bus == "virtio":
|
||||
return ("vd", 1024)
|
||||
elif self.bus in ["sata", "scsi", "usb"]:
|
||||
return ("sd", 1024)
|
||||
elif self.bus == "xen":
|
||||
return ("xvd", 1024)
|
||||
elif self.bus == "fdc" or self.device == self.DEVICE_FLOPPY:
|
||||
elif self.bus == "fdc" or self.is_floppy():
|
||||
return ("fd", 2)
|
||||
elif self.bus == "ide":
|
||||
return ("hd", 4)
|
||||
else:
|
||||
return (None, None)
|
||||
|
||||
# sata, scsi, usb, sd
|
||||
return ("sd", 1024)
|
||||
|
||||
def generate_target(self, skip_targets):
|
||||
"""
|
||||
@ -799,7 +803,7 @@ class VirtualDisk(VirtualDevice):
|
||||
raise ValueError(_("Cannot determine device bus/type."))
|
||||
|
||||
# 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:
|
||||
self.target = "hdc"
|
||||
return self.target
|
||||
|
@ -534,6 +534,24 @@ class Guest(XMLBuilder):
|
||||
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 #
|
||||
###################
|
||||
@ -555,24 +573,19 @@ class Guest(XMLBuilder):
|
||||
# Keep cdrom around, but with no media attached,
|
||||
# But only if we are a distro that doesn't have a multi
|
||||
# stage install (aka not Windows)
|
||||
return (d.virtual_device_type == "disk" and
|
||||
d.device == VirtualDisk.DEVICE_CDROM
|
||||
and d.transient
|
||||
and not install and
|
||||
return (d.is_cdrom() and
|
||||
d.transient and
|
||||
not install and
|
||||
not self.get_continue_inst())
|
||||
|
||||
def do_skip_disk(d):
|
||||
# Skip transient labeled non-media disks
|
||||
return (d.virtual_device_type == "disk" and
|
||||
d.device == VirtualDisk.DEVICE_DISK
|
||||
and d.transient
|
||||
and not install)
|
||||
return (d.is_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):
|
||||
self.remove_device(dev)
|
||||
continue
|
||||
if do_remove_media(dev):
|
||||
elif do_remove_media(dev):
|
||||
dev.path = None
|
||||
|
||||
def _set_defaults(self):
|
||||
@ -668,20 +681,24 @@ class Guest(XMLBuilder):
|
||||
os_disk_bus = self._lookup_osdict_key("diskbus", None)
|
||||
|
||||
def set_disk_bus(d):
|
||||
if d.device == d.DEVICE_FLOPPY:
|
||||
if d.is_floppy():
|
||||
d.bus = "fdc"
|
||||
return
|
||||
if self.os.is_xenpv():
|
||||
d.bus = "xen"
|
||||
return
|
||||
|
||||
if not self.os.is_hvm():
|
||||
d.bus = "ide"
|
||||
if self.os.is_hvm():
|
||||
if (os_disk_bus and d.device == VirtualDisk.DEVICE_DISK):
|
||||
return
|
||||
|
||||
|
||||
if os_disk_bus and d.is_disk():
|
||||
d.bus = os_disk_bus
|
||||
elif (self.type == "kvm" and
|
||||
self.os.machine == "pseries"):
|
||||
d.bus = "scsi"
|
||||
else:
|
||||
d.bus = "ide"
|
||||
|
||||
used_targets = []
|
||||
for disk in self.get_devices("disk"):
|
||||
@ -765,22 +782,3 @@ class Guest(XMLBuilder):
|
||||
agentdev = virtinst.VirtualChannelDevice(self.conn)
|
||||
agentdev.type = agentdev.TYPE_SPICEVMC
|
||||
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