[PATCH] Add liveimg install method

Brian C. Lane bcl at redhat.com
Fri May 3 00:54:19 UTC 2013


From: "Brian C. Lane" <bcl at redhat.com>

---
 pykickstart/commands/method.py  | 52 +++++++++++++++++++++++++++++++++++++++++
 pykickstart/handlers/control.py | 18 +++++++-------
 tests/commands/method.py        | 28 ++++++++++++++++++++++
 3 files changed, 90 insertions(+), 8 deletions(-)

diff --git a/pykickstart/commands/method.py b/pykickstart/commands/method.py
index f91bf59..272e9bf 100644
--- a/pykickstart/commands/method.py
+++ b/pykickstart/commands/method.py
@@ -293,3 +293,55 @@ class F18_Method(F14_Method):
                 raise KickstartValueError, formatErrorMsg(self.lineno, msg=_("One of --url or --mirrorlist must be specified for url command."))
 
         return retval
+
+class F19_Method(F18_Method):
+    removedKeywords = F18_Method.removedKeywords
+    removedAttrs = F18_Method.removedAttrs
+
+    def __init__(self, *args, **kwargs):
+        F18_Method.__init__(self, *args, **kwargs)
+        self.checksum = ""
+
+    def __eq__(self, other):
+        if not F18_Method.__eq__(self, other):
+            return False
+
+        if self.method == "liveimg":
+            return self.url == other.url and self.proxy == other.proxy and \
+                   self.noverifyssl == other.noverifyssl and \
+                   self.checksum == other.checksum
+        else:
+            return True
+
+    def __str__(self):
+        if self.method == "liveimg":
+            retval = KickstartCommand.__str__(self)
+            retval += "# Use live disk image installation\n"
+
+            retval += "liveimg --url=\"%s\"" % self.url
+
+            if self.proxy:
+                retval += " --proxy=\"%s\"" % self.proxy
+
+            if self.noverifyssl:
+                retval += " --noverifyssl"
+
+            if self.checksum:
+                retval += " --checksum=\"%s\"" % self.checksum
+
+            return retval + "\n"
+        else:
+            retval = F18_Method.__str__(self)
+
+        return retval
+
+    def _getParser(self):
+        op = F18_Method._getParser(self)
+
+        if self.currentCmd == "liveimg":
+            op.add_option("--url", required=1)
+            op.add_option("--proxy")
+            op.add_option("--noverifyssl", action="store_true", default=False)
+            op.add_option("--checksum")
+
+        return op
diff --git a/pykickstart/handlers/control.py b/pykickstart/handlers/control.py
index 1993478..77349f3 100644
--- a/pykickstart/handlers/control.py
+++ b/pykickstart/handlers/control.py
@@ -952,7 +952,7 @@ commandMap = {
         "autostep": autostep.FC3_AutoStep,
         "bootloader": bootloader.F18_Bootloader,
         "btrfs": btrfs.F17_BTRFS,
-        "cdrom": method.F18_Method,
+        "cdrom": method.F19_Method,
         "clearpart": clearpart.F17_ClearPart,
         "cmdline": displaymode.FC3_DisplayMode,
         "device": device.F8_Device,
@@ -965,19 +965,20 @@ commandMap = {
         "graphical": displaymode.FC3_DisplayMode,
         "group": group.F12_Group,
         "halt": reboot.F18_Reboot,
-        "harddrive": method.F18_Method,
+        "harddrive": method.F19_Method,
         "ignoredisk": ignoredisk.F14_IgnoreDisk,
         "install": upgrade.F11_Upgrade,
         "iscsi": iscsi.F17_Iscsi,
         "iscsiname": iscsiname.FC6_IscsiName,
         "keyboard": keyboard.F18_Keyboard,
         "lang": lang.F19_Lang,
+        "liveimg": method.F19_Method,
         "logging": logging.FC6_Logging,
         "logvol": logvol.F18_LogVol,
         "mediacheck": mediacheck.FC4_MediaCheck,
         "multipath": multipath.FC6_MultiPath,
         "network": network.F19_Network,
-        "nfs": method.F18_Method,
+        "nfs": method.F19_Method,
         "part": partition.F18_Partition,
         "partition": partition.F18_Partition,
         "poweroff": reboot.F18_Reboot,
@@ -995,7 +996,7 @@ commandMap = {
         "timezone": timezone.F18_Timezone,
         "updates": updates.F7_Updates,
         "upgrade": upgrade.F11_Upgrade,
-        "url": method.F18_Method,
+        "url": method.F19_Method,
         "user": user.F19_User,
         "vnc": vnc.F9_Vnc,
         "volgroup": volgroup.FC16_VolGroup,
@@ -1232,7 +1233,7 @@ commandMap = {
         "autopart": autopart.F16_AutoPart,
         "autostep": autostep.FC3_AutoStep,
         "bootloader": bootloader.F17_Bootloader,
-        "cdrom": method.F14_Method,
+        "cdrom": method.F19_Method,
         "clearpart": clearpart.FC3_ClearPart,
         "cmdline": displaymode.FC3_DisplayMode,
         "device": device.F8_Device,
@@ -1245,19 +1246,20 @@ commandMap = {
         "graphical": displaymode.FC3_DisplayMode,
         "group": group.F12_Group,
         "halt": reboot.FC6_Reboot,
-        "harddrive": method.F14_Method,
+        "harddrive": method.F19_Method,
         "ignoredisk": ignoredisk.F14_IgnoreDisk,
         "install": upgrade.F11_Upgrade,
         "iscsi": iscsi.F10_Iscsi,
         "iscsiname": iscsiname.FC6_IscsiName,
         "keyboard": keyboard.FC3_Keyboard,
         "lang": lang.FC3_Lang,
+        "liveimg": method.F19_Method,
         "logging": logging.FC6_Logging,
         "logvol": logvol.F15_LogVol,
         "mediacheck": mediacheck.FC4_MediaCheck,
         "multipath": multipath.FC6_MultiPath,
         "network": network.F19_Network,
-        "nfs": method.F14_Method,
+        "nfs": method.F19_Method,
         "part": partition.F14_Partition,
         "partition": partition.F14_Partition,
         "poweroff": reboot.FC6_Reboot,
@@ -1276,7 +1278,7 @@ commandMap = {
         "unsupported_hardware": unsupported_hardware.RHEL6_UnsupportedHardware,
         "updates": updates.F7_Updates,
         "upgrade": upgrade.F11_Upgrade,
-        "url": method.F14_Method,
+        "url": method.F19_Method,
         "user": user.F19_User,
         "vnc": vnc.F9_Vnc,
         "volgroup": volgroup.FC16_VolGroup,
diff --git a/tests/commands/method.py b/tests/commands/method.py
index b80ca5e..7ca643b 100644
--- a/tests/commands/method.py
+++ b/tests/commands/method.py
@@ -133,5 +133,33 @@ class F18_TestCase(F14_TestCase):
         self.assert_parse_error("url --url=www.wherever.com --mirrorlist=www.wherever.com",
                                 KickstartValueError)
 
+class F19_TestCase(F18_TestCase):
+    def runTest(self):
+        # run F18 test case.
+        F18_TestCase.runTest(self)
+
+        # liveimg pass
+        self.assert_parse("liveimg --url=http://someplace/somewhere --proxy=http://wherever/other "
+                          "--noverifyssl --checksum=e7a9fe500330a1cae4ca114833bb3df014e6d14e63ea9566896a848f3832d0ba",
+                          "liveimg --url=\"http://someplace/somewhere\" --proxy=\"http://wherever/other\" "
+                          "--noverifyssl --checksum=\"e7a9fe500330a1cae4ca114833bb3df014e6d14e63ea9566896a848f3832d0ba\"\n")
+        self.assert_parse("liveimg --url=http://someplace/somewhere --proxy=http://wherever/other "
+                          "--noverifyssl",
+                          "liveimg --url=\"http://someplace/somewhere\" --proxy=\"http://wherever/other\" "
+                          "--noverifyssl\n")
+        self.assert_parse("liveimg --url=http://someplace/somewhere --proxy=http://wherever/other ",
+                          "liveimg --url=\"http://someplace/somewhere\" --proxy=\"http://wherever/other\"\n")
+        self.assert_parse("liveimg --url=http://someplace/somewhere",
+                          "liveimg --url=\"http://someplace/somewhere\"\n")
+
+        # liveimg fail
+        self.assert_parse_error("liveimg", KickstartValueError)
+        self.assert_parse_error("liveimg --url", KickstartParseError)
+        self.assert_parse_error("liveimg --url=http://someplace/somewhere --proxy", KickstartParseError)
+        self.assert_parse_error("liveimg --proxy=http://someplace/somewhere", KickstartValueError)
+        self.assert_parse_error("liveimg --noverifyssl", KickstartValueError)
+        self.assert_parse_error("liveimg --checksum=e7a9fe500330a1cae4ca114833bb3df014e6d14e63ea9566896a848f3832d0ba", KickstartValueError)
+
+
 if __name__ == "__main__":
     unittest.main()
-- 
1.8.1.4



More information about the anaconda-patches mailing list