summaryrefslogtreecommitdiffstats
path: root/src/sbin
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2011-11-03 09:15:12 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2011-11-17 08:13:20 -0500
commit7d4325f5e12a40b5b8ae8fc85a4e934b94dd1adf (patch)
treeb7f0b4beedb1331347ea639b7a70c3c08dd3343e /src/sbin
parent2e1e5c6283a16937c02204d4551bd20c29849a11 (diff)
downloadbcfg2-7d4325f5e12a40b5b8ae8fc85a4e934b94dd1adf.tar.gz
bcfg2-7d4325f5e12a40b5b8ae8fc85a4e934b94dd1adf.tar.bz2
bcfg2-7d4325f5e12a40b5b8ae8fc85a4e934b94dd1adf.zip
added support for default/mandatory/optional package groups
Diffstat (limited to 'src/sbin')
-rwxr-xr-xsrc/sbin/bcfg2-yum-helper33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/sbin/bcfg2-yum-helper b/src/sbin/bcfg2-yum-helper
index 1fb7c8891..e0ba02382 100755
--- a/src/sbin/bcfg2-yum-helper
+++ b/src/sbin/bcfg2-yum-helper
@@ -105,22 +105,34 @@ class DepSolver(object):
self.get_package_name(required))
return prov
- def get_group(self, group):
+ def get_group(self, group, ptype="default"):
if group.startswith("@"):
group = group[1:]
try:
if self.yumbase.comps.has_group(group):
- pkgs = self.yumbase.comps.return_group(group).packages
+ group = self.yumbase.comps.return_group(group)
else:
logger.warning("Packages: '%s' is not a valid group" % group)
- pkgs = []
+ return []
except yum.Errors.GroupsError:
err = sys.exc_info()[1]
logger.warning("Packages: %s" % err)
- pkgs = []
-
- return pkgs
+ return []
+
+ if ptype == "default":
+ return [p
+ for p, d in list(group.default_packages.items())
+ if d]
+ elif ptype == "mandatory":
+ return [p
+ for p, m in list(group.mandatory_packages.items())
+ if m]
+ elif ptype == "optional" or ptype == "all":
+ return group.packages
+ else:
+ logger.warning("Unknown group package type '%s'" % ptype)
+ return []
def _filter_provides(self, package, providers):
providers = [pkg for pkg in self._filter_arch(providers)]
@@ -300,9 +312,16 @@ def main():
elif cmd == "is_virtual_package":
package = json.loads(sys.stdin.read())
print json.dumps(bool(depsolver.get_provides(package, silent=True)))
- elif (cmd == "get_deps" or cmd == "get_provides" or cmd == "get_group"):
+ elif cmd == "get_deps" or cmd == "get_provides":
package = json.loads(sys.stdin.read())
print json.dumps(list(getattr(depsolver, cmd)(package)))
+ elif cmd == "get_group":
+ data = json.loads(sys.stdin.read())
+ if "type" in data:
+ packages = depsolver.get_group(data['group'], ptype=data['type'])
+ else:
+ packages = depsolver.get_group(data['group'])
+ print json.dumps(list(packages))
elif cmd == "is_package":
package = json.loads(sys.stdin.read())
print json.dumps(getattr(depsolver, cmd)(package))