[Cluster-devel] conga/ricci/modules/rpm PackageHandler.cpp Pac ...

rmccabe at sourceware.org rmccabe at sourceware.org
Tue Sep 11 18:59:43 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-09-11 18:59:42

Modified files:
	ricci/modules/rpm: PackageHandler.cpp PackageHandler.h 
	                   RpmModule.cpp RpmModule.h main.cpp 

Log message:
	- More cleanup
	- Recognize F7 by name ("Moonshine") as having the RHEL5 cluster bits.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&r1=1.15&r2=1.16
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.h.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/main.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6

--- conga/ricci/modules/rpm/PackageHandler.cpp	2007/09/11 02:45:28	1.15
+++ conga/ricci/modules/rpm/PackageHandler.cpp	2007/09/11 18:59:42	1.16
@@ -1,5 +1,5 @@
 /*
-  Copyright Red Hat, Inc. 2006
+  Copyright Red Hat, Inc. 2006-2007
 
   This program is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by the
@@ -28,222 +28,244 @@
 #include <unistd.h>
 #include <sys/utsname.h>
 
-
 using namespace std;
 
+#define RPM_PATH		"/bin/rpm"
+#define UP2DATE_PATH	"/usr/sbin/up2date-nox"
+#define YUM_PATH		"/usr/bin/yum"
 
-#define RPM_PATH       "/bin/rpm"
-#define UP2DATE_PATH   "/usr/sbin/up2date-nox"
-#define YUM_PATH       "/usr/bin/yum"
-
-
-static bool
-RHEL4=false, RHEL5=false, FC5=false, FC6=false;
-static void
-set_release();
-
-
+static bool RHEL4=false, RHEL5=false, FC5=false, FC6=false;
+static void set_release();
 
 // class PackageInstaller
 
-
-
 PackageInstaller::PackageInstaller()
 {
-  set_release();
+	set_release();
 }
 
 PackageInstaller::~PackageInstaller()
 {}
 
-
 bool
 PackageInstaller::available()
 {
-  if (RHEL4) {
-    bool rhn_available = true;
-    // check existence of /etc/sysconfig/rhn/systemid
-    if (access("/etc/sysconfig/rhn/systemid", F_OK))
-      rhn_available = false;
-    // check for subscribed channels
-    if (rhn_available) {
-      String out, err;
-      int status;
-      vector<String> args;
-      args.push_back("--show-channels");
-      if (utils::execute(UP2DATE_PATH, args, out, err, status, false))
-	throw command_not_found_error_msg(UP2DATE_PATH);
-      if (status != 0)
-	rhn_available = false;
-    }
-    return rhn_available;
-  } else if (FC5 || FC6 || RHEL5) {
-    // nothing to check for, maybe ping repositories???
-    return true;
-  } else
-    return false;
+	if (RHEL4) {
+		bool rhn_available = true;
+		// check existence of /etc/sysconfig/rhn/systemid
+		if (access("/etc/sysconfig/rhn/systemid", F_OK))
+			rhn_available = false;
+
+		// check for subscribed channels
+		if (rhn_available) {
+			String out, err;
+			int status;
+			vector<String> args;
+
+			args.push_back("--show-channels");
+			if (utils::execute(UP2DATE_PATH, args, out, err, status, false))
+				throw command_not_found_error_msg(UP2DATE_PATH);
+			if (status != 0)
+				rhn_available = false;
+		}
+		return rhn_available;
+	} else if (FC5 || FC6 || RHEL5) {
+		// use yum
+		// nothing to check for, maybe ping repositories?
+		return true;
+	} else
+		return false;
 }
 
 map<String, String>
 PackageInstaller::available_rpms()
 {
-  map<String, String> rpms;
+	map<String, String> rpms;
 
-  if (!available())
-    return rpms;
+	if (!available())
+		return rpms;
 
-  if (RHEL4) {
-    String out, err;
-    int status;
-    vector<String> args;
-    args.push_back("--showall");
-    if (utils::execute(UP2DATE_PATH, args, out, err, status, false))
-      throw command_not_found_error_msg(UP2DATE_PATH);
-    vector<String> lines = utils::split(utils::strip(out), "\n");
-    for (vector<String>::const_iterator iter = lines.begin();
-	 iter != lines.end();
-	 iter++) {
-      String line(*iter);
-      line = utils::strip(line);
-      vector<String> words = utils::split(line, "-");
-      vector<String>::size_type l = words.size();
-      if (l < 3)
-	continue;
-      String name = words[0];
-      for (unsigned int i=1; i<l-2; i++)
-	name += "-" + words[i];
-      String version = words[l-2] + "-" + words[l-1].substr(0, words[l-1].rfind("."));
-      rpms[name] = version;
-    }
-
-  } else if (FC5 || FC6 || RHEL5) {
-    String out, err;
-    int status;
-    vector<String> args;
-    args.push_back("-y");
-    args.push_back("list");
-    args.push_back("all");
-    if (utils::execute(YUM_PATH, args, out, err, status, false))
-      throw command_not_found_error_msg(YUM_PATH);
-    vector<String> lines = utils::split(utils::strip(out), "\n");
-    for (vector<String>::const_iterator iter = lines.begin();
-	 iter != lines.end();
-	 iter++) {
-      String line(*iter);
-      line = utils::strip(line);
-      vector<String> words = utils::split(line);
-      vector<String>::size_type l = words.size();
-      if (l < 3)
-	continue;
-      String name = words[0];
-      String::size_type idx = name.rfind('.');
-      if (idx == String::npos)
-	continue;
-      name = name.substr(0, idx);
-      String version = words[1];
-      rpms[name] = version;
-    }
-  }
+	if (RHEL4) {
+		String out, err;
+		int status;
+		vector<String> args;
+
+		args.push_back("--showall");
+		if (utils::execute(UP2DATE_PATH, args, out, err, status, false))
+			throw command_not_found_error_msg(UP2DATE_PATH);
+		vector<String> lines = utils::split(utils::strip(out), "\n");
+
+		for (vector<String>::const_iterator
+				iter = lines.begin() ;
+				iter != lines.end() ;
+				iter++)
+		{
+			String line(*iter);
+			line = utils::strip(line);
+			vector<String> words = utils::split(line, "-");
+			vector<String>::size_type l = words.size();
+			if (l < 3)
+				continue;
+
+			String name = words[0];
+			for (unsigned int i = 1 ; i < l - 2 ; i++)
+				name += "-" + words[i];
+			String version = words[l - 2] + "-" + words[l - 1].substr(0, words[l - 1].rfind("."));
+			rpms[name] = version;
+		}
+	} else if (FC5 || FC6 || RHEL5) {
+		String out, err;
+		int status;
+		vector<String> args;
+
+		args.push_back("-y");
+		args.push_back("list");
+		args.push_back("all");
+
+		if (utils::execute(YUM_PATH, args, out, err, status, false))
+			throw command_not_found_error_msg(YUM_PATH);
+
+		vector<String> lines = utils::split(utils::strip(out), "\n");
+
+		for (vector<String>::const_iterator
+				iter = lines.begin() ;
+				iter != lines.end() ;
+				iter++)
+		{
+			String line(*iter);
+			line = utils::strip(line);
+			vector<String> words = utils::split(line);
+			vector<String>::size_type l = words.size();
+			if (l < 3)
+				continue;
+
+			String name = words[0];
+			String::size_type idx = name.rfind('.');
+			if (idx == String::npos)
+				continue;
+			name = name.substr(0, idx);
+			String version = words[1];
+			rpms[name] = version;
+		}
+	}
 
-  return rpms;
+	return rpms;
 }
 
 bool
 PackageInstaller::install(vector<String> rpms)
 {
-  if (rpms.empty())
-    return true;
+	if (rpms.empty())
+		return true;
 
-  if (RHEL4) {
-    String out, err;
-    int status;
-    vector<String> args;
-    for (vector<String>::size_type i=0; i<rpms.size(); i++)
-      args.push_back(rpms[i]);
-    if (utils::execute(UP2DATE_PATH, args, out, err, status, true))
-      throw command_not_found_error_msg(UP2DATE_PATH);
-    if (status != 0)
-      throw String(UP2DATE_PATH) + " failed";
-    return true;
-
-  } else if (FC5 || FC6 || RHEL5) {
-    vector<String> rpms_to_install, rpms_to_upgrade;
-    String out, err;
-    int status;
-    vector<String> args;
-    args.push_back("-y");
-    args.push_back("list");
-    args.push_back("installed");
-    if (utils::execute(YUM_PATH, args, out, err, status, false))
-      throw command_not_found_error_msg(YUM_PATH);
-    if (status)
-      return false;
-    vector<String> lines = utils::split(utils::strip(out), "\n");
-    for (vector<String>::const_iterator rpm = rpms.begin();
-	 rpm != rpms.end();
-	 rpm++) {
-      bool install = true;
-      for (vector<String>::const_iterator iter = lines.begin();
-	   iter != lines.end();
-	   iter++) {
-	String line(*iter);
-	line = utils::strip(line);
-	if (line.find(*rpm + ".") == 0)
-	  install = false;
-      }
-      if (install)
-	rpms_to_install.push_back(*rpm);
-      else
-	rpms_to_upgrade.push_back(*rpm);
-    }
-    if (!rpms_to_install.empty()) {
-      out = err = "";
-      args.clear();
-      args.push_back("-y");
-      args.push_back("install");
-      for (vector<String>::const_iterator rpm = rpms_to_install.begin();
-	   rpm != rpms_to_install.end();
-	   rpm++)
-	args.push_back(*rpm);
-      if (utils::execute(YUM_PATH, args, out, err, status, false))
-	throw command_not_found_error_msg(YUM_PATH);
-      if (status)
-	return false;
-    }
-    if (!rpms_to_upgrade.empty()) {
-      out = err = "";
-      args.clear();
-      args.push_back("-y");
-      args.push_back("update");
-      for (vector<String>::const_iterator rpm = rpms_to_upgrade.begin();
-	   rpm != rpms_to_upgrade.end();
-	   rpm++)
-	args.push_back(*rpm);
-      if (utils::execute(YUM_PATH, args, out, err, status, false))
-	throw command_not_found_error_msg(YUM_PATH);
-      if (status)
-	return false;
-    }
-    return true;
-  } else
-    return false;
+	if (RHEL4) {
+		String out, err;
+		int status;
+		vector<String> args;
+
+		for (vector<String>::size_type i = 0 ; i < rpms.size() ; i++)
+			args.push_back(rpms[i]);
+
+		if (utils::execute(UP2DATE_PATH, args, out, err, status, true))
+			throw command_not_found_error_msg(UP2DATE_PATH);
+
+		if (status != 0)
+			throw String(UP2DATE_PATH) + " failed: " + err;
+		return true;
+	} else if (FC5 || FC6 || RHEL5) {
+		vector<String> rpms_to_install, rpms_to_upgrade;
+		String out, err;
+		int status;
+		vector<String> args;
+
+		args.push_back("-y");
+		args.push_back("list");
+		args.push_back("installed");
+
+		if (utils::execute(YUM_PATH, args, out, err, status, false))
+			throw command_not_found_error_msg(YUM_PATH);
+		if (status)
+			return false;
+
+		vector<String> lines = utils::split(utils::strip(out), "\n");
+		for (vector<String>::const_iterator
+				rpm = rpms.begin() ;
+				rpm != rpms.end() ;
+				rpm++)
+		{
+			bool install = true;
+			for (vector<String>::const_iterator
+					iter = lines.begin() ;
+					iter != lines.end() ;
+					iter++)
+			{
+				String line(*iter);
+				line = utils::strip(line);
+				if (line.find(*rpm + ".") == 0)
+					install = false;
+			}
+
+			if (install)
+				rpms_to_install.push_back(*rpm);
+			else
+				rpms_to_upgrade.push_back(*rpm);
+		}
+
+		if (!rpms_to_install.empty()) {
+			out = err = "";
+			args.clear();
+
+			args.push_back("-y");
+			args.push_back("install");
+			for (vector<String>::const_iterator
+					rpm = rpms_to_install.begin() ;
+					rpm != rpms_to_install.end() ;
+					rpm++)
+			{
+				args.push_back(*rpm);
+			}
+
+			if (utils::execute(YUM_PATH, args, out, err, status, false))
+				throw command_not_found_error_msg(YUM_PATH);
+			if (status)
+				return false;
+		}
+
+		if (!rpms_to_upgrade.empty()) {
+			out = err = "";
+			args.clear();
+
+			args.push_back("-y");
+			args.push_back("update");
+			for (vector<String>::const_iterator
+					rpm = rpms_to_upgrade.begin() ;
+					rpm != rpms_to_upgrade.end() ;
+					rpm++)
+			{
+				args.push_back(*rpm);
+			}
+
+			if (utils::execute(YUM_PATH, args, out, err, status, false))
+				throw command_not_found_error_msg(YUM_PATH);
+			if (status)
+				return false;
+		}
+		return true;
+	} else
+		return false;
 }
 
-
-
-
 // #### class Package ####
 
-
 Package::Package()
 {
-  set_release();
+	set_release();
 }
 
 Package::Package(const String& name) :
-  name(name)
+	name(name)
 {
-  set_release();
+	set_release();
 }
 
 Package::~Package()
@@ -252,34 +274,32 @@
 XMLObject
 Package::xml() const
 {
-  XMLObject xml("rpm");
-  xml.set_attr("name", name);
-  xml.set_attr("summary", summary);
-  xml.set_attr("description", description);
-  xml.set_attr("version", version);
-  xml.set_attr("repo_version", repo_version);
-  return xml;
+	XMLObject xml("rpm");
+	xml.set_attr("name", name);
+	xml.set_attr("summary", summary);
+	xml.set_attr("description", description);
+	xml.set_attr("version", version);
+	xml.set_attr("repo_version", repo_version);
+	return xml;
 }
 
-
 // #### class PackageSet ####
 
-
 PackageSet::PackageSet() :
-  installed(false),
-  in_repo(false),
-  upgradeable(false)
+	installed(false),
+	in_repo(false),
+	upgradeable(false)
 {
-  set_release();
+	set_release();
 }
 
 PackageSet::PackageSet(const String& name) :
-  name(name),
-  installed(false),
-  in_repo(false),
-  upgradeable(false)
+	name(name),
+	installed(false),
+	in_repo(false),
+	upgradeable(false)
 {
-  set_release();
+	set_release();
 }
 
 PackageSet::~PackageSet()
@@ -288,358 +308,381 @@
 XMLObject
 PackageSet::xml() const
 {
-  XMLObject xml("set");
-  xml.set_attr("name", name);
-  xml.set_attr("summary", summary);
-  xml.set_attr("description", description);
-  xml.set_attr("installed", installed?"true":"false");
-  xml.set_attr("in_repository", in_repo?"true":"false");
-  xml.set_attr("installable", upgradeable?"true":"false");
-  return xml;
+	XMLObject xml("set");
+	xml.set_attr("name", name);
+	xml.set_attr("summary", summary);
+	xml.set_attr("description", description);
+	xml.set_attr("installed", installed ? "true" : "false");
+	xml.set_attr("in_repository", in_repo ? "true" : "false");
+	xml.set_attr("installable", upgradeable ? "true" : "false");
+	return xml;
 }
 
-
-
 // #### class PackageHandler ####
 
-
 PackageInstaller PackageHandler::_pi;
 
 PackageHandler::PackageHandler()
 {
-  set_release();
+	set_release();
 
-  // get installed packages
+	// get installed packages
+	String out, err;
+	int status;
+	vector<String> args;
+
+	args.push_back("-qa");
+	if (utils::execute(RPM_PATH, args, out, err, status, false))
+		throw command_not_found_error_msg(RPM_PATH);
+	if (status != 0)
+		throw String("rpm -qa failed: " + err);
+
+	vector<String> lines = utils::split(out, "\n");
+	for (vector<String>::const_iterator
+			iter = lines.begin() ;
+			iter != lines.end() ;
+			iter++)
+	{
+		String line(*iter);
+		line = utils::strip(line);
+
+		vector<String> words = utils::split(line, "-");
+		vector<String>::size_type l = words.size();
+		if (l < 3)
+			continue;
+		String name = words[0];
+
+		for (unsigned int i = 1; i < l - 2 ; i++)
+			name += "-" + words[i];
+
+		Package pack(name);
+		pack.version = words[l - 2] + "-" + words[l - 1];
+		_packages[name] = pack;
+	}
+
+	// probe repositories
+	if (repo_available()) {
+		map<String, String> avail_rpms = _pi.available_rpms();
+		for (map<String, String>::const_iterator
+			iter = avail_rpms.begin() ;
+			iter != avail_rpms.end() ;
+			iter++)
+		{
+			String name = iter->first;
+			String version = iter->second;
+			Package& pack = _packages[name];
+			pack.name = name;
+			pack.repo_version = version;
+		}
+	}
 
-  String out, err;
-  int status;
-  vector<String> args;
-  args.push_back("-qa");
-  if (utils::execute(RPM_PATH, args, out, err, status, false))
-    throw command_not_found_error_msg(RPM_PATH);
-  if (status != 0)
-    throw String("rpm -qa failed");
-  vector<String> lines = utils::split(out, "\n");
-  for (vector<String>::const_iterator iter = lines.begin();
-       iter != lines.end();
-       iter++) {
-    String line(*iter);
-    line = utils::strip(line);
-    vector<String> words = utils::split(line, "-");
-    vector<String>::size_type l = words.size();
-    if (l < 3)
-      continue;
-    String name = words[0];
-    for (unsigned int i=1; i<l-2; i++)
-      name += "-" + words[i];
-    Package pack(name);
-    pack.version = words[l-2] + "-" + words[l-1];
-    _packages[name] = pack;
-  }
-
-  // probe repositories
-  if (repo_available()) {
-    map<String, String> avail_rpms = _pi.available_rpms();
-    for (map<String, String>::const_iterator iter = avail_rpms.begin();
-	 iter != avail_rpms.end();
-	 iter++) {
-      String name = iter->first;
-      String version = iter->second;
-      Package& pack = _packages[name];
-      pack.name = name;
-      pack.repo_version = version;
-    }
-  }
-
-
-  // build sets
-  _sets = build_sets();
-  for (map<String, PackageSet>::iterator iter = _sets.begin();
-       iter != _sets.end();
-       iter++)
-    populate_set(iter->second);
+	// build sets
+	_sets = build_sets();
+	for (map<String, PackageSet>::iterator
+			iter = _sets.begin() ;
+			iter != _sets.end() ;
+			iter++)
+	{
+		populate_set(iter->second);
+	}
 }
 
 PackageHandler::~PackageHandler()
 {}
 
-
 std::map<String, Package>&
 PackageHandler::packages()
 {
-  return _packages;
+	return _packages;
 }
 
 std::map<String, PackageSet>&
 PackageHandler::sets()
 {
-  return _sets;
+	return _sets;
 }
 
-
 std::map<String, PackageSet>
 PackageHandler::build_sets()
 {
-  map<String, PackageSet> sets;
+	map<String, PackageSet> sets;
 
-  PackageSet set = build_cluster_base_set();
-  sets[set.name] = set;
+	PackageSet set = build_cluster_base_set();
+	sets[set.name] = set;
 
-  if (RHEL4 || FC5) {
-    set = build_cluster_base_gulm_set();
-    sets[set.name] = set;
-  }
+	if (RHEL4 || FC5) {
+		set = build_cluster_base_gulm_set();
+		sets[set.name] = set;
+	}
 
-  set = build_cluster_services_set();
-  sets[set.name] = set;
+	set = build_cluster_services_set();
+	sets[set.name] = set;
 
-  set = build_cluster_storage_set();
-  sets[set.name] = set;
+	set = build_cluster_storage_set();
+	sets[set.name] = set;
 
-  set = build_linux_virtual_server_set();
-  sets[set.name] = set;
+	set = build_linux_virtual_server_set();
+	sets[set.name] = set;
 
-  return sets;
+	return sets;
 }
 
 PackageSet
 PackageHandler::build_cluster_base_set()
 {
-  PackageSet set("Cluster Base");
+	PackageSet set("Cluster Base");
 
-  if (RHEL4 || FC5) {
-    set.packages.push_back("ccs");
-    set.packages.push_back("cman");
-    set.packages.push_back("dlm");
-    set.packages.push_back("fence");
-
-    struct utsname uts;
-    uname(&uts);
-    String kernel(uts.release);
-    if (kernel.find("smp") != kernel.npos) {
-      set.packages.push_back("cman-kernel-smp");
-      set.packages.push_back("dlm-kernel-smp");
-    } else if (kernel.find("hugemem") != kernel.npos) {
-      set.packages.push_back("cman-kernel-hugemen");
-      set.packages.push_back("dlm-kernel-hugemem");
-    } else {
-      set.packages.push_back("cman-kernel");
-      set.packages.push_back("dlm-kernel");
-    }
-  } else if (RHEL5 || FC6) {
-    set.packages.push_back("cman");
-  }
+	if (RHEL4 || FC5) {
+		set.packages.push_back("ccs");
+		set.packages.push_back("cman");
+		set.packages.push_back("dlm");
+		set.packages.push_back("fence");
+
+		struct utsname uts;
+		uname(&uts);
+		String kernel(uts.release);
+
+		if (kernel.find("smp") != kernel.npos) {
+			set.packages.push_back("cman-kernel-smp");
+			set.packages.push_back("dlm-kernel-smp");
+		} else if (kernel.find("hugemem") != kernel.npos) {
+			set.packages.push_back("cman-kernel-hugemen");
+			set.packages.push_back("dlm-kernel-hugemem");
+		} else {
+			set.packages.push_back("cman-kernel");
+			set.packages.push_back("dlm-kernel");
+		}
+	} else if (RHEL5 || FC6) {
+		set.packages.push_back("cman");
+	}
 
-  return set;
+	return set;
 }
 
 PackageSet
 PackageHandler::build_cluster_base_gulm_set()
 {
-  PackageSet set("Cluster Base - Gulm");
+	PackageSet set("Cluster Base - Gulm");
 
-  if (RHEL4 || FC5) {
-    set.packages.push_back("ccs");
-    set.packages.push_back("gulm");
-  } else
-    throw String("GULM not available in CS5");
+	if (RHEL4 || FC5) {
+		set.packages.push_back("ccs");
+		set.packages.push_back("gulm");
+	} else
+		throw String("GULM is not available in Red Hat Cluster Suite 5");
 
-  return set;
+	return set;
 }
 
 PackageSet
 PackageHandler::build_cluster_services_set()
 {
-  PackageSet set("Cluster Service Manager");
-  set.packages.push_back("rgmanager");
-  if (RHEL4 || FC5) {
-    set.packages.push_back("magma");
-    set.packages.push_back("magma-plugins");
-  }
-  return set;
+	PackageSet set("Cluster Service Manager");
+	set.packages.push_back("rgmanager");
+	if (RHEL4 || FC5) {
+		set.packages.push_back("magma");
+		set.packages.push_back("magma-plugins");
+	}
+	return set;
 }
 
 PackageSet
 PackageHandler::build_cluster_storage_set()
 {
-  struct utsname uts;
-  uname(&uts);
-  String kernel(uts.release);
-
-  PackageSet set("Clustered Storage");
-  set.packages.push_back("lvm2-cluster");
-
-  if (RHEL4 || FC5) {
-    set.packages.push_back("GFS");
-    if (kernel.find("smp") != kernel.npos) {
-      set.packages.push_back("GFS-kernel-smp");
-    } else if (kernel.find("hugemem") != kernel.npos) {
-      set.packages.push_back("GFS-kernel-hugemem");
-    } else {
-      set.packages.push_back("GFS-kernel");
-    }
-  } else if (RHEL5 || FC6) {
-    set.packages.push_back("gfs2-utils");
-    if (RHEL5) {
-      set.packages.push_back("gfs-utils");
-      if (kernel.find("xen") == kernel.npos)
-	set.packages.push_back("kmod-gfs");
-      else
-	set.packages.push_back("kmod-gfs-xen");
-    }
-  }
+	struct utsname uts;
+	uname(&uts);
+	String kernel(uts.release);
+
+	PackageSet set("Clustered Storage");
+	set.packages.push_back("lvm2-cluster");
+
+	if (RHEL4 || FC5) {
+		set.packages.push_back("GFS");
+		if (kernel.find("smp") != kernel.npos) {
+			set.packages.push_back("GFS-kernel-smp");
+		} else if (kernel.find("hugemem") != kernel.npos) {
+			set.packages.push_back("GFS-kernel-hugemem");
+		} else {
+			set.packages.push_back("GFS-kernel");
+		}
+	} else if (RHEL5 || FC6) {
+		set.packages.push_back("gfs2-utils");
+		if (RHEL5) {
+			set.packages.push_back("gfs-utils");
+			if (kernel.find("xen") == kernel.npos)
+				set.packages.push_back("kmod-gfs");
+			else
+				set.packages.push_back("kmod-gfs-xen");
+		}
+	}
 
-  return set;
+	return set;
 }
 
 PackageSet
 PackageHandler::build_linux_virtual_server_set()
 {
-  PackageSet set("Linux Virtual Server");
-  set.packages.push_back("ipvsadm");
-  set.packages.push_back("piranha");
-  return set;
+	PackageSet set("Linux Virtual Server");
+	set.packages.push_back("ipvsadm");
+	set.packages.push_back("piranha");
+	return set;
 }
 
-
 void
 PackageHandler::populate_set(PackageSet& set)
 {
-  set.installed = true;
-  set.in_repo = true;
-  set.upgradeable = false;
-
-  for (list<String>::const_iterator name_iter = set.packages.begin();
-       name_iter != set.packages.end();
-       name_iter++) {
-    const String& name = *name_iter;
-    map<String, Package>::const_iterator iter = _packages.find(name);
-    if (iter == _packages.end()) {
-      set.installed = false;
-      set.in_repo = false;
-      set.upgradeable = false;
-      break;
-    } else {
-      const Package& pack = iter->second;
-      if (pack.version.empty())
-	set.installed = false;
-      if (pack.repo_version.empty())
-	set.in_repo = false;
-      else if (pack.repo_version > pack.version)
-	set.upgradeable = true;
-    }
-  }
-  if (set.in_repo == false)
-    set.upgradeable = false;
+	set.installed = true;
+	set.in_repo = true;
+	set.upgradeable = false;
+
+	for (list<String>::const_iterator
+			name_iter = set.packages.begin() ;
+			name_iter != set.packages.end() ;
+			name_iter++)
+	{
+		const String& name = *name_iter;
+		map<String, Package>::const_iterator iter = _packages.find(name);
+		if (iter == _packages.end()) {
+			set.installed = false;
+			set.in_repo = false;
+			set.upgradeable = false;
+			break;
+		} else {
+			const Package& pack = iter->second;
+			if (pack.version.empty())
+				set.installed = false;
+			if (pack.repo_version.empty())
+				set.in_repo = false;
+			else if (pack.repo_version > pack.version)
+				set.upgradeable = true;
+		}
+	}
+
+	if (set.in_repo == false)
+		set.upgradeable = false;
 }
 
 void
 PackageHandler::install(const std::list<Package>& packages,
-			const std::list<PackageSet>& sets,
-			bool upgrade)
+						const std::list<PackageSet>& sets,
+						bool upgrade)
 {
-  vector<String> rpms;
+	vector<String> rpms;
 
-  PackageHandler h_pre;
-  for (list<Package>::const_iterator iter = packages.begin();
-       iter != packages.end();
-       iter++) {
-    String name(iter->name);
-    map<String, Package>::iterator pack_iter = h_pre.packages().find(name);
-    if (pack_iter == h_pre.packages().end())
-      throw String("package ") + name + " present neither locally nor in repository";
-    else {
-      String curr_ver(pack_iter->second.version);
-      String repo_ver(pack_iter->second.repo_version);
-      if (curr_ver.empty()) {
-	// not installed
-	if (repo_ver.empty())
-	  throw String("package ") + name + " not present in repository";
-	else
-	  rpms.push_back(name);
-      } else {
-	// already installed
-	if (upgrade) {
-	  if (repo_ver.empty())
-	    throw String("package ") + name + " not present in repository";
-	  else if (repo_ver > curr_ver)
-	    rpms.push_back(name);
-	}
-      }
-    }
-  }
-
-  for (list<PackageSet>::const_iterator iter = sets.begin();
-       iter != sets.end();
-       iter++) {
-    String name(iter->name);
-    map<String, PackageSet>::iterator set_iter = h_pre.sets().find(name);
-    if (set_iter == h_pre.sets().end())
-      throw String("packages of set ") + name + " present neither locally nor in repository";
-    else {
-      PackageSet& p_set = set_iter->second;
-      if (p_set.installed) {
-	// already installed
-	if (upgrade) {
-	  if (p_set.in_repo) {
-	    if (p_set.upgradeable)
-	      for (list<String>::const_iterator name_iter = p_set.packages.begin();
-		   name_iter != p_set.packages.end();
-		   name_iter++)
-		rpms.push_back(*name_iter);
-	  } else
-	    throw String("packages of set ") + name + " not present in repository";
-	}
-      } else {
-	// not installed
-	if (p_set.in_repo)
-	  for (list<String>::const_iterator name_iter = p_set.packages.begin();
-	       name_iter != p_set.packages.end();
-	       name_iter++)
-	    rpms.push_back(*name_iter);
-	else
-	  throw String("packages of set ") + name + " not present in repository";
-      }
-    }
-  }
-
-  if (!_pi.install(rpms)) {
-    String msg("Failed to install packages");
-    if (!repo_available())
-      msg += ": System not configured to use repositories";
-    throw msg;
-  }
-}
+	PackageHandler h_pre;
+	for (list<Package>::const_iterator
+			iter = packages.begin() ;
+			iter != packages.end() ;
+			iter++)
+	{
+		String name(iter->name);
+		map<String, Package>::iterator pack_iter = h_pre.packages().find(name);
+		if (pack_iter == h_pre.packages().end()) {
+			throw String("package ") + name
+					+ " is present neither locally nor in repository";
+		} else {
+			String curr_ver(pack_iter->second.version);
+			String repo_ver(pack_iter->second.repo_version);
+			if (curr_ver.empty()) {
+				// not installed
+				if (repo_ver.empty()) {
+					throw String("package ") + name
+							+ " is not present in repository";
+				} else
+					rpms.push_back(name);
+			} else {
+				// already installed
+				if (upgrade) {
+					if (repo_ver.empty()) {
+						throw String("package ") + name
+								+ " is not present in repository";
+					} else if (repo_ver > curr_ver)
+						rpms.push_back(name);
+				}
+			}
+		}
+	}
+
+	for (list<PackageSet>::const_iterator
+			iter = sets.begin() ;
+			iter != sets.end() ;
+			iter++)
+	{
+		String name(iter->name);
+		map<String, PackageSet>::iterator set_iter = h_pre.sets().find(name);
+
+		if (set_iter == h_pre.sets().end())
+			throw String("packages of set ") + name + " present neither locally nor in repository";
+		else {
+			PackageSet& p_set = set_iter->second;
+			if (p_set.installed) {
+				// already installed
+				if (upgrade) {
+					if (p_set.in_repo) {
+						if (p_set.upgradeable) {
+							for (list<String>::const_iterator
+									name_iter = p_set.packages.begin() ;
+									name_iter != p_set.packages.end() ;
+									name_iter++)
+							{
+								rpms.push_back(*name_iter);
+							} else {
+								throw String("packages of set ") + name + " are not present in any available repository";
+							}
+						}
+					}
+				}
+			} else {
+				// not installed
+				if (p_set.in_repo) {
+					for (list<String>::const_iterator
+						name_iter = p_set.packages.begin() ;
+						name_iter != p_set.packages.end() ;
+						name_iter++)
+					{
+						rpms.push_back(*name_iter);
+					}
+				} else {
+					throw String("packages of set ") + name +
+						" are not present in any available repository";
+				}
+			}
+		}
+	}
 
+	if (!_pi.install(rpms)) {
+		String msg("Failed to install packages");
+		if (!repo_available())
+			msg += ": System not configured to use repositories";
+		throw msg;
+	}
+}
 
 bool
 PackageHandler::repo_available()
 {
-  return _pi.available();
+	return _pi.available();
 }
 
-
-
-
-
 void
 set_release()
 {
-  static bool release_set = false;
-  if (!release_set) {
-    String release(utils::strip(File::open("/etc/redhat-release")));
-
-    if (release.find("Nahant") != release.npos)
-      RHEL4 = true;
-    else if (release.find("Bordeaux") != release.npos)
-      FC5 = true;
-    else if (release.find("Zod") != release.npos)
-      FC6 = true;
-    else if (release.find("Tikanga") != release.npos)
-      RHEL5 = true;
-    else
-      throw String("Unsupported OS");
+	static bool release_set = false;
+	if (!release_set) {
+		String release(utils::strip(File::open("/etc/redhat-release")));
+
+		if (release.find("Nahant") != release.npos)
+			RHEL4 = true;
+		else if (release.find("Bordeaux") != release.npos)
+			FC5 = true;
+		else if (release.find("Zod") != release.npos)
+			FC6 = true;
+		else if (release.find("Moonshine") != release.npos)
+			FC6 = true;
+		else if (release.find("Tikanga") != release.npos)
+			RHEL5 = true;
+		else
+			throw String("Unsupported OS: " + release);
 
-    release_set = true;
-  }
+		release_set = true;
+	}
 }
--- conga/ricci/modules/rpm/PackageHandler.h	2007/09/11 02:45:28	1.6
+++ conga/ricci/modules/rpm/PackageHandler.h	2007/09/11 18:59:42	1.7
@@ -1,5 +1,5 @@
 /*
-  Copyright Red Hat, Inc. 2006
+  Copyright Red Hat, Inc. 2006-2007
 
   This program is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by the
@@ -21,105 +21,92 @@
  */
 
 
-#ifndef PackageHandler_h
-#define PackageHandler_h
+#ifndef __CONGA_MODRPM_PACKAGEHANDLER_H
+#define __CONGA_MODRPM_PACKAGEHANDLER_H
 
 #include "XML.h"
 #include "String.h"
 #include <map>
 #include <vector>
 
-
 class Package
 {
- public:
-  Package();
-  Package(const String& name);
-  virtual ~Package();
-
-  String name;
-  String summary;
-  String description;
-  String version;
-  String repo_version;
-
-  XMLObject xml() const;
-
- private:
+	public:
+		Package();
+		Package(const String& name);
+		virtual ~Package();
+
+		String name;
+		String summary;
+		String description;
+		String version;
+		String repo_version;
 
-};  // class Package
+		XMLObject xml() const;
 
+	private:
+};
 
 class PackageSet
 {
- public:
-  PackageSet();
-  PackageSet(const String& name);
-  virtual ~PackageSet();
-
-  String name;
-  String summary;
-  String description;
-  bool installed;
-  bool in_repo;
-  bool upgradeable;
-
-  std::list<String> packages;
+	public:
+		PackageSet();
+		PackageSet(const String& name);
+		virtual ~PackageSet();
+
+		String name;
+		String summary;
+		String description;
+		bool installed;
+		bool in_repo;
+		bool upgradeable;
 
-  XMLObject xml() const;
+		std::list<String> packages;
 
- private:
-
-};  // class PackageSet
+		XMLObject xml() const;
 
+	private:
+};
 
 class PackageInstaller
 {
- public:
-  PackageInstaller();
-  virtual ~PackageInstaller();
-
-  bool available();
-  std::map<String, String> available_rpms();
-  bool install(std::vector<String> rpm_names);
-
+	public:
+		PackageInstaller();
+		virtual ~PackageInstaller();
+
+		bool available();
+		std::map<String, String> available_rpms();
+		bool install(std::vector<String> rpm_names);
 };
 
-
 class PackageHandler
 {
- public:
-  PackageHandler();
-  virtual ~PackageHandler();
-
-  std::map<String, Package>& packages();
-  std::map<String, PackageSet>& sets();
-
-  void populate_set(PackageSet& set);
-
-
-  static bool repo_available();
-
-  static std::map<String, PackageSet> build_sets();
-  static PackageSet build_cluster_base_set();
-  static PackageSet build_cluster_base_gulm_set();
-  static PackageSet build_cluster_services_set();
-  static PackageSet build_cluster_storage_set();
-  static PackageSet build_linux_virtual_server_set();
-
-  static void install(const std::list<Package>& packages,
-		      const std::list<PackageSet>& sets,
-		      bool upgrade=true);
-
- private:
-
-  std::map<String, Package>     _packages;
-  std::map<String, PackageSet>  _sets;
-
-  static PackageInstaller _pi;
-
-
-};  // class PackageHandler
-
+	public:
+		PackageHandler();
+		virtual ~PackageHandler();
+
+		std::map<String, Package>& packages();
+		std::map<String, PackageSet>& sets();
+
+		void populate_set(PackageSet& set);
+
+		static bool repo_available();
+
+		static std::map<String, PackageSet> build_sets();
+		static PackageSet build_cluster_base_set();
+		static PackageSet build_cluster_base_gulm_set();
+		static PackageSet build_cluster_services_set();
+		static PackageSet build_cluster_storage_set();
+		static PackageSet build_linux_virtual_server_set();
+
+		static void install(const std::list<Package>& packages,
+							const std::list<PackageSet>& sets,
+							bool upgrade=true);
+
+	private:
+		std::map<String, Package> _packages;
+		std::map<String, PackageSet> _sets;
+		static PackageInstaller _pi;
+};
 
-#endif  // PackageHandler_h
+#endif
--- conga/ricci/modules/rpm/RpmModule.cpp	2007/09/11 02:45:28	1.4
+++ conga/ricci/modules/rpm/RpmModule.cpp	2007/09/11 18:59:42	1.5
@@ -1,5 +1,5 @@
 /*
-  Copyright Red Hat, Inc. 2006
+  Copyright Red Hat, Inc. 2006-2007
 
   This program is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by the
@@ -24,10 +24,8 @@
 #include "RpmModule.h"
 #include "PackageHandler.h"
 
-
 using namespace std;
 
-
 static VarMap lists(const VarMap& args);
 static VarMap query(const VarMap& args);
 static VarMap repository_configured(const VarMap& args);
@@ -35,224 +33,253 @@
 
 static ApiFcnMap build_fcn_map();
 
-
 RpmModule::RpmModule() :
-  Module(build_fcn_map())
+	Module(build_fcn_map())
 {}
 
 RpmModule::~RpmModule()
 {}
 
-
 ApiFcnMap
 build_fcn_map()
 {
-  FcnMap   api_1_0;
-  api_1_0["list"]                     = lists;
-  api_1_0["query"]                    = query;
-  api_1_0["install"]                  = install;
-  api_1_0["repository_configured"]    = repository_configured;
+	FcnMap api_1_0;
 
-  ApiFcnMap   api_fcn_map;
-  api_fcn_map["1.0"] = api_1_0;
-
-  return api_fcn_map;
+	api_1_0["list"] = lists;
+	api_1_0["query"] = query;
+	api_1_0["install"] = install;
+	api_1_0["repository_configured"] = repository_configured;
+
+	ApiFcnMap api_fcn_map;
+	api_fcn_map["1.0"] = api_1_0;
+	return api_fcn_map;
 }
 
 
 VarMap
 install(const VarMap& args)
 {
-  list<XMLObject> rpms_list, sets_list;
-  bool upgrade;
-  try{
-    VarMap::const_iterator iter = args.find("rpms");
-    if (iter != args.end())
-      rpms_list = iter->second.get_list_XML();
-
-    iter = args.find("sets");
-    if (iter != args.end())
-      sets_list = iter->second.get_list_XML();
-
-    upgrade = true;
-    iter = args.find("upgrade");
-    if (iter != args.end())
-      upgrade = iter->second.get_bool();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-
-  // command
-  list<Package> rpms;
-  for (list<XMLObject>::const_iterator iter = rpms_list.begin();
-       iter != rpms_list.end();
-       iter++)
-    if (iter->tag() == "rpm") {
-      String name(iter->get_attr("name"));
-      if (name.size()) {
-	Package pack(name);
-	rpms.push_back(pack);
-      }
-    }
-
-  list<PackageSet> sets;
-  for (list<XMLObject>::const_iterator iter = sets_list.begin();
-       iter != sets_list.end();
-       iter++)
-    if (iter->tag() == "set") {
-      String name(iter->get_attr("name"));
-      if (name.size()) {
-	PackageSet set(name);
-	sets.push_back(set);
-      }
-    }
+	list<XMLObject> rpms_list, sets_list;
+	bool upgrade;
+
+	try {
+		VarMap::const_iterator iter = args.find("rpms");
+		if (iter != args.end())
+			rpms_list = iter->second.get_list_XML();
+
+		iter = args.find("sets");
+		if (iter != args.end())
+			sets_list = iter->second.get_list_XML();
+
+		upgrade = true;
+		iter = args.find("upgrade");
+		if (iter != args.end())
+			upgrade = iter->second.get_bool();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	// command
+	list<Package> rpms;
+	for (list<XMLObject>::const_iterator
+		iter = rpms_list.begin() ;
+		iter != rpms_list.end() ;
+		iter++)
+	{
+		if (iter->tag() == "rpm") {
+			String name(iter->get_attr("name"));
+			if (name.size()) {
+				Package pack(name);
+				rpms.push_back(pack);
+			}
+		}
+
+		list<PackageSet> sets;
+		for (list<XMLObject>::const_iterator
+				iter = sets_list.begin() ;
+				iter != sets_list.end() ;
+				iter++)
+		{
+			if (iter->tag() == "set") {
+				String name(iter->get_attr("name"));
+				if (name.size()) {
+					PackageSet set(name);
+					sets.push_back(set);
+				}
+			}
+		}
 
-  PackageHandler::install(rpms, sets, upgrade);
-  return VarMap();
+	PackageHandler::install(rpms, sets, upgrade);
+	return VarMap();
 }
 
 VarMap
 repository_configured(const VarMap& args)
 {
-  Variable var("repository_configured", PackageHandler::repo_available());
+	Variable var("repository_configured", PackageHandler::repo_available());
 
-  VarMap ret;
-  ret.insert(pair<String, Variable>(var.name(), var));
-  return ret;
+	VarMap ret;
+	ret.insert(pair<String, Variable>(var.name(), var));
+	return ret;
 }
 
 VarMap
 lists(const VarMap& args)
 {
-  bool rpms, sets, installed, installable, upgradeable;
-  try {
-    rpms = false;
-    VarMap::const_iterator iter = args.find("rpms");
-    if (iter != args.end())
-      rpms = iter->second.get_bool();
-
-    sets = false;
-    iter = args.find("sets");
-    if (iter != args.end())
-      sets = iter->second.get_bool();
-
-    installed = false;
-    iter = args.find("installed");
-    if (iter != args.end())
-      installed = iter->second.get_bool();
-
-    installable = false;
-    iter = args.find("installable");
-    if (iter != args.end())
-      installable = iter->second.get_bool();
-
-    upgradeable = false;
-    iter = args.find("upgradeable");
-    if (iter != args.end())
-      upgradeable = iter->second.get_bool();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-
-
-  VarMap ret;
-
-  if (sets || rpms) {
-    PackageHandler handler;
-
-    if (rpms) {
-      list<XMLObject> rpm_list;
-      for (map<String, Package>::const_iterator iter = handler.packages().begin();
-	   iter != handler.packages().end();
-	   iter++ ) {
-	const Package& pack = iter->second;
-	bool add = false;
-	if (installed)
-	  if (pack.version.size())
-	    add = true;
-	if (installable)
-	  if (pack.repo_version > pack.version &&
-	      pack.version.empty())
-	    add = true;
-	if (upgradeable)
-	  if (pack.repo_version > pack.version &&
-	      pack.version.size())
-	    add = true;
-	if (add)
-	  rpm_list.push_back(pack.xml());
-      }
-      Variable var("rpms", rpm_list);
-      ret.insert(pair<String, Variable>(var.name(), var));
-    }
-
-    if (sets) {
-      list<XMLObject> set_list;
-      for (map<String, PackageSet>::const_iterator iter = handler.sets().begin();
-	   iter != handler.sets().end();
-	   iter++ ) {
-	const PackageSet& set = iter->second;
-	bool add = false;
-	if (installed)
-	  if (set.installed)
-	    add = true;
-	if (installable)
-	  if (!set.installed &&
-	      set.in_repo)
-	    add = true;
-	if (upgradeable)
-	  if (set.installed &&
-	      set.upgradeable)
-	    add = true;
-	if (add)
-	  set_list.push_back(set.xml());
-      }
-      Variable var("sets", set_list);
-      ret.insert(pair<String, Variable>(var.name(), var));
-    }
-  }
+	bool rpms, sets, installed, installable, upgradeable;
 
-  return ret;
+	try {
+		rpms = false;
+		VarMap::const_iterator iter = args.find("rpms");
+
+		if (iter != args.end())
+			rpms = iter->second.get_bool();
+
+		sets = false;
+		iter = args.find("sets");
+		if (iter != args.end())
+			sets = iter->second.get_bool();
+
+		installed = false;
+		iter = args.find("installed");
+
+		if (iter != args.end())
+			installed = iter->second.get_bool();
+
+		installable = false;
+		iter = args.find("installable");
+		if (iter != args.end())
+			installable = iter->second.get_bool();
+
+		upgradeable = false;
+		iter = args.find("upgradeable");
+		if (iter != args.end())
+			upgradeable = iter->second.get_bool();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	VarMap ret;
+
+	if (sets || rpms) {
+		PackageHandler handler;
+
+		if (rpms) {
+			list<XMLObject> rpm_list;
+			for (map<String, Package>::const_iterator
+				iter = handler.packages().begin() ;
+				iter != handler.packages().end() ;
+				iter++)
+			{
+				const Package& pack = iter->second;
+				bool add = false;
+
+				if (installed) {
+					if (pack.version.size())
+						add = true;
+				}
+
+				if (installable) {
+					if (pack.repo_version > pack.version &&
+						pack.version.empty())
+					{
+						add = true;
+					}
+				}
+
+				if (upgradeable) {
+					if (pack.repo_version > pack.version &&
+						pack.version.size())
+					{
+						add = true;
+					}
+				}
+
+				if (add)
+					rpm_list.push_back(pack.xml());
+			}
+
+			Variable var("rpms", rpm_list);
+			ret.insert(pair<String, Variable>(var.name(), var));
+		}
+
+		if (sets) {
+			list<XMLObject> set_list;
+			for (map<String, PackageSet>::const_iterator
+					iter = handler.sets().begin() ;
+					iter != handler.sets().end() ;
+					iter++)
+			{
+				const PackageSet& set = iter->second;
+				bool add = false;
+
+				if (installed) {
+					if (set.installed)
+						add = true;
+				}
+
+				if (installable) {
+					if (!set.installed && set.in_repo)
+						add = true;
+				}
+
+				if (upgradeable) {
+					if (set.installed && set.upgradeable)
+						add = true;
+				}
+
+				if (add)
+					set_list.push_back(set.xml());
+			}
+
+			Variable var("sets", set_list);
+			ret.insert(pair<String, Variable>(var.name(), var));
+		}
+	}
+
+	return ret;
 }
 
 VarMap
 query(const VarMap& args)
 {
-  list<XMLObject> search_list;
-  try {
-    VarMap::const_iterator iter = args.find("search");
-    if (iter == args.end())
-      throw APIerror("missing search variable");
-    search_list = iter->second.get_list_XML();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-
-
-  list<XMLObject> result_list;
-  PackageHandler handler;
-  for (list<XMLObject>::const_iterator iter = search_list.begin();
-       iter != search_list.end();
-       iter++) {
-    if (iter->tag() == "rpm") {
-      String name(iter->get_attr("name"));
-      if (name.size()) {
-	Package& pack = handler.packages()[name];
-	pack.name = name;
-	result_list.push_back(pack.xml());
-      }
-    } else if (iter->tag() == "set") {
-      String name(iter->get_attr("name"));
-      if (name.size()) {
-	PackageSet& set = handler.sets()[name];
-	set.name = name;
-	result_list.push_back(set.xml());
-      }
-    }
-  }
-
-  Variable var("result", result_list);
-
-  VarMap ret;
-  ret.insert(pair<String, Variable>(var.name(), var));
-  return ret;
+	list<XMLObject> search_list;
+
+	try {
+		VarMap::const_iterator iter = args.find("search");
+		if (iter == args.end())
+			throw APIerror("missing search variable");
+		search_list = iter->second.get_list_XML();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	list<XMLObject> result_list;
+	PackageHandler handler;
+	for (list<XMLObject>::const_iterator
+			iter = search_list.begin() ;
+			iter != search_list.end() ;
+			iter++)
+	{
+		if (iter->tag() == "rpm") {
+			String name(iter->get_attr("name"));
+			if (name.size()) {
+				Package& pack = handler.packages()[name];
+				pack.name = name;
+				result_list.push_back(pack.xml());
+			}
+		} else if (iter->tag() == "set") {
+			String name(iter->get_attr("name"));
+			if (name.size()) {
+				PackageSet& set = handler.sets()[name];
+				set.name = name;
+				result_list.push_back(set.xml());
+			}
+		}
+	}
+
+	Variable var("result", result_list);
+	VarMap ret;
+	ret.insert(pair<String, Variable>(var.name(), var));
+	return ret;
 }
--- conga/ricci/modules/rpm/RpmModule.h	2007/09/11 02:45:28	1.2
+++ conga/ricci/modules/rpm/RpmModule.h	2007/09/11 18:59:42	1.3
@@ -1,5 +1,5 @@
 /*
-  Copyright Red Hat, Inc. 2006
+  Copyright Red Hat, Inc. 2006-2007
 
   This program is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by the
@@ -20,22 +20,18 @@
  * Author: Stanko Kupcevic <kupcevic at redhat.com>
  */
 
-
-#ifndef RpmModule_h
-#define RpmModule_h
+#ifndef __CONGA_MODRPM_RPMMODULE_H
+#define __CONGA_MODRPM_RPMMODULE_H
 
 #include "Module.h"
 
-
 class RpmModule : public Module
 {
- public:
-  RpmModule();
-  virtual ~RpmModule();
-
- private:
+	public:
+		RpmModule();
+		virtual ~RpmModule();
 
+	private:
 };
 
-
-#endif  // RpmModule_h
+#endif
--- conga/ricci/modules/rpm/main.cpp	2007/09/11 02:45:28	1.5
+++ conga/ricci/modules/rpm/main.cpp	2007/09/11 18:59:42	1.6
@@ -1,5 +1,5 @@
 /*
-  Copyright Red Hat, Inc. 2005
+  Copyright Red Hat, Inc. 2005-2007
 
   This program is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by the
@@ -24,18 +24,22 @@
 #include "RpmModule.h"
 
 #include <iostream>
+
 using namespace std;
 
 int
-main(int argc, char** argv)
+main(int argc, char **argv)
 {
-  try {
-    RpmModule m;
-    return stdin_out_module_driver(m,
-				   argc,
-				   argv);
-  } catch (String e) {
-    cerr << e << endl;
-    return 1;
-  }
+	try {
+		RpmModule m;
+		return stdin_out_module_driver(m, argc, argv);
+	} catch (String e) {
+		cerr << e << endl;
+		return 1;
+	} catch (...) {
+		cerr << "unknown error" << endl;
+		return 1;
+	}
+
+	return 0;
 }




More information about the Cluster-devel mailing list