summaryrefslogtreecommitdiffstats
path: root/cobbler
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@redhat.com>2006-12-13 16:51:08 -0500
committerJim Meyering <jim@meyering.net>2006-12-13 16:51:08 -0500
commit3e56da3ca7a1a856e64ba8039d9617582852f14a (patch)
tree6eaea37a16064cee0762ef8feb6d8d483a9f77c9 /cobbler
parentb7eabac3549b70fb5ce22b69b79b400affa98690 (diff)
downloadthird_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.py20
-rw-r--r--cobbler/action_sync.py14
-rwxr-xr-xcobbler/cobbler.py3
-rw-r--r--cobbler/item_repo.py36
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