[PATCH] Don't error out if raid --useexisting is given with no members (#741728).

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This also adds extra error checking from anaconda and makes --level= a required
argument, like the wiki indicates it is.
---
 pykickstart/commands/raid.py |   12 ++++++-
 tests/commands/raid.py       |   63 ++++++++++++++++-------------------------
 2 files changed, 35 insertions(+), 40 deletions(-)

diff --git a/pykickstart/commands/raid.py b/pykickstart/commands/raid.py
index 0f4c92a..575bd0a 100644
--- a/pykickstart/commands/raid.py
+++ b/pykickstart/commands/raid.py
@@ -249,8 +249,11 @@ class FC3_Raid(KickstartCommand):
 
         if len(extra) == 0:
             raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("Mount point required for %s") % "raid")
-        if len(extra) == 1:
+
+        if len(extra) == 1 and not opts.preexist:
             raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("Partitions required for %s") % "raid")
+        elif len(extra) > 1 and opts.preexist:
+            raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("Members may not be specified for preexisting RAID device"))
 
         rd = self.handler.RaidData()
         self._setToObj(self.op, opts, rd)
@@ -261,12 +264,17 @@ class FC3_Raid(KickstartCommand):
         # it runs int().
         rd.device = int(rd.device)
         rd.mountpoint = extra[0]
-        rd.members = extra[1:]
+
+        if len(extra) > 1:
+            rd.members = extra[1:]
 
         # Check for duplicates in the data list.
         if rd in self.dataList():
             warnings.warn(_("A RAID device with the name %s has already been defined.") % rd.device)
 
+        if not rd.preexist and not rd.level:
+            raise KickstartValueError, formatErrorMsg(self.lineno, msg="RAID Partition defined without RAID level")
+
         return rd
 
     def dataList(self):
diff --git a/tests/commands/raid.py b/tests/commands/raid.py
index 060bced..7b6675a 100644
--- a/tests/commands/raid.py
+++ b/tests/commands/raid.py
@@ -63,12 +63,12 @@ class FC3_TestCase(CommandTest):
         self.assert_parse("raid / --device=md0 --fstype=ASDF --level=6 %sraid.01 raid.02" % (self.bytesPerInode), \
                           "raid / --device=0 --fstype=\"ASDF\" --level=RAID6 %sraid.01 raid.02\n" % (self.bytesPerInode))
         # useexisting
-        self.assert_parse("raid / --device=md0 --level=6 --useexisting %sraid.01 raid.02" % (self.bytesPerInode), \
-                          "raid / --device=0 --level=RAID6 --useexisting %sraid.01 raid.02\n" % (self.bytesPerInode))
+        self.assert_parse("raid / --device=md0 --level=6 --useexisting %s" % (self.bytesPerInode), \
+                          "raid / --device=0 --level=RAID6 --useexisting %s\n" % (self.bytesPerInode))
 
         # noformat
-        self.assert_parse("raid / --device=md0 --level=6 --noformat --useexisting %sraid.01 raid.02" % (self.bytesPerInode), \
-                          "raid / --device=0 --level=RAID6 --noformat --useexisting %sraid.01 raid.02\n" % (self.bytesPerInode))
+        self.assert_parse("raid / --device=md0 --level=6 --noformat --useexisting %s" % (self.bytesPerInode), \
+                          "raid / --device=0 --level=RAID6 --noformat --useexisting %s\n" % (self.bytesPerInode))
 
         # fail
         # no mountpoint or options
@@ -81,10 +81,12 @@ class FC3_TestCase(CommandTest):
         self.assert_parse_error("raid /", KickstartValueError)
         # no device
         self.assert_parse_error("raid / --level=0", KickstartValueError)
-        # no level -- FIXME -- I would think should should fail, but it doesn't
-        # self.assert_parse_error("raid / --device=md0", KickstartValueError)
+        # no level
+        self.assert_parse_error("raid / --device=md0", KickstartValueError)
         # No raid members defined
         self.assert_parse_error("raid / --level=0 --device=md0", KickstartValueError)
+        # Both raid members and useexisting given
+        self.assert_parse_error("raid / --level=0 --device=md0 --useexisting raid.01 raid.02", KickstartValueError)
 
         # Invalid device string - device=asdf0
         self.assert_parse_error("raid / --device=asdf0 --level=RAID1 raid.01 raid.02 raid.03", ValueError)
@@ -154,38 +156,23 @@ class F12_TestCase(F9_TestCase):
         F9_TestCase.runTest(self)
 
         # pass
-        self.assert_parse("raid / --device=md0 --escrowcert=\"http://x/y\"; "
-                          "raid.01 raid.02",
-                          "raid / --device=0 raid.01 raid.02\n")
-        self.assert_parse("raid / --device=md0 --encrypted --backuppassphrase "
-                          "raid.01 raid.02",
-                          "raid / --device=0 --encrypted raid.01 raid.02\n")
-        self.assert_parse("raid / --device=md0 --encrypted "
-                          "--escrowcert=\"http://x/y\"; raid.01 raid.02",
-                          "raid / --device=0 --encrypted "
-                          "--escrowcert=\"http://x/y\"; raid.01 raid.02\n")
-        self.assert_parse("raid / --device=md0 --encrypted "
-                          "--escrowcert=\"http://x/y\"; --backuppassphrase "
-                          "raid.01 raid.02",
-                          "raid / --device=0 --encrypted "
-                          "--escrowcert=\"http://x/y\"; --backuppassphrase "
-                          "raid.01 raid.02\n")
-        self.assert_parse("raid / --device=md0 --encrypted "
-                          "--escrowcert=http://x/y raid.01 raid.02",
-                          "raid / --device=0 --encrypted "
-                          "--escrowcert=\"http://x/y\"; raid.01 raid.02\n")
+        self.assert_parse("raid / --device=md0 --escrowcert=\"http://x/y\"; --level=1 raid.01 raid.02",
+                          "raid / --device=0 --level=RAID1 raid.01 raid.02\n")
+        self.assert_parse("raid / --device=md0 --encrypted --backuppassphrase --level=1 raid.01 raid.02",
+                          "raid / --device=0 --level=RAID1 --encrypted raid.01 raid.02\n")
+        self.assert_parse("raid / --device=md0 --encrypted --escrowcert=\"http://x/y\"; --level=1 raid.01 raid.02",
+                          "raid / --device=0 --level=RAID1 --encrypted --escrowcert=\"http://x/y\"; raid.01 raid.02\n")
+        self.assert_parse("raid / --device=md0 --encrypted --escrowcert=\"http://x/y\"; --backuppassphrase --level=1 raid.01 raid.02",
+                          "raid / --device=0 --level=RAID1 --encrypted --escrowcert=\"http://x/y\"; --backuppassphrase raid.01 raid.02\n")
+        self.assert_parse("raid / --device=md0 --encrypted --escrowcert=http://x/y --level=1 raid.01 raid.02",
+                          "raid / --device=0 --level=RAID1 --encrypted --escrowcert=\"http://x/y\"; raid.01 raid.02\n")
 
         # fail
-        self.assert_parse_error("raid / --device=md0 raid.01 raid.02 "
-                                "--escrowcert")
-        self.assert_parse_error("raid / --device=md0 --escrowcert "
-                                "--backuppassphrase raid.01 raid.02")
-        self.assert_parse_error("raid / --device=md0 --encrypted --escrowcert "
-                                "--backuppassphrase raid.01 raid.02")
-        self.assert_parse_error("raid / --device=md0 --backuppassphrase=False "
-                                "raid.01 raid.02")
-        self.assert_parse_error("raid / --device=md0 --backuppassphrase=True "
-                                "raid.01 raid.02")
+        self.assert_parse_error("raid / --device=md0 --level=1 raid.01 raid.02 -escrowcert")
+        self.assert_parse_error("raid / --device=md0 --escrowcert --backuppassphrase --level=1 raid.01 raid.02")
+        self.assert_parse_error("raid / --device=md0 --encrypted --escrowcert --backuppassphrase --level=1 raid.01 raid.02")
+        self.assert_parse_error("raid / --device=md0 --backuppassphrase=False --level=1 raid.01 raid.02")
+        self.assert_parse_error("raid / --device=md0 --backuppassphrase=True --level=1 raid.01 raid.02")
 
 class F13_TestCase(F12_TestCase):
     def __init__(self, *kargs, **kwargs):
@@ -202,8 +189,8 @@ class F15_TestCase(F14_TestCase):
         F14_TestCase.runTest(self)
 
         # pass
-        self.assert_parse("raid / --device=md0 --label=ROOT raid.01 raid.02",
-                          "raid / --device=0 --label=ROOT raid.01 raid.02\n")
+        self.assert_parse("raid / --device=md0 --label=ROOT --level=1 raid.01 raid.02",
+                          "raid / --device=0 --level=RAID1 --label=ROOT raid.01 raid.02\n")
 
 if __name__ == "__main__":
     unittest.main()
-- 
1.7.6

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux