[et-mgmt-tools] [PATCH] cobbler - add arch to repo definition to override default arch for reposync
Perry Myers
pmyers at redhat.com
Thu Jun 7 18:35:27 UTC 2007
For using cobbler to synchronize repositories via reposync, the default arch is always used which makes syncing with multiple arches not possible. (For example to grab the src repos)
To change this I added a --arch flag that can be used to override the default reposync arch. If yumdownloader is used (in the case of using rpm_list to restrict the packages downloaded) --source is passed on the command line if --arch==src. This allows source packages to be retrieved, but I don't know how to override yumdownloader to do architectures other than the current system arch. Comments on this appreciated...
Signed-off-by: Perry Myers (pmyers at redhat.com)
Thanks,
Perry
--
|=- Red Hat, Engineering, Emerging Technologies, Boston. +1 703 362 9622 -=|
diff --git a/cobbler/action_reposync.py b/cobbler/action_reposync.py
index 76e673f..fdcf270 100644
--- a/cobbler/action_reposync.py
+++ b/cobbler/action_reposync.py
@@ -119,9 +119,11 @@ class RepoSync:
temp_file = self.create_local_file(repo, temp_path, output=False)
if not has_rpm_list:
-
# if we have not requested only certain RPMs, use reposync
cmd = "/usr/bin/reposync --config=%s --repoid=%s --download_path=%s" % (temp_file, repo.name, store_path)
+ if repo.arch != "":
+ cmd = "%s -a %s" % (cmd, repo.arch)
+
print _("- %s") % cmd
cmds.append(cmd)
@@ -131,10 +133,14 @@ class RepoSync:
if not os.path.exists(dest_path):
os.makedirs(dest_path)
+ use_source = ""
+ if repo.arch == "src":
+ use_source = "--source"
+
# if we only want certain RPMs, use yumdownloader (likely more than once)
# FIXME: yumdownloader has a current bug where --resolve blows up
# removing --resolve until I get the email from bugzilla saying it's fixed.
- cmd = "/usr/bin/yumdownloader -c %s --destdir=%s %s" %(temp_file, dest_path, " ".join(repo.rpm_list))
+ cmd = "/usr/bin/yumdownloader %s -c %s --destdir=%s %s" % (use_source, temp_file, dest_path, " ".join(repo.rpm_list))
print _("- %s") % cmd
cmds.append(cmd)
else:
@@ -146,6 +152,10 @@ class RepoSync:
print _("- warning: --rpm-list is not supported for RHN content")
rest = repo.mirror[6:] # everything after rhn://
cmd = "/usr/bin/reposync -r %s --download_path=%s" % (rest, store_path)
+
+ if repo.arch != "":
+ cmd = "%s -a %s" % (cmd, repo.arch)
+
print _("- %s") % cmd
cmds.append(cmd)
diff --git a/cobbler/cobbler.py b/cobbler/cobbler.py
index e999d2d..e275f39 100755
--- a/cobbler/cobbler.py
+++ b/cobbler/cobbler.py
@@ -433,7 +433,8 @@ class BootCLI:
'--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),
- '--createrepo-flags' : lambda(a): repo.set_createrepo_flags(a)
+ '--createrepo-flags' : lambda(a): repo.set_createrepo_flags(a),
+ '--arch' : lambda(a): repo.set_arch(a)
}
def on_ok():
if newname is not None:
diff --git a/cobbler/item_repo.py b/cobbler/item_repo.py
index f58cd1b..bdd1a48 100644
--- a/cobbler/item_repo.py
+++ b/cobbler/item_repo.py
@@ -31,7 +31,8 @@ class Repo(item.Item):
self.keep_updated = 1 # has reasonable defaults
self.local_filename = "" # off by default
self.rpm_list = "" # just get selected RPMs + deps
- self.createrepo_flags = "-c cache" # none by default
+ self.createrepo_flags = "-c cache" # turn on cache by default for performance
+ self.arch = "" # use default arch
def from_datastruct(self,seed_data):
self.name = self.load_item(seed_data, 'name')
@@ -40,6 +41,7 @@ class Repo(item.Item):
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', '-c cache')
+ self.arch = self.load_item(seed_data, 'arch')
return self
def set_name(self,name):
@@ -108,6 +110,13 @@ class Repo(item.Item):
self.createrepo_flags = createrepo_flags
return True
+ def set_arch(self,arch):
+ """
+ Override the arch used for reposync
+ """
+ self.arch = arch
+ return True
+
def is_valid(self):
"""
A repo is valid if it has a name and a mirror URL
@@ -125,7 +134,8 @@ class Repo(item.Item):
'keep_updated' : self.keep_updated,
'local_filename' : self.local_filename,
'rpm_list' : self.rpm_list,
- 'createrepo_flags' : self.createrepo_flags
+ 'createrepo_flags' : self.createrepo_flags,
+ 'arch' : self.arch
}
def printable(self):
@@ -135,6 +145,7 @@ class Repo(item.Item):
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
+ buf = buf + _("arch : %s\n") % self.arch
return buf
def is_rsync_mirror(self):
More information about the et-mgmt-tools
mailing list