diff options
author | Michael DeHaan <mdehaan@redhat.com> | 2006-12-13 16:51:08 -0500 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2006-12-13 16:51:08 -0500 |
commit | 3e56da3ca7a1a856e64ba8039d9617582852f14a (patch) | |
tree | 6eaea37a16064cee0762ef8feb6d8d483a9f77c9 /cobbler | |
parent | b7eabac3549b70fb5ce22b69b79b400affa98690 (diff) | |
download | third_party-cobbler-3e56da3ca7a1a856e64ba8039d9617582852f14a.tar.gz third_party-cobbler-3e56da3ca7a1a856e64ba8039d9617582852f14a.tar.xz third_party-cobbler-3e56da3ca7a1a856e64ba8039d9617582852f14a.zip |
Adding createrepo calls to "cobbler reposync" ... working on auto-generating yum configs
and allowing them to be installable for mirrored repos.
Diffstat (limited to 'cobbler')
-rw-r--r-- | cobbler/action_reposync.py | 20 | ||||
-rw-r--r-- | cobbler/action_sync.py | 14 | ||||
-rwxr-xr-x | cobbler/cobbler.py | 3 | ||||
-rw-r--r-- | cobbler/item_repo.py | 36 |
4 files changed, 60 insertions, 13 deletions
diff --git a/cobbler/action_reposync.py b/cobbler/action_reposync.py index 8089900..f067aee 100644 --- a/cobbler/action_reposync.py +++ b/cobbler/action_reposync.py @@ -27,8 +27,6 @@ import cexceptions import traceback import errno - - class RepoSync: """ Handles conversion of internal state to the tftpboot tree layout @@ -79,8 +77,22 @@ class RepoSync: spacer = "" if repo.mirror.find("ssh://") != -1: spacer = "-e ssh" - cmd = "rsync -av %s --exclude=debug/ %s %s" % (spacer, repo.mirror, dest_path) + cmd = "rsync -av %s --delete --delete-excluded --exclude-from=/etc/cobbler/rsync.exclude %s %s" % (spacer, repo.mirror, dest_path) print "executing: %s" % cmd rc = sub_process.call(cmd, shell=True) - + arg = {} + print "- walking: %s" % dest_path + os.path.walk(dest_path, self.createrepo_walker, arg) + def createrepo_walker(self, arg, dirname, fname): + target_dir = os.path.dirname(dirname).split("/")[-1] + print "- scanning: %s" % target_dir + if target_dir.lower() in [ "i386", "x86_64", "ia64" ]: + try: + cmd = "createrepo %s" % dirname + print cmd + sub_process.call(cmd, shell=True) + except: + print "- createrepo failed. Is it installed?" + fnames = [] # we're in the right place + diff --git a/cobbler/action_sync.py b/cobbler/action_sync.py index 56e1c03..1b5bbf5 100644 --- a/cobbler/action_sync.py +++ b/cobbler/action_sync.py @@ -282,6 +282,7 @@ class BootSync: g.ks_meta, )) meta["yum_repo_stanza"] = self.generate_repo_stanza(g) + meta["yum_config_stanza"] = self.generate_config_stanza(g) self.apply_template(kickstart_path, meta, dest) except: traceback.print_exc() # leave this in, for now... @@ -302,6 +303,18 @@ class BootSync: buf = buf + "repo --name=%s --baseurl=%s\n" % (repo.name, http_url) return buf + def generate_config_stanza(self, profile): + # returns the line in post that would configure yum to use repos added with "cobbler repo add" + repos = profile.respos.split(" ") + buf = "" + for r in repos: + repo = self.repos.find(r) + if repo is None: + raise cexceptions.CobblerException("no_repo",r) + if not (repo.local_filename is None and repo.local_filename != ""): + buf = buf + "wget http://%s/cobbler/repo_mirror/this.repo -O /etc/yum.repos.d/%s.repo" % (self.settings.server, repo.name, repo.local_filename) + return buf + def validate_kickstarts_per_system(self): """ PXE provisioning needs kickstarts evaluated per system. @@ -331,6 +344,7 @@ class BootSync: s.ks_meta )) meta["yum_repo_stanza"] = self.generate_repo_stanza(profile) + meta["yum_config_stanza"] = self.generate_config_stanza(profile) self.apply_template(kickstart_path, meta, dest) except: msg = "err_kickstart2" diff --git a/cobbler/cobbler.py b/cobbler/cobbler.py index 6e41b38..4bcd074 100755 --- a/cobbler/cobbler.py +++ b/cobbler/cobbler.py @@ -266,7 +266,8 @@ class BootCLI: '--name' : lambda(a): repo.set_name(a), '--mirror' : lambda(a): repo.set_mirror(a), '--keep-updated' : lambda(a): repo.set_keep_updated(a), - '--root' : lambda(a): repo.set_root(a) + '--root' : lambda(a): repo.set_root(a), + '--local-filename' : lambda(a): repo.set_local_filename(a) } on_ok = lambda: self.api.repos().add(repo) return self.apply_args(args,commands,on_ok) diff --git a/cobbler/item_repo.py b/cobbler/item_repo.py index e911c86..7c13e8d 100644 --- a/cobbler/item_repo.py +++ b/cobbler/item_repo.py @@ -30,12 +30,14 @@ class Repo(item.Item): self.mirror = None # is required self.keep_updated = 1 # has reasonable defaults self.root = "/var/www/cobbler/repo_mirror" # has reasonable defaults + self.local_filename = "" # off 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.root = self.load_item(seed_data, 'root') + 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.root = self.load_item(seed_data, 'root') + self.local_filename = self.load_item(seed_data, 'local_filename') return self def set_name(self,name): @@ -77,6 +79,22 @@ class Repo(item.Item): return True raise cexceptions.CobblerException("no_exist2",root) + def set_local_filename(self,fname): + """ + If this repo is to be automatically configured to be "in use" for profiles that reference it, + the local filename must be specified. This allows, for instance, to define a repo foo and autocreate + a foo.repo on the system that corresponds to it in /etc/yum.repos.d. + + You can overwrite default repos by doing this, so + setting a value of something like "fedora-updates" has some significance. If you just name it foo, it's + a bonus repo of your own special stuff. This is only used if the distro has set_repos() called on it + with the name of this repo. + + NOTE: this should not contain the ".repo" in the filename. The kickstart will add that part. + """ + self.local_filename = fname + return True + def is_valid(self): """ A repo is valid if it has a name and a mirror URL @@ -89,10 +107,11 @@ class Repo(item.Item): def to_datastruct(self): return { - 'name' : self.name, - 'mirror' : self.mirror, - 'keep_updated' : self.keep_updated, - 'root' : self.root + 'name' : self.name, + 'mirror' : self.mirror, + 'keep_updated' : self.keep_updated, + 'root' : self.root, + 'local_filename' : self.local_filename } def printable(self,id): @@ -100,5 +119,6 @@ class Repo(item.Item): buf = buf + "mirror : %s\n" % self.mirror buf = buf + "keep updated : %s\n" % self.keep_updated buf = buf + "root : %s\n" % self.root + buf = buf + "local filename : %s\n" % self.local_filename return buf |