[PATCH] Add --mkfsoptions to btrfs, logvol, partition, and raid commands.
Chris Lumens
clumens at redhat.com
Wed Jun 17 17:40:06 UTC 2015
Only ext* supports filesystem profiles, so we need some other way to let
users provide arbitrary arguments when making filesystems.
Resolves: rhbz#1218260
---
pykickstart/commands/btrfs.py | 34 ++++++++++++++++++++++++++++++++++
pykickstart/commands/logvol.py | 34 ++++++++++++++++++++++++++++++++--
pykickstart/commands/partition.py | 32 ++++++++++++++++++++++++++++++++
pykickstart/commands/raid.py | 33 +++++++++++++++++++++++++++++++++
pykickstart/handlers/rhel7.py | 14 +++++++-------
tests/commands/btrfs.py | 12 ++++++++++++
tests/commands/logvol.py | 12 +++++++++++-
tests/commands/partition.py | 11 +++++++++++
tests/commands/raid.py | 12 ++++++++++++
9 files changed, 184 insertions(+), 10 deletions(-)
diff --git a/pykickstart/commands/btrfs.py b/pykickstart/commands/btrfs.py
index 6c33344..4dc53bf 100644
--- a/pykickstart/commands/btrfs.py
+++ b/pykickstart/commands/btrfs.py
@@ -76,6 +76,22 @@ class F17_BTRFSData(BaseData):
retval += self._getArgsAsStr()
return retval + " " + " ".join(self.devices) + "\n"
+class RHEL7_BTRFSData(F17_BTRFSData):
+ removedKeywords = F17_BTRFSData.removedKeywords
+ removedAttrs = F17_BTRFSData.removedAttrs
+
+ def __init__(self, *args, **kwargs):
+ F17_BTRFSData.__init__(self, *args, **kwargs)
+ self.mkfsopts = kwargs.get("mkfsoptions", "")
+
+ def _getArgsAsStr(self):
+ retval = F17_BTRFSData._getArgsAsStr(self)
+
+ if self.mkfsopts != "":
+ retval += " --mkfsoptions=\"%s\"" % self.mkfsopts
+
+ return retval
+
class F17_BTRFS(KickstartCommand):
removedKeywords = KickstartCommand.removedKeywords
removedAttrs = KickstartCommand.removedAttrs
@@ -164,3 +180,21 @@ class F17_BTRFS(KickstartCommand):
def dataList(self):
return self.btrfsList
+
+class RHEL7_BTRFS(F17_BTRFS):
+ removedKeywords = F17_BTRFS.removedKeywords
+ removedAttrs = F17_BTRFS.removedAttrs
+
+ def _getParser(self):
+ op = F17_BTRFS._getParser(self)
+ op.add_option("--mkfsoptions", dest="mkfsopts")
+
+ return op
+
+ def parse(self, args):
+ data = F17_BTRFS.parse(self, args)
+
+ if (data.preexist or not data.format) and data.mkfsopts:
+ raise KickstartValueError(formatErrorMsg(self.lineno, msg=_("--mkfsoptions with --noformat or --useexisting has no effect.")))
+
+ return data
diff --git a/pykickstart/commands/logvol.py b/pykickstart/commands/logvol.py
index ae7e7e0..4398ce7 100644
--- a/pykickstart/commands/logvol.py
+++ b/pykickstart/commands/logvol.py
@@ -274,7 +274,21 @@ class F21_LogVolData(F20_LogVolData):
return retval
-RHEL7_LogVolData = F21_LogVolData
+class RHEL7_LogVolData(F21_LogVolData):
+ removedKeywords = F21_LogVolData.removedKeywords
+ removedAttrs = F21_LogVolData.removedAttrs
+
+ def __init__(self, *args, **kwargs):
+ F21_LogVolData.__init__(self, *args, **kwargs)
+ self.mkfsopts = kwargs.get("mkfsoptions", "")
+
+ def _getArgsAsStr(self):
+ retval = F21_LogVolData._getArgsAsStr(self)
+
+ if self.mkfsopts:
+ retval += " --mkfsoptions=\"%s\"" % self.mkfsopts
+
+ return retval
class FC3_LogVol(KickstartCommand):
removedKeywords = KickstartCommand.removedKeywords
@@ -515,4 +529,20 @@ class F21_LogVol(F20_LogVol):
return retval
-RHEL7_LogVol = F21_LogVol
+class RHEL7_LogVol(F21_LogVol):
+ removedKeywords = F21_LogVol.removedKeywords
+ removedAttrs = F21_LogVol.removedAttrs
+
+ def _getParser(self):
+ op = F21_LogVol._getParser(self)
+ op.add_option("--mkfsoptions", dest="mkfsopts")
+
+ return op
+
+ def parse(self, args):
+ retval = F21_LogVol.parse(self, args)
+
+ if not retval.format and retval.mkfsopts:
+ raise KickstartValueError(formatErrorMsg(self.lineno, msg=_("--mkfsoptions with --noformat has no effect.")))
+
+ return retval
diff --git a/pykickstart/commands/partition.py b/pykickstart/commands/partition.py
index 437347c..4db6425 100644
--- a/pykickstart/commands/partition.py
+++ b/pykickstart/commands/partition.py
@@ -240,6 +240,20 @@ class F18_PartData(F17_PartData):
return retval
+class RHEL7_PartData(F18_PartData):
+ def __init__(self, *args, **kwargs):
+ F18_PartData.__init__(self, *args, **kwargs)
+
+ self.mkfsopts = kwargs.get("mkfsoptions", "")
+
+ def _getArgsAsStr(self):
+ retval = F18_PartData._getArgsAsStr(self)
+
+ if self.mkfsopts != "":
+ retval += " --mkfsoptions=\"%s\"" % self.mkfsopts
+
+ return retval
+
class FC3_Partition(KickstartCommand):
removedKeywords = KickstartCommand.removedKeywords
removedAttrs = KickstartCommand.removedAttrs
@@ -471,3 +485,21 @@ class F20_Partition(F18_Partition):
raise KickstartParseError(formatErrorMsg(self.lineno, msg=errorMsg))
return retval
+
+class RHEL7_Partition(F20_Partition):
+ removedKeywords = F20_Partition.removedKeywords
+ removedAttrs = F20_Partition.removedAttrs
+
+ def _getParser(self):
+ op = F20_Partition._getParser(self)
+ op.add_option("--mkfsoptions", dest="mkfsopts")
+
+ return op
+
+ def parse(self, args):
+ retval = F20_Partition.parse(self, args)
+
+ if not retval.format and retval.mkfsopts:
+ raise KickstartValueError(formatErrorMsg(self.lineno, msg=_("--mkfsoptions with --noformat has no effect.")))
+
+ return retval
diff --git a/pykickstart/commands/raid.py b/pykickstart/commands/raid.py
index b0f1ffd..2a5b76d 100644
--- a/pykickstart/commands/raid.py
+++ b/pykickstart/commands/raid.py
@@ -234,6 +234,22 @@ class F18_RaidData(F15_RaidData):
return retval
+class RHEL7_RaidData(F18_RaidData):
+ removedKeywords = F18_RaidData.removedKeywords
+ removedAttrs = F18_RaidData.removedAttrs
+
+ def __init__(self, *args, **kwargs):
+ F18_RaidData.__init__(self, *args, **kwargs)
+ self.mkfsopts = kwargs.get("mkfsoptions", "")
+
+ def _getArgsAsStr(self):
+ retval = F18_RaidData._getArgsAsStr(self)
+
+ if self.mkfsopts:
+ retval += " --mkfsoptions=\"%s\"" % self.mkfsopts
+
+ return retval
+
class FC3_Raid(KickstartCommand):
removedKeywords = KickstartCommand.removedKeywords
removedAttrs = KickstartCommand.removedAttrs
@@ -470,3 +486,20 @@ class F20_Raid(F19_Raid):
errorMsg = _("The raid and autopart commands can't be used at the same time")
raise KickstartParseError(formatErrorMsg(self.lineno, msg=errorMsg))
return retval
+
+class RHEL7_Raid(F20_Raid):
+ removedKeywords = F20_Raid.removedKeywords
+ removedAttrs = F20_Raid.removedAttrs
+
+ def _getParser(self):
+ op = F20_Raid._getParser(self)
+ op.add_option("--mkfsoptions", dest="mkfsopts")
+ return op
+
+ def parse(self, args):
+ retval = F20_Raid.parse(self, args)
+
+ if not retval.format and retval.mkfsopts:
+ raise KickstartValueError(formatErrorMsg(self.lineno, msg=_("--mkfsoptions with --noformat has no effect.")))
+
+ return retval
diff --git a/pykickstart/handlers/rhel7.py b/pykickstart/handlers/rhel7.py
index 7bb3e7b..d6ab35f 100644
--- a/pykickstart/handlers/rhel7.py
+++ b/pykickstart/handlers/rhel7.py
@@ -32,7 +32,7 @@ class RHEL7Handler(BaseHandler):
"autopart": commands.autopart.RHEL7_AutoPart,
"autostep": commands.autostep.FC3_AutoStep,
"bootloader": commands.bootloader.RHEL7_Bootloader,
- "btrfs": commands.btrfs.F17_BTRFS,
+ "btrfs": commands.btrfs.RHEL7_BTRFS,
"cdrom": commands.cdrom.FC3_Cdrom,
"clearpart": commands.clearpart.F21_ClearPart,
"cmdline": commands.displaymode.FC3_DisplayMode,
@@ -63,10 +63,10 @@ class RHEL7Handler(BaseHandler):
"network": commands.network.RHEL7_Network,
"nfs": commands.nfs.FC6_NFS,
"ostreesetup": commands.ostreesetup.RHEL7_OSTreeSetup,
- "part": commands.partition.F20_Partition,
- "partition": commands.partition.F20_Partition,
+ "part": commands.partition.RHEL7_Partition,
+ "partition": commands.partition.RHEL7_Partition,
"poweroff": commands.reboot.RHEL7_Reboot,
- "raid": commands.raid.F20_Raid,
+ "raid": commands.raid.RHEL7_Raid,
"realm": commands.realm.F19_Realm,
"reboot": commands.reboot.RHEL7_Reboot,
"repo": commands.repo.RHEL7_Repo,
@@ -93,7 +93,7 @@ class RHEL7Handler(BaseHandler):
}
dataMap = {
- "BTRFSData": commands.btrfs.F17_BTRFSData,
+ "BTRFSData": commands.btrfs.RHEL7_BTRFSData,
"DriverDiskData": commands.driverdisk.F14_DriverDiskData,
"DeviceData": commands.device.F8_DeviceData,
"DmRaidData": commands.dmraid.FC6_DmRaidData,
@@ -103,8 +103,8 @@ class RHEL7Handler(BaseHandler):
"LogVolData": commands.logvol.RHEL7_LogVolData,
"MultiPathData": commands.multipath.FC6_MultiPathData,
"NetworkData": commands.network.RHEL7_NetworkData,
- "PartData": commands.partition.F18_PartData,
- "RaidData": commands.raid.F18_RaidData,
+ "PartData": commands.partition.RHEL7_PartData,
+ "RaidData": commands.raid.RHEL7_RaidData,
"RepoData": commands.repo.RHEL7_RepoData,
"SshPwData": commands.sshpw.F13_SshPwData,
"UserData": commands.user.F19_UserData,
diff --git a/tests/commands/btrfs.py b/tests/commands/btrfs.py
index c0755d6..4c3e1bb 100644
--- a/tests/commands/btrfs.py
+++ b/tests/commands/btrfs.py
@@ -105,5 +105,17 @@ class F17_TestCase(CommandTest):
self.assertEqual(self.assert_parse("btrfs / part.01"), self.assert_parse("btrfs / part.02"))
self.assertNotEqual(self.assert_parse("btrfs / part.01"), self.assert_parse("btrfs /home part.01"))
+class RHEL7_TestCase(F17_TestCase):
+ def runTest(self):
+ F17_TestCase.runTest(self)
+
+ # pass
+ self.assert_parse("btrfs / --mkfsoptions=some,thing part.01",
+ "btrfs / --mkfsoptions=\"some,thing\" part.01\n")
+
+ # can't use --mkfsoptions if you're not formatting
+ self.assert_parse_error("btrfs / --useexisting --mkfsoptions=whatever", KickstartValueError)
+ self.assert_parse_error("btrfs / --noformat --mkfsoptions=whatever", KickstartValueError)
+
if __name__ == "__main__":
unittest.main()
diff --git a/tests/commands/logvol.py b/tests/commands/logvol.py
index 37d0ab9..507dcce 100644
--- a/tests/commands/logvol.py
+++ b/tests/commands/logvol.py
@@ -308,7 +308,17 @@ class F21_TestCase(F20_TestCase):
self.assert_parse_error("logvol /home --name=home --vgname=vg --size=2 --percent=30")
-RHEL7_TestCase = F21_TestCase
+class RHEL7_TestCase(F21_TestCase):
+ def runTest(self):
+ F21_TestCase.runTest(self)
+
+ # pass
+ self.assert_parse("logvol / --size=4096 --name=LVNAME --vgname=VGNAME --mkfsoptions=some,thing",
+ "logvol / --size=4096 --mkfsoptions=\"some,thing\" --name=LVNAME --vgname=VGNAME\n")
+
+ # can't use --mkfsoptions if you're not formatting
+ self.assert_parse_error("logvol / --size=4096 --name=LVNAME --vgname=VGNAME --mkfsoptions=some,thing --noformat",
+ KickstartValueError)
if __name__ == "__main__":
unittest.main()
diff --git a/tests/commands/partition.py b/tests/commands/partition.py
index 6c81b9e..93a1f70 100644
--- a/tests/commands/partition.py
+++ b/tests/commands/partition.py
@@ -206,5 +206,16 @@ class F18_TestCase(F17_TestCase):
self.assert_parse_error("part / --cipher")
+class RHEL7_TestCase(F18_TestCase):
+ def runTest(self):
+ F18_TestCase.runTest(self)
+
+ # pass
+ self.assert_parse("part / --size=4096 --mkfsoptions=some,thing",
+ "part / --size=4096 --mkfsoptions=\"some,thing\"\n")
+
+ # can't use --mkfsoptions if you're not formatting
+ self.assert_parse_error("part / --size=4096 --mkfsoptions=some,thing --noformat", KickstartValueError)
+
if __name__ == "__main__":
unittest.main()
diff --git a/tests/commands/raid.py b/tests/commands/raid.py
index 1346340..8566c80 100644
--- a/tests/commands/raid.py
+++ b/tests/commands/raid.py
@@ -257,5 +257,17 @@ class F19_TestCase(F18_TestCase):
F18_TestCase.__init__(self, *kargs, **kwargs)
self.minorBasedDevice = False
+class RHEL7_TestCase(F19_TestCase):
+ def runTest(self):
+ F19_TestCase.runTest(self)
+
+ # pass
+ self.assert_parse("raid / --device=md0 --level=1 --mkfsoptions=some,thing raid.01 raid.02",
+ "raid / --device=0 --level=RAID1 --mkfsoptions=\"some,thing\" raid.01 raid.02\n")
+
+ # can't use --mkfsoptions if you're not formatting
+ self.assert_parse_error("raid / --device=md0 --level=1 --mkfsoptions=some,thing --noformat raid.01 raid.02",
+ KickstartValueError)
+
if __name__ == "__main__":
unittest.main()
--
2.4.3
More information about the anaconda-patches
mailing list