diff --git a/tests/xmlconfig-xml/install-f11-rheldefaults.xml b/tests/xmlconfig-xml/install-f11-rheldefaults.xml index 0070a220d..57ef2887e 100644 --- a/tests/xmlconfig-xml/install-f11-rheldefaults.xml +++ b/tests/xmlconfig-xml/install-f11-rheldefaults.xml @@ -19,7 +19,7 @@ /usr/libexec/qemu-kvm - + diff --git a/virtinst/devicedisk.py b/virtinst/devicedisk.py index 0c5f8c7d2..5beb7f8cd 100644 --- a/virtinst/devicedisk.py +++ b/virtinst/devicedisk.py @@ -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 diff --git a/virtinst/guest.py b/virtinst/guest.py index 5728afed6..d72665059 100644 --- a/virtinst/guest.py +++ b/virtinst/guest.py @@ -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" + return - d.bus = "ide" - if self.os.is_hvm(): - if (os_disk_bus and d.device == VirtualDisk.DEVICE_DISK): - d.bus = os_disk_bus - elif (self.type == "kvm" and - self.os.machine == "pseries"): - d.bus = "scsi" + + 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)