[Fedora-livecd-list] [PATCH] Allow for http://, ftp://, or file:// urls to be passed in to the image creators using urlgrabber.

Bryan Kearney bkearney at redhat.com
Fri Oct 17 14:22:45 UTC 2008


From: root <root at localhost.localdomain>

---
 imgcreate/__init__.py  |    2 ++
 imgcreate/kickstart.py |   22 +++++++++++++++++++++-
 livecd-tools.spec      |    1 +
 tools/livecd-creator   |    4 ++--
 4 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/imgcreate/__init__.py b/imgcreate/__init__.py
index bcfb40e..7cf30b8 100644
--- a/imgcreate/__init__.py
+++ b/imgcreate/__init__.py
@@ -34,6 +34,7 @@ Also exported are:
   - CreatorError - all exceptions throw are of this type
   - FSLABEL_MAXLEN - the length to which LoopImageCreator.fslabel is truncated
   - read_kickstart() - a utility function for kickstart parsing
+  - verify_kickstart() - a utility function to verify the existence of a kickstart file
   - build_name() - a utility to construct an image name
 
 Each of the creator classes are designed to be subclassable, allowing the user
@@ -63,6 +64,7 @@ __all__ = (
     'LoopImageCreator',
     'FSLABEL_MAXLEN',
     'read_kickstart',
+    'verify_kickstart',    
     'construct_name',
     'setup_logging',
 )
diff --git a/imgcreate/kickstart.py b/imgcreate/kickstart.py
index 01359e7..a6993ad 100644
--- a/imgcreate/kickstart.py
+++ b/imgcreate/kickstart.py
@@ -22,6 +22,7 @@ import shutil
 import subprocess
 import time
 import logging
+import urlgrabber
 
 import rhpl.keyboard
 
@@ -34,6 +35,21 @@ import pykickstart.version as ksversion
 import imgcreate.errors as errors
 import imgcreate.fs as fs
 
+def path_is_url(path):
+    pupper = path.upper()
+    return (pupper.startswith("HTTP://")) \
+        or (pupper.startswith("FTP://")) \
+        or (pupper.startswith("FILE://"))
+    
+def verify_kickstart(path):
+    verified = False 
+    if not path is None:
+        if path_is_url(path):
+            verified = True
+        else:
+            verified = os.path.isfile(path)
+    return verified
+
 def read_kickstart(path):
     """Parse a kickstart file and return a KickstartParser instance.
 
@@ -47,7 +63,11 @@ def read_kickstart(path):
     version = ksversion.makeVersion()
     ks = ksparser.KickstartParser(version)
     try:
-        ks.readKickstart(path)
+        if path_is_url(path):
+            ksfile = urlgrabber.urlgrab(path)
+            ks.readKickstart(ksfile)
+        else:
+            ks.readKickstart(path)
     except IOError, (err, msg):
         raise errors.KickstartError("Failed to read kickstart file "
                                     "'%s' : %s" % (path, msg))
diff --git a/livecd-tools.spec b/livecd-tools.spec
index 681f6cf..99c6d99 100644
--- a/livecd-tools.spec
+++ b/livecd-tools.spec
@@ -21,6 +21,7 @@ Requires: pykickstart >= 0.96
 Requires: dosfstools >= 2.11-8
 Requires: isomd5sum
 Requires: rhpl
+Requires: python-urlgrabber
 %ifarch %{ix86} x86_64
 Requires: syslinux
 %endif
diff --git a/tools/livecd-creator b/tools/livecd-creator
index b401190..137aecd 100755
--- a/tools/livecd-creator
+++ b/tools/livecd-creator
@@ -36,7 +36,7 @@ def parse_options(args):
     imgopt = optparse.OptionGroup(parser, "Image options",
                                   "These options define the created image.")
     imgopt.add_option("-c", "--config", type="string", dest="kscfg",
-                      help="Path to kickstart config file")
+                      help="Path or url to kickstart config file")
     imgopt.add_option("-b", "--base-on", type="string", dest="base_on",
                       help="Add packages to an existing live CD iso9660 image.")
     imgopt.add_option("-f", "--fslabel", type="string", dest="fs_label",
@@ -67,7 +67,7 @@ def parse_options(args):
                       help=optparse.SUPPRESS_HELP)
 
     (options, args) = parser.parse_args()
-    if not options.kscfg or not os.path.isfile(options.kscfg):
+    if not options.kscfg or not imgcreate.verify_kickstart(options.kscfg):
         raise Usage("Kickstart config '%s' does not exist" %(options.kscfg,))
     if options.base_on and not os.path.isfile(options.base_on):
         raise Usage("Live CD ISO '%s' does not exist" %(options.base_on,))
-- 
1.5.5.2




More information about the Fedora-livecd-list mailing list