[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[PATCH 6/9] Update the part command to work with the new storage code.
- From: Chris Lumens <clumens redhat com>
- To: anaconda-devel-list redhat com
- Cc:
- Subject: [PATCH 6/9] Update the part command to work with the new storage code.
- Date: Wed, 11 Mar 2009 16:32:26 -0400
---
kickstart.py | 183 +++++++++++++++++++++++++++++++---------------------------
1 files changed, 98 insertions(+), 85 deletions(-)
diff --git a/kickstart.py b/kickstart.py
index c798a1d..748a5e8 100644
--- a/kickstart.py
+++ b/kickstart.py
@@ -565,11 +565,9 @@ class Partition(commands.partition.F9_Partition):
def parse(self, args):
pd = commands.partition.F9_Partition.parse(self, args)
- uniqueID = None
-
- fsopts = ""
- if pd.fsopts:
- fsopts = pd.fsopts
+ storage = self.handler.id.storage
+ devicetree = storage.devicetree
+ kwargs = {}
if pd.onbiosdisk != "":
pd.disk = isys.doGetBiosDisk(pd.onbiosdisk)
@@ -578,7 +576,7 @@ class Partition(commands.partition.F9_Partition):
raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified BIOS disk %s cannot be determined" % pd.onbiosdisk)
if pd.mountpoint == "swap":
- filesystem = fileSystemTypeGet('swap')
+ type = "swap"
pd.mountpoint = ""
if pd.recommended:
(pd.size, pd.maxSizeMB) = iutil.swapSuggestion()
@@ -588,102 +586,117 @@ class Partition(commands.partition.F9_Partition):
elif pd.mountpoint == "None":
pd.mountpoint = ""
if pd.fstype:
- try:
- filesystem = fileSystemTypeGet(pd.fstype)
- except KeyError:
- raise KickstartValueError, formatErrorMsg(self.lineno, msg="The \"%s\" filesystem type is not supported." % pd.fstype)
+ type = pd.fstype
else:
- filesystem = fileSystemTypeGetDefault()
- elif pd.mountpoint == 'appleboot':
- filesystem = fileSystemTypeGet("Apple Bootstrap")
- pd.mountpoint = ""
- elif pd.mountpoint == 'prepboot':
- filesystem = fileSystemTypeGet("PPC PReP Boot")
- pd.mountpoint = ""
+ type = storage.defaultFSType
+# elif pd.mountpoint == 'appleboot':
+# filesystem = fileSystemTypeGet("Apple Bootstrap")
+# pd.mountpoint = ""
+# elif pd.mountpoint == 'prepboot':
+# filesystem = fileSystemTypeGet("PPC PReP Boot")
+# pd.mountpoint = ""
elif pd.mountpoint.startswith("raid."):
- filesystem = fileSystemTypeGet("software RAID")
-
- if self.handler.ksRaidMapping.has_key(pd.mountpoint):
- raise KickstartValueError, formatErrorMsg(self.lineno, msg="Defined RAID partition multiple times")
-
- # get a sort of hackish id
- uniqueID = self.handler.ksID
- self.handler.ksRaidMapping[pd.mountpoint] = uniqueID
- self.handler.ksID += 1
+ type = "mdmember"
+ kwargs["name"] = pd.mountpoint
+
+ if devicetree.getDeviceByName(kwargs["name"]):
+ raise KickstartValueError, formatErrorMsg(self.lineno, msg="RAID partition defined multiple times")
+
pd.mountpoint = ""
elif pd.mountpoint.startswith("pv."):
- filesystem = fileSystemTypeGet("physical volume (LVM)")
+ type = "lvmpv"
+ kwargs["name"] = pd.mountpoint
- if self.handler.ksPVMapping.has_key(pd.mountpoint):
- raise KickstartValueError, formatErrorMsg(self.lineno, msg="Defined PV partition multiple times")
+ if devicetree.getDeviceByName(kwargs["name"]):
+ raise KickstartValueError, formatErrorMsg(self.lineno, msg="PV partition defined multiple times")
- # get a sort of hackish id
- uniqueID = self.handler.ksID
- self.handler.ksPVMapping[pd.mountpoint] = uniqueID
- self.handler.ksID += 1
pd.mountpoint = ""
elif pd.mountpoint == "/boot/efi":
- filesystem = fileSystemTypeGet("efi")
- fsopts = "defaults,uid=0,gid=0,umask=0077,shortname=winnt"
+ type = "vfat"
+ pd.fsopts = "defaults,uid=0,gid=0,umask=0077,shortname=winnt"
else:
if pd.fstype != "":
- try:
- filesystem = fileSystemTypeGet(pd.fstype)
- except KeyError:
- raise KickstartValueError, formatErrorMsg(self.lineno, msg="The \"%s\" filesystem type is not supported." % pd.fstype)
+ type = pd.fstype
else:
- filesystem = fileSystemTypeGetDefault()
+ type = storage.defaultFSType
- if pd.size is None and (pd.start == 0 and pd.end == 0) and pd.onPart == "":
+ # If this specified an existing request that we should not format,
+ # quit here after setting up enough information to mount it later.
+ if not pd.format:
+ if not pd.onPart:
+ raise KickstartValueError, formatErrorMsg(self.lineno, msg="--noformat used without --onpart")
+
+ dev = devicetree.getDeviceByName(pd.onPart)
+ if not dev:
+ raise KickstartValueError, formatErrorMsg(self.lineno, msg="No preexisting partition with the name \"%s\" was found." % pd.onPart)
+
+ dev.format.mountpoint = pd.mountpoint
+ dev.format.mountopts = pd.fsopts
+ self.handler.skipSteps.extend(["partition", "zfcpconfig", "parttype"])
+ return pd
+
+ # Size specification checks.
+ if pd.size is None and pd.onPart == "":
raise KickstartValueError, formatErrorMsg(self.lineno, msg="Partition requires a size specification")
- if pd.start != 0 and pd.disk == "":
- raise KickstartValueError, formatErrorMsg(self.lineno, msg="Partition command with start cylinder requires a drive specification")
- hds = map(lambda x: x.name, filter(lambda x: isys.mediaPresent(x.name), self.handler.id.storage.disks))
- if pd.disk not in hds and pd.disk in ('mapper/'+hd for hd in hds):
- pd.disk = 'mapper/' + pd.disk
- if pd.disk not in hds:
- raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified nonexistent disk %s in partition command" % pd.disk)
-
- request = partRequests.PartitionSpec(filesystem,
- mountpoint = pd.mountpoint,
- format = pd.format,
- fslabel = pd.label,
- fsprofile = pd.fsprofile)
-
- if pd.size is not None:
- request.size = pd.size
- if pd.start != 0:
- request.start = pd.start
- if pd.end != 0:
- request.end = pd.end
- if pd.grow:
- request.grow = pd.grow
- if pd.maxSizeMB != 0:
- request.maxSizeMB = pd.maxSizeMB
- if pd.disk != "":
- request.drive = [ pd.disk ]
- if pd.primOnly:
- request.primary = pd.primOnly
- if uniqueID:
- request.uniqueID = uniqueID
- if pd.onPart != "":
- request.device = pd.onPart
- for areq in self.handler.id.storage.autoPartitionRequests:
- if areq.device is not None and areq.device == pd.onPart:
- raise KickstartValueError, formatErrorMsg(self.lineno, "Partition already used")
- if fsopts != "":
- request.fsopts = fsopts
+ # Now get a format to hold a lot of these extra values.
+ kwargs["format"] = getFormat(type,
+ mountpoint=pd.mountpoint,
+ label=pd.label,
+ mountopts=pd.fsopts)
+ if not kwargs["format"]:
+ raise KickstartValueError, formatErrorMsg(self.lineno, msg="The \"%s\" filesystem type is not supported." % type)
+
+ # If we were given a specific disk to create the partition on, verify
+ # that it exists first. If it doesn't exist, see if it exists with
+ # mapper/ on the front. If that doesn't exist either, it's an error.
+ if pd.disk:
+ disk = devicetree.getDeviceByName(pd.disk)
+ if not disk:
+ pd.disk = "mapper/" % pd.disk
+ disk = devicetree.getDeviceByName(pd.disk)
+
+ if not disk:
+ raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified nonexistent disk %s in partition command" % pd.disk)
+
+ kwargs["disks"] = [disk]
+
+ kwargs["grow"] = pd.grow
+ kwargs["size"] = pd.size
+ kwargs["maxsize"] = pd.maxSizeMB
+ kwargs["primary"] = pd.primOnly
+
+ # If we were given a pre-existing partition to create a filesystem on,
+ # we need to verify it exists and then schedule a new format action to
+ # take place there. Also, we only support a subset of all the options
+ # on pre-existing partitions.
+ if pd.onPart:
+ device = devicetree.getDeviceByName(pd.onPart)
+ if not device:
+ raise KickstartValueError, formatErrorMsg(self.lineno, msg="Specified nonexistent partition %s in partition command" % pd.onPart)
+
+ devicetree.registerAction(ActionCreateFormat(device, kwargs["format"]))
+ else:
+ request = storage.newPartition(**kwargs)
+
+ # FIXME: no way to specify an fsprofile right now
+ # if pd.fsprofile:
+ # request.format.fsprofile = pd.fsprofile
+
+ storage.createDevice(request)
if pd.encrypted:
- if pd.passphrase and \
- not self.handler.anaconda.id.storage.encryptionPassphrase:
- self.handler.anaconda.id.storage.encryptionPassphrase = pd.passphrase
- request.encryption = cryptodev.LUKSDevice(passphrase=pd.passphrase, format=pd.format)
+ if pd.passphrase and not storage.encryptionPassphrase:
+ storage.encryptionPassphrase = pd.passphrase
- addPartRequest(self.handler.anaconda, request)
- self.handler.skipSteps.extend(["partition", "zfcpconfig", "parttype"])
+ luksformat = request.format
+ request.format = getFormat("luks", passphrase=pd.passphrase, device=request.path)
+ luksdev = LUKSDevice("luks%d" % storage.nextID,
+ format=luksformat,
+ parents=request)
+ storage.createDevice(luksdev)
+ self.handler.skipSteps.extend(["partition", "zfcpconfig", "parttype"])
return pd
class Reboot(commands.reboot.FC6_Reboot):
--
1.6.1.3
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]