diff options
author | Michael DeHaan <mdehaan@mdehaan.rdu.redhat.com> | 2007-06-07 10:49:03 -0400 |
---|---|---|
committer | Michael DeHaan <mdehaan@mdehaan.rdu.redhat.com> | 2007-06-07 10:49:03 -0400 |
commit | 589216b2c987ef94740941fcf0d1358ac976ce1e (patch) | |
tree | 0df849e6d69bdf3d9e70187b305b75802e64ea40 /cobbler | |
parent | 88fac5ec40eb49f3bd0c3e0e63002882e1582a71 (diff) | |
download | third_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.py | 2 | ||||
-rw-r--r-- | cobbler/action_reposync.py | 28 | ||||
-rwxr-xr-x | cobbler/cobbler.py | 3 | ||||
-rw-r--r-- | cobbler/item_repo.py | 54 |
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 + |