[PATCH 2/3] Fix btrfs/lvm/raid kickstart installs (#853649).

Chris Lumens clumens at redhat.com
Wed Sep 5 21:25:57 UTC 2012


This only used to work because we ran all the btrfs/lvm/raid stuff before
we allocated partitions.  At that point, the "pv.XX" names are no longer
valid and have been replaced by things like "sdX".
---
 pyanaconda/kickstart.py | 26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py
index 03d1ee3..610c6ee 100644
--- a/pyanaconda/kickstart.py
+++ b/pyanaconda/kickstart.py
@@ -205,6 +205,13 @@ def deviceMatches(spec):
 
     return matches
 
+def lookupAlias(devicetree, alias):
+    for dev in devicetree.devices:
+        if getattr(dev, "req_name", None) == alias:
+            return dev
+
+    return None
+
 # Remove any existing formatting on a device, but do not remove the partition
 # itself.  This sets up an existing device to be used in a --onpart option.
 def removeExistingFormat(device, storage):
@@ -331,7 +338,7 @@ class BTRFSData(commands.btrfs.F17_BTRFSData):
             # if using --onpart, use original device
             member_name = ksdata.onPart.get(member, member)
             if member_name:
-                dev = devicetree.getDeviceByName(member_name)
+                dev = devicetree.getDeviceByName(member_name) or lookupAlias(devicetree, member)
             if not dev:
                 dev = devicetree.resolveDevice(member)
 
@@ -899,36 +906,33 @@ class PartitionData(commands.partition.F18_PartData):
         elif self.mountpoint.startswith("raid."):
             type = "mdmember"
             kwargs["name"] = self.mountpoint
+            self.mountpoint = ""
 
             if devicetree.getDeviceByName(kwargs["name"]):
                 raise KickstartValueError, formatErrorMsg(self.lineno, msg="RAID partition defined multiple times")
 
-            # store "raid." alias for other ks partitioning commands
             if self.onPart:
                 ksdata.onPart[kwargs["name"]] = self.onPart
-            self.mountpoint = ""
         elif self.mountpoint.startswith("pv."):
             type = "lvmpv"
             kwargs["name"] = self.mountpoint
+            self.mountpoint = ""
 
             if devicetree.getDeviceByName(kwargs["name"]):
                 raise KickstartValueError, formatErrorMsg(self.lineno, msg="PV partition defined multiple times")
 
-            # store "pv." alias for other ks partitioning commands
             if self.onPart:
                 ksdata.onPart[kwargs["name"]] = self.onPart
-            self.mountpoint = ""
         elif self.mountpoint.startswith("btrfs."):
             type = "btrfs"
             kwargs["name"] = self.mountpoint
+            self.mountpoint = ""
 
             if devicetree.getDeviceByName(kwargs["name"]):
                 raise KickstartValueError, formatErrorMsg(self.lineno, msg="BTRFS partition defined multiple times")
 
-            # store "btrfs." alias for other ks partitioning commands
             if self.onPart:
                 ksdata.onPart[kwargs["name"]] = self.onPart
-            self.mountpoint = ""
         elif self.mountpoint == "/boot/efi":
             if iutil.isMactel():
                 type = "hfs+"
@@ -1137,15 +1141,15 @@ class RaidData(commands.raid.F15_RaidData):
         # Get a list of all the RAID members.
         for member in self.members:
             # if member is using --onpart, use original device
-            member = ksdata.onPart.get(member, member)
-            dev = devicetree.getDeviceByName(member)
+            mem = ksdata.onPart.get(member, member) or lookupAlias(devicetree, member)
+            dev = devicetree.getDeviceByName(mem)
             if dev and dev.format.type == "luks":
                 try:
                     dev = devicetree.getChildren(dev)[0]
                 except IndexError:
                     dev = None
             if not dev:
-                raise KickstartValueError, formatErrorMsg(self.lineno, msg="Tried to use undefined partition %s in RAID specification" % member)
+                raise KickstartValueError, formatErrorMsg(self.lineno, msg="Tried to use undefined partition %s in RAID specification" % mem)
 
             raidmems.append(dev)
 
@@ -1303,7 +1307,7 @@ class VolGroupData(commands.volgroup.FC16_VolGroupData):
         for pv in self.physvols:
             # if pv is using --onpart, use original device
             pv = ksdata.onPart.get(pv, pv)
-            dev = devicetree.getDeviceByName(pv)
+            dev = devicetree.getDeviceByName(pv) or lookupAlias(devicetree, pv)
             if dev and dev.format.type == "luks":
                 try:
                     dev = devicetree.getChildren(dev)[0]
-- 
1.7.11.2



More information about the anaconda-patches mailing list