summaryrefslogtreecommitdiffstats
path: root/cobbler
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-06-07 10:49:03 -0400
committerMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-06-07 10:49:03 -0400
commit589216b2c987ef94740941fcf0d1358ac976ce1e (patch)
tree0df849e6d69bdf3d9e70187b305b75802e64ea40 /cobbler
parent88fac5ec40eb49f3bd0c3e0e63002882e1582a71 (diff)
downloadthird_party-cobbler-589216b2c987ef94740941fcf0d1358ac976ce1e.tar.gz
third_party-cobbler-589216b2c987ef94740941fcf0d1358ac976ce1e.tar.xz
third_party-cobbler-589216b2c987ef94740941fcf0d1358ac976ce1e.zip
This is Perry Myers's patch to reposync to allow for caching options and to
eliminate extra calls to createrepo.
Diffstat (limited to 'cobbler')
-rw-r--r--cobbler/action_import.py2
-rw-r--r--cobbler/action_reposync.py28
-rwxr-xr-xcobbler/cobbler.py3
-rw-r--r--cobbler/item_repo.py54
4 files changed, 53 insertions, 34 deletions
diff --git a/cobbler/action_import.py b/cobbler/action_import.py
index 3693e63..3275e07 100644
--- a/cobbler/action_import.py
+++ b/cobbler/action_import.py
@@ -339,7 +339,7 @@ class Importer:
if not self.processed_repos.has_key(comps_path):
utils.remove_yum_olddata(comps_path)
#cmd = "createrepo --basedir / --groupfile %s %s" % (os.path.join(comps_path, masterdir, comps_file), comps_path)
- cmd = "createrepo --groupfile %s %s" % (os.path.join(comps_path, masterdir, comps_file), comps_path)
+ cmd = "createrepo -c cache --groupfile %s %s" % (os.path.join(comps_path, masterdir, comps_file), comps_path)
print _("- %s") % cmd
sub_process.call(cmd,shell=True)
self.processed_repos[comps_path] = 1
diff --git a/cobbler/action_reposync.py b/cobbler/action_reposync.py
index 0df8059..76e673f 100644
--- a/cobbler/action_reposync.py
+++ b/cobbler/action_reposync.py
@@ -45,7 +45,7 @@ class RepoSync:
self.systems = config.systems()
self.settings = config.settings()
self.repos = config.repos()
-
+
# ==================================================================================
def run(self,verbose=True):
@@ -59,13 +59,11 @@ class RepoSync:
mirror = repo.mirror
if not os.path.isdir(repo_path) and not repo.mirror.lower().startswith("rhn://"):
os.makedirs(repo_path)
- # if path contains http:// or ftp://, use with yum's reposync.
- # else do rsync
- lower = mirror.lower()
- if lower.startswith("http://") or lower.startswith("ftp://") or lower.startswith("rhn://"):
- self.do_reposync(repo)
- else:
+
+ if repo.is_rsync_mirror():
self.do_rsync(repo)
+ else:
+ self.do_reposync(repo)
return True
@@ -178,8 +176,7 @@ class RepoSync:
# now run createrepo to rebuild the index
- arg = None
- os.path.walk(dest_path, self.createrepo_walker, arg)
+ os.path.walk(dest_path, self.createrepo_walker, repo)
# create the config file the hosts will use to access the repository.
@@ -210,9 +207,8 @@ class RepoSync:
rc = sub_process.call(cmd, shell=True)
if rc !=0:
raise CX(_("cobbler reposync failed"))
- arg = {}
print _("- walking: %s") % dest_path
- os.path.walk(dest_path, self.createrepo_walker, arg)
+ os.path.walk(dest_path, self.createrepo_walker, repo)
self.create_local_file(repo, dest_path)
# ==================================================================================
@@ -243,19 +239,19 @@ class RepoSync:
# ==================================================================================
- def createrepo_walker(self, arg, dirname, fname):
+ def createrepo_walker(self, repo, dirname, fnames):
"""
Used to run createrepo on a copied mirror.
"""
target_dir = os.path.dirname(dirname).split("/")[-1]
- print _("- scanning: %s") % target_dir
- if target_dir.lower() in [ "i386", "x86_64", "ia64" ] or (arg is None):
+ if target_dir.lower() in [ "i386", "x86_64", "ia64" ] or not repo.is_rsync_mirror():
utils.remove_yum_olddata(dirname)
try:
- cmd = "createrepo %s" % dirname
+ cmd = "createrepo %s %s" % (repo.createrepo_flags, dirname)
print _("- %s") % cmd
sub_process.call(cmd, shell=True)
except:
print _("- createrepo failed. Is it installed?")
- fnames = [] # we're in the right place
+ del fnames[:] # we're in the right place
+
diff --git a/cobbler/cobbler.py b/cobbler/cobbler.py
index 0daaf85..a9efd95 100755
--- a/cobbler/cobbler.py
+++ b/cobbler/cobbler.py
@@ -432,7 +432,8 @@ class BootCLI:
'--mirror' : lambda(a): repo.set_mirror(a),
'--keep-updated' : lambda(a): repo.set_keep_updated(a),
'--local-filename' : lambda(a): repo.set_local_filename(a),
- '--rpm-list' : lambda(a): repo.set_rpm_list(a)
+ '--rpm-list' : lambda(a): repo.set_rpm_list(a),
+ '--createrepo-flags' : lambda(a): repo.set_createrepo_flags(a),
}
def on_ok():
if newname is not None:
diff --git a/cobbler/item_repo.py b/cobbler/item_repo.py
index be2ffa4..ac224fe 100644
--- a/cobbler/item_repo.py
+++ b/cobbler/item_repo.py
@@ -30,14 +30,16 @@ class Repo(item.Item):
self.mirror = None # is required
self.keep_updated = 1 # has reasonable defaults
self.local_filename = "" # off by default
- self.rpm_list = "" # just get selected RPMs + deps
+ self.rpm_list = "" # just get selected RPMs + deps
+ self.createrepo_flags = "" # none by default
def from_datastruct(self,seed_data):
- self.name = self.load_item(seed_data, 'name')
- self.mirror = self.load_item(seed_data, 'mirror')
- self.keep_updated = self.load_item(seed_data, 'keep_updated')
- self.local_filename = self.load_item(seed_data, 'local_filename')
- self.rpm_list = self.load_item(seed_data, 'rpm_list')
+ self.name = self.load_item(seed_data, 'name')
+ self.mirror = self.load_item(seed_data, 'mirror')
+ self.keep_updated = self.load_item(seed_data, 'keep_updated')
+ self.local_filename = self.load_item(seed_data, 'local_filename')
+ self.rpm_list = self.load_item(seed_data, 'rpm_list')
+ self.createrepo_flags = self.load_item(seed_data, 'createrepo_flags')
return self
def set_name(self,name):
@@ -98,6 +100,14 @@ class Repo(item.Item):
pass
self.rpm_list = rpmlist
+ def set_createrepo_flags(self,createrepo_flags):
+ """
+ Flags passed to createrepo when it is called. Common flags to use would be
+ -c cache or -g comps.xml to generate group information.
+ """
+ self.createrepo_flags = createrepo_flags
+ return True
+
def is_valid(self):
"""
A repo is valid if it has a name and a mirror URL
@@ -110,18 +120,30 @@ class Repo(item.Item):
def to_datastruct(self):
return {
- 'name' : self.name,
- 'mirror' : self.mirror,
- 'keep_updated' : self.keep_updated,
- 'local_filename' : self.local_filename,
- 'rpm_list' : self.rpm_list
+ 'name' : self.name,
+ 'mirror' : self.mirror,
+ 'keep_updated' : self.keep_updated,
+ 'local_filename' : self.local_filename,
+ 'rpm_list' : self.rpm_list,
+ 'createrepo_flags' : self.createrepo_flags
}
def printable(self):
- buf = _("repo : %s\n") % self.name
- buf = buf + _("mirror : %s\n") % self.mirror
- buf = buf + _("keep updated : %s\n") % self.keep_updated
- buf = buf + _("local filename : %s\n") % self.local_filename
- buf = buf + _("rpm list : %s\n") % self.rpm_list
+ buf = _("repo : %s\n") % self.name
+ buf = buf + _("mirror : %s\n") % self.mirror
+ buf = buf + _("keep updated : %s\n") % self.keep_updated
+ buf = buf + _("local filename : %s\n") % self.local_filename
+ buf = buf + _("rpm list : %s\n") % self.rpm_list
+ buf = buf + _("createrepo_flags : %s\n") % self.createrepo_flags
return buf
+ def is_rsync_mirror(self):
+ """
+ Returns True if this mirror is synchronized using rsync, False otherwise
+ """
+ lower = self.mirror.lower()
+ if lower.startswith("http://") or lower.startswith("ftp://") or lower.startswith("rhn://"):
+ return False
+ else:
+ return True
+