def _apply_drive_order(self, storage, bootloader_proxy, dry_run=False): """Apply the drive order. Drive specifications can contain | delimited variant specifications, such as for example: "vd*|hd*|sd*" So use the resolved disk identifiers returned by the device_matches() function in place of the original specification but still remove the specifications that don't match anything from the output kickstart to keep existing --driveorder processing behavior. """ drive_order = bootloader_proxy.DriveOrder usable_disks = set(self._get_usable_disks(storage)) valid_disks = [] for drive in drive_order[:]: # Resolve disk identifiers. matched_disks = device_matches(drive, devicetree=storage.devicetree, disks_only=True) # Are any of the matched disks usable? if any(d in usable_disks for d in matched_disks): valid_disks.extend(matched_disks) else: drive_order.remove(drive) log.warning("Requested drive %s in boot drive order doesn't exist " "or cannot be used.", drive) # Apply the drive order. log.debug("Applying drive order: %s", valid_disks) storage.bootloader.disk_order = valid_disks # Update the module. if not dry_run and bootloader_proxy.DriveOrder != drive_order: bootloader_proxy.SetDriveOrder(drive_order)
def get_device_names(specs, disks_only=False, msg="{}", lineno=None): """Get device names from device specifications.""" drives = [] for spec in specs: matched = device_matches(spec, disks_only=disks_only) if not matched: raise KickstartParseError(msg.format(spec), lineno=lineno) else: drives.extend(matched) return drives
def _check_boot_drive(self, storage, boot_drive, usable_disks): """Check the specified boot drive.""" # Resolve the disk identifier. matched_disks = device_matches(boot_drive, devicetree=storage.devicetree, disks_only=True) if not matched_disks: raise KickstartParseError(_("No match found for given boot drive " "\"{}\".").format(boot_drive)) if len(matched_disks) > 1: raise KickstartParseError(_("More than one match found for given boot drive " "\"{}\".").format(boot_drive)) if matched_disks[0] not in usable_disks: raise KickstartParseError(_("Requested boot drive \"{}\" doesn't exist or cannot " "be used.").format(boot_drive))