Ok,
So after many false starts. First generating the patch for the wrong
branch. Then when I did update it for devel I didn't test it correctly.
I've reworked the patch and tested this on my production cobbler server
with no issues.
Thanks!
>From ccd846632167ce0c1e7870df2971e4b4a1efd0ea Mon Sep 17 00:00:00 2001
From: Bill Peck <bpeck(a)redhat.com>
Date: Tue, 4 Nov 2008 11:08:01 -0500
Subject: [PATCH] import enhancements needed for beaker project.
Finally have auto-kickstart working properly with devel
import also records the minor version and creation datestamp in comment
distro item now has a comment field. Still need to update web ui.
---
cobbler/action_import.py | 44 ++++++++++++++++++++++++++++++++++++++++----
cobbler/item_distro.py | 13 +++++++++++--
2 files changed, 51 insertions(+), 6 deletions(-)
diff --git a/cobbler/action_import.py b/cobbler/action_import.py
index f5b834b..a4845c7 100644
--- a/cobbler/action_import.py
+++ b/cobbler/action_import.py
@@ -274,7 +274,8 @@ class Importer:
continue
(flavor, major, minor) = results
# print _("- finding default kickstart template for %(flavor)s %(major)s") % { "flavor" : flavor, "major" : major }
- version , ks = importer.set_variance(flavor, major, minor)
+ version , ks = importer.set_variance(flavor, major, minor, distro.arch)
+ distro.set_comment("%s.%s:%s" % (version, int(minor), importer.get_datestamp()))
distro.set_os_version(version)
profile.set_kickstart(ks)
@@ -838,6 +839,11 @@ class BaseImporter:
result["i386"] = 1
return result.keys()
+ def get_datestamp(self):
+ """
+ Allows each breed to return its datetime stamp
+ """
+ return None
# ===================================================================
def __init__(self,(rootdir,pkgdir)):
@@ -918,7 +924,18 @@ class RedHatImporter ( BaseImporter ) :
minor = float(accum[1])
return (flavor, major, minor)
- def set_variance(self, flavor, major, minor):
+ def get_datestamp(self):
+ """
+ Based on a RedHat tree find the creation timestamp
+ """
+ base = self.get_rootdir()
+ if os.path.exists("%s/.discinfo" % base):
+ discinfo = open("%s/.discinfo" % base, "r")
+ datestamp = discinfo.read().split("\n")[0]
+ discinfo.close()
+ return datestamp
+
+ def set_variance(self, flavor, major, minor, arch):
"""
find the profile kickstart and set the distro breed/os-version based on what
@@ -948,6 +965,25 @@ class RedHatImporter ( BaseImporter ) :
except:
os_version = "other"
+ kickbase = "/var/lib/cobbler/kickstarts"
+ # Look for ARCH/OS_VERSION.MINOR kickstart first
+ # ARCH/OS_VERSION next
+ # OS_VERSION next
+ # OS_VERSION.MINOR next
+ # ARCH/default.ks next
+ # default.ks finally.
+ kickstarts = [
+ "%s/%s/%s.%i.ks" % (kickbase,arch,os_version,int(minor)),
+ "%s/%s/%s.ks" % (kickbase,arch,os_version),
+ "%s/%s.%i.ks" % (kickbase,os_version,int(minor)),
+ "%s/%s.ks" % (kickbase,os_version),
+ "%s/%s/default.ks" % (kickbase,arch),
+ "%s/default.ks" % kickbase
+ ]
+ for kickstart in kickstarts:
+ if os.path.exists(kickstart):
+ return os_version, kickstart
+
if flavor == "fedora":
if major >= 8:
return os_version , "/etc/cobbler/sample_end.ks"
@@ -1000,7 +1036,7 @@ class DebianImporter ( BaseImporter ) :
return (None, accum[0], accum[1])
- def set_variance(self, flavor, major, minor):
+ def set_variance(self, flavor, major, minor, arch):
dist_names = { '4.0' : "etch" , '5.0' : "lenny" }
dist_vers = "%s.%s" % ( major , minor )
@@ -1048,7 +1084,7 @@ class UbuntuImporter ( DebianImporter ) :
return (None, accum[0], accum[1])
- def set_variance(self, flavor, major, minor):
+ def set_variance(self, flavor, major, minor, arch):
# Release names taken from wikipedia
dist_names = { '4.10':"WartyWarthog", '5.4':"HoaryHedgehog", '5.10':"BreezyBadger", '6.4':"DapperDrake", '6.10':"EdgyEft", '7.4':"FeistyFawn", '7.10':"GutsyGibbon", '8.4':"HardyHeron", '8.10':"IntrepidIbex", '9.4':"JauntyJackalope" }
diff --git a/cobbler/item_distro.py b/cobbler/item_distro.py
index a83ea78..0654c3f 100644
--- a/cobbler/item_distro.py
+++ b/cobbler/item_distro.py
@@ -54,6 +54,7 @@ class Distro(item.Item):
self.mgmt_classes = []
self.depth = 0
self.template_files = {}
+ self.comment = None
def make_clone(self):
ds = self.to_datastruct()
@@ -87,6 +88,7 @@ class Distro(item.Item):
self.depth = self.load_item(seed_data,'depth',0)
self.mgmt_classes = self.load_item(seed_data,'mgmt_classes',[])
self.template_files = self.load_item(seed_data,'template_files',{})
+ self.comment = self.load_item(seed_data,'comment')
# backwards compatibility enforcement
self.set_arch(self.arch)
@@ -122,6 +124,10 @@ class Distro(item.Item):
def set_os_version(self, os_version):
return utils.set_os_version(self,os_version)
+ def set_comment(self, comment):
+ self.comment = comment
+ return True
+
def set_initrd(self,initrd):
"""
Specifies an initrd image. Path search works as in set_kernel.
@@ -195,7 +201,8 @@ class Distro(item.Item):
'source_repos' : self.source_repos,
'parent' : self.parent,
'depth' : self.depth,
- 'owners' : self.owners
+ 'owners' : self.owners,
+ 'comment' : self.comment
}
def printable(self):
@@ -216,6 +223,7 @@ class Distro(item.Item):
buf = buf + _("owners : %s\n") % self.owners
buf = buf + _("post kernel options : %s\n") % self.kernel_options_post
buf = buf + _("template files : %s\n") % self.template_files
+ buf = buf + _("comment : %s\n") % self.comment
return buf
def remote_methods(self):
@@ -231,6 +239,7 @@ class Distro(item.Item):
'os-version' : self.set_os_version,
'owners' : self.set_owners,
'mgmt-classes' : self.set_mgmt_classes,
- 'template-files': self.set_template_files
+ 'template-files': self.set_template_files,
+ 'comment' : self.set_comment
}
--
1.6.0.3