Sorry for the trailing whitespace foo in this patch, a sane patch would
look like this:
kanarip(a)kanarip.com wrote:
From: Jeroen van Meeuwen (Fedora Unity)
<kanarip(a)fedoraunity.org>
---
cobbler/action_import.py | 212 +++++++++++++++++++++++++++-------------------
1 files changed, 126 insertions(+), 86 deletions(-)
diff --git a/cobbler/action_import.py b/cobbler/action_import.py
index a0a515e..bf4818c 100644
--- a/cobbler/action_import.py
+++ b/cobbler/action_import.py
@@ -475,48 +475,82 @@ class Importer:
except:
print _("- error launching createrepo, ignoring...")
traceback.print_exc()
-
+
# ========================================================================
def distro_adder(self,foo,dirname,fnames):
-
+
"""
This is an os.path.walk routine that finds distributions in the directory
to be scanned and then creates them.
"""
- # FIXME: If there are more than one kernel or initrd image on the same
directory,
+ # FIXME: If there are more than one kernel or initrd image on the same
directory,
# results are unpredictable
- initrd = None
- kernel = None
-
+ initrd = {}
+ kernel = {}
+
+ counter = 0
+
for x in fnames:
fullname = os.path.join(dirname,x)
+
if os.path.islink(fullname) and os.path.isdir(fullname):
- if os.path.realpath(fullname) == os.path.realpath(dirname):
- # Prevent infinite loops importing debian media
- continue
- print "- following symlink: %s" % fullname
- os.path.walk(fullname, self.distro_adder, foo)
-
- if x.startswith("initrd"):
- initrd = os.path.join(dirname,x)
- if ( x.startswith("vmlinuz") or
x.startswith("kernel.img") ) and x.find("initrd") == -1:
- kernel = os.path.join(dirname,x)
- if initrd is not None and kernel is not None and
dirname.find("isolinux") == -1:
- adtl = self.add_entry(dirname,kernel,initrd)
- if adtl != None:
- foo.extend(adtl)
- # Not resetting these values causes problems importing debian media
because there are remaining items in fnames
- initrd = None
- kernel = None
-
+ if os.path.realpath(fullname) == os.path.realpath(dirname):
+ # Prevent infinite loops importing debian media
+ continue
+ print "- following symlink: %s" % fullname
+ os.path.walk(fullname, self.distro_adder, foo)
+
+ if x.startswith("initrd") and not initrd.has_key(x):
+ initrd[counter] = os.path.join(dirname,x)
+ print "Found initrd for %s" % x
+ if kernel.has_key(counter): counter += 1
+
+ if ( x.startswith("vmlinuz") or
x.startswith("kernel.img") ) and x.find("initrd") == -1 and not
kernel.has_key(x):
+ kernel[counter] = os.path.join(dirname,x)
+ print "Found kernel for %s" % x
+ if initrd.has_key(counter): counter += 1
+
+ if initrd.keys() > 0 and kernel.keys() > 0 and
dirname.find("isolinux") == -1:
+ for key in initrd.keys():
+ kernel_type = None
+ if kernel.has_key(key):
+ kernel_type = self.find_me_kernel_type(initrd[key],
kernel[key])
+ else:
+ print "kernel[%s] does not exist" % key
+ continue
+
+ adtl =
self.add_entry(dirname,kernel[key],initrd[key],kernel_type=kernel_type)
+ if adtl != None:
+ foo.extend(adtl)
+ # Not resetting these values causes problems importing debian
media because there are remaining items in fnames
+ initrd = {}
+ kernel = {}
+
+ # ========================================================================
+
+ def find_me_kernel_type(self,initrd, kernel):
+
+ """
+ From the initrd and kernel passed, find out a name for this kernel
+ """
+
+ print "Got initrd %s and kernel %s" % (initrd,kernel)
+
+ if initrd.find("PAE") >= 0:
+ print "Found kernel type PAE"
+ return "PAE"
+
+ print "No particular kernel type found"
+ return None
+
# ========================================================================
- def add_entry(self,dirname,kernel,initrd):
+ def add_entry(self,dirname,kernel,initrd,kernel_type=None):
"""
When we find a directory with a valid kernel/initrd in it, create the
distribution objects
@@ -553,7 +587,13 @@ class Importer:
for pxe_arch in archs:
- name = proposed_name + "-" + pxe_arch
+ if kernel_type:
+ proposed_name_append = "-%s" % kernel_type
+ else:
+ proposed_name_append = ""
+
+ name = proposed_name + "-" + pxe_arch + proposed_name_append
+
existing_distro = self.distros.find(name=name)
if existing_distro is not None: