[Cluster-devel] conga/ricci/modules/cluster ClusterConf.cpp Cl ...

rmccabe at sourceware.org rmccabe at sourceware.org
Thu Aug 23 15:30:33 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-08-23 15:30:29

Modified files:
	ricci/modules/cluster: ClusterConf.cpp ClusterConf.h 
	                       ClusterModule.h ClusterStatus.cpp 
	                       ClusterStatus.h Clusvcadm.cpp Clusvcadm.h 
	                       Fence.cpp Fence.h NoServiceManager.h 
	                       Virt.cpp Virt.h main.cpp 

Log message:
	- Return more useful error messages in responses for failed commands
	- Readability/formatting/whitespace fixes.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterConf.cpp.diff?cvsroot=cluster&r1=1.10&r2=1.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterConf.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.cpp.diff?cvsroot=cluster&r1=1.20&r2=1.21
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.h.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Clusvcadm.cpp.diff?cvsroot=cluster&r1=1.14&r2=1.15
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Clusvcadm.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Fence.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Fence.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/NoServiceManager.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/main.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5

--- conga/ricci/modules/cluster/ClusterConf.cpp	2007/08/22 18:47:19	1.10
+++ conga/ricci/modules/cluster/ClusterConf.cpp	2007/08/23 15:30:27	1.11
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -33,131 +33,151 @@
 using namespace std;
 
 
-#define CLUSTER_CONF_DIR     String("/etc/cluster/")
-#define CLUSTER_CONF_NAME    String("cluster.conf")
-#define CLUSTER_CONF_PATH    (CLUSTER_CONF_DIR + CLUSTER_CONF_NAME)
+#define CLUSTER_CONF_DIR		String("/etc/cluster/")
+#define CLUSTER_CONF_NAME		String("cluster.conf")
+#define CLUSTER_CONF_PATH		(CLUSTER_CONF_DIR + CLUSTER_CONF_NAME)
 
-#define CCS_TOOL_PATH        "/sbin/ccs_tool"
+#define CCS_TOOL_PATH			"/sbin/ccs_tool"
 
 
-static void 
-set_CMAN_TOOL_PATH();
+static void set_CMAN_TOOL_PATH();
 static String CMAN_TOOL_PATH;
 
 
-
 XMLObject
 ClusterConf::get()
 {
-  return readXML(CLUSTER_CONF_PATH);
+	return readXML(CLUSTER_CONF_PATH);
 }
 
 void
-ClusterConf::set(const XMLObject& xml,
-		 bool propagate)
-{
-  set_CMAN_TOOL_PATH();
-  
-  // sanity check
-  if (xml.tag() != "cluster")
-    throw String("invalid cluster.conf: no cluster tag");
-  if (xml.get_attr("name").empty())
-    throw String("invalid cluster.conf: no cluster name attribute");
-  long long conf_version = utils::to_long(xml.get_attr("config_version"));
-  if (conf_version == 0)
-    throw String("invalid cluster.conf: no config_version attribute");
-  
-  // create dir, if not existing
-  DIR* dir = opendir(CLUSTER_CONF_DIR.c_str());
-  if (dir)
-    closedir(dir);
-  else {
-    if (errno == ENOENT) {
-      if (mkdir(CLUSTER_CONF_DIR.c_str(), 
-		S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH))
-	throw String("failed to create ") + CLUSTER_CONF_DIR + ": " + String(strerror(errno));
-    } else
-      throw String("opendir() error: ") + String(strerror(errno));
-  }
-  
-  // save tmp cluster.conf
-  String tmp_path(CLUSTER_CONF_PATH + ".tmp_ricci");
-  fstream fs(tmp_path.c_str(), 
-	     ios_base::out | ios_base::trunc);
-  fs << generateXML(xml);
-  fs.close();
-  
-  // propagate/move to proper place
-  if (propagate) {
-    try {
-      String out, err;
-      int status;
-      vector<String> args;
-      args.push_back("update");
-      args.push_back(tmp_path);
-      if (utils::execute(CCS_TOOL_PATH, args, out, err, status, false))
-	throw command_not_found_error_msg(CCS_TOOL_PATH);
-      if (status != 0)
-	throw String("ccs_tool failed: ") + err;
-      
-      if (is_cman(xml)) {
-	args.clear();
-	args.push_back("version");
-	args.push_back("-r");
-	args.push_back(utils::to_string(conf_version));
-	if (utils::execute(CMAN_TOOL_PATH, args, out, err, status, false))
-	  throw command_not_found_error_msg(CMAN_TOOL_PATH);
-	if (status != 0)
-	  throw String("cman_tool failed: ") + err;
-      }
-      
-      unlink(tmp_path.c_str());
-    } catch ( ... ) {
-      unlink(tmp_path.c_str());
-      throw;
-    }
-  } else {
-    if (rename(tmp_path.c_str(), CLUSTER_CONF_PATH.c_str())) {
-	  int errnold = errno;
-      unlink(tmp_path.c_str());
-      throw String("failed to rename cluster.conf: ") + String(strerror(errnold));
-    }
-  }
+ClusterConf::set(const XMLObject& xml, bool propagate) {
+	set_CMAN_TOOL_PATH();
+	char cconf_path[] = "/etc/cluster/cluster.conf.tmp.ricciXXXXXX";
+	int err = 0;
+
+	// sanity check
+	if (xml.tag() != "cluster")
+		throw String("invalid cluster.conf: no cluster tag");
+	if (xml.get_attr("name").empty())
+		throw String("invalid cluster.conf: no cluster name attribute");
+
+	long long conf_version = utils::to_long(xml.get_attr("config_version"));
+	if (conf_version == 0)
+		throw String("invalid cluster.conf: no config_version attribute");
+
+	// create dir, if it doesn't exist
+	DIR *dir = opendir(CLUSTER_CONF_DIR.c_str());
+	if (dir)
+		closedir(dir);
+	else {
+		if (errno == ENOENT) {
+			if (mkdir(CLUSTER_CONF_DIR.c_str(), 0755))
+				throw String("failed to create " + CLUSTER_CONF_DIR
+						+ ": " + String(strerror(errno)));
+			} else
+				throw String("opendir() error: ") + String(strerror(errno));
+	}
+
+	mode_t old_umask = umask(0077);
+	int conf_fd = mkstemp(cconf_path);
+	err = errno;
+	umask(old_umask);
+
+	if (conf_fd < 0) {
+		throw String("error creating temporary cluster.conf: "
+				+ String(strerror(err)));
+	}
+
+	String conf_xml(generateXML(xml));
+	ssize_t ret = write(conf_fd, conf_xml.c_str(), conf_xml.size());
+	err = errno;
+	close(conf_fd);
+
+	if (ret != (ssize_t) conf_xml.size()) {
+		throw String("error creating temporary cluster.conf: "
+				+ String(strerror(err)));
+	}
+
+	// propagate/move to proper place
+	if (propagate) {
+		try {
+			String out, err;
+			int status;
+			vector<String> args;
+
+			args.push_back("update");
+			args.push_back(cconf_path);
+
+			if (utils::execute(CCS_TOOL_PATH, args, out, err, status, false))
+				throw command_not_found_error_msg(CCS_TOOL_PATH);
+			if (status != 0)
+				throw String("ccs_tool failed to propagate conf: ") + err;
+
+			if (is_cman(xml)) {
+				args.clear();
+				args.push_back("version");
+				args.push_back("-r");
+				args.push_back(utils::to_string(conf_version));
+
+				if (utils::execute(CMAN_TOOL_PATH, args, out,
+					err, status, false))
+				{
+					throw command_not_found_error_msg(CMAN_TOOL_PATH);
+				}
+
+				if (status != 0)
+					throw String("cman_tool failed to update version: ") + err;
+			}
+
+			unlink(cconf_path);
+		} catch ( ... ) {
+			unlink(cconf_path);
+			throw;
+		}
+	} else {
+		if (rename(cconf_path, CLUSTER_CONF_PATH.c_str())) {
+			int errnold = errno;
+			unlink(cconf_path);
+			throw String("failed to rename cluster.conf: ")
+				+ String(strerror(errnold));
+		}
+	}
 }
 
-void 
+void
 ClusterConf::purge_conf()
 {
-  unlink(CLUSTER_CONF_PATH.c_str());
+	unlink(CLUSTER_CONF_PATH.c_str());
 }
 
 bool
 ClusterConf::is_gulm(const XMLObject& cluster_conf)
 {
-  for (list<XMLObject>::const_iterator iter = cluster_conf.children().begin();
-       iter != cluster_conf.children().end();
-       iter++)
-    if (iter->tag() == "gulm")
-      return true;
-  return false;
+	for (list<XMLObject>::const_iterator iter = cluster_conf.children().begin();
+			iter != cluster_conf.children().end();
+			iter++)
+	{
+		if (iter->tag() == "gulm")
+			return true;
+	}
+	return false;
 }
 
 bool
 ClusterConf::is_cman(const XMLObject& cluster_conf)
 {
-  return !is_gulm(cluster_conf);
+	return !is_gulm(cluster_conf);
 }
 
-
-
-void 
+void
 set_CMAN_TOOL_PATH()
 {
-  static bool path_set = false;
-  if (!path_set) {
-    CMAN_TOOL_PATH = "/sbin/cman_tool";
-    if (access(CMAN_TOOL_PATH.c_str(), X_OK)) 
-      CMAN_TOOL_PATH = "/usr/sbin/cman_tool";
-    path_set = true;
-  }
+	static bool path_set = false;
+	if (!path_set) {
+		CMAN_TOOL_PATH = "/sbin/cman_tool";
+		if (access(CMAN_TOOL_PATH.c_str(), X_OK))
+			CMAN_TOOL_PATH = "/usr/sbin/cman_tool";
+		path_set = true;
+	}
 }
--- conga/ricci/modules/cluster/ClusterConf.h	2006/10/05 17:38:01	1.3
+++ conga/ricci/modules/cluster/ClusterConf.h	2007/08/23 15:30:27	1.4
@@ -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
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -26,19 +26,15 @@
 
 #include "XML.h"
 
-
 class ClusterConf
 {
- public:
-  static XMLObject get();
-  static void set(const XMLObject& xml,
-		  bool propagate=true);
-  static void purge_conf();
-  
-  static bool is_gulm(const XMLObject& cluster_conf);
-  static bool is_cman(const XMLObject& cluster_conf);
-  
-};
+	public:
+		static XMLObject get();
+		static void set(const XMLObject& xml, bool propagate=true);
+		static void purge_conf();
 
+		static bool is_gulm(const XMLObject& cluster_conf);
+		static bool is_cman(const XMLObject& cluster_conf);
+};
 
-#endif  // ClusterConf_h
+#endif // ClusterConf_h
--- conga/ricci/modules/cluster/ClusterModule.h	2006/04/07 16:42:39	1.1
+++ conga/ricci/modules/cluster/ClusterModule.h	2007/08/23 15:30:27	1.2
@@ -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
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -26,16 +26,13 @@
 
 #include "Module.h"
 
-
 class ClusterModule : public Module
 {
- public:
-  ClusterModule();
-  virtual ~ClusterModule();
-  
- private:
-  
-};
+	public:
+		ClusterModule();
+		virtual ~ClusterModule();
 
+	private:
+};
 
-#endif  // ClusterModule_h
+#endif // ClusterModule_h
--- conga/ricci/modules/cluster/ClusterStatus.cpp	2007/08/22 18:47:19	1.20
+++ conga/ricci/modules/cluster/ClusterStatus.cpp	2007/08/23 15:30:27	1.21
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -34,20 +34,18 @@
 using namespace std;
 
 
-static void 
-set_CMAN_TOOL_PATH();
+static void set_CMAN_TOOL_PATH();
 static String CMAN_TOOL_PATH;
 
-#define INITD_DIR_PATH        "/etc/init.d/"
-#define LSMOD_PATH            "/sbin/lsmod"
-#define MODPROBE_PATH         "/sbin/modprobe"
-#define CHKCONFIG_PATH        "/sbin/chkconfig"
-#define LVMCONF_PATH          "/usr/sbin/lvmconf"
-
-#define CMAN_LEAVE_TIMEOUT    "120"  // seconds (string)
-#define CLUMON_SYNC_TIME      8      // seconds
-#define CMAN_SETTLE_TIME      3      // seconds
-
+#define INITD_DIR_PATH			"/etc/init.d/"
+#define LSMOD_PATH				"/sbin/lsmod"
+#define MODPROBE_PATH			"/sbin/modprobe"
+#define CHKCONFIG_PATH			"/sbin/chkconfig"
+#define LVMCONF_PATH			"/usr/sbin/lvmconf"
+
+#define CMAN_LEAVE_TIMEOUT		"120"	// seconds (string)
+#define CLUMON_SYNC_TIME		8		// seconds
+#define CMAN_SETTLE_TIME		3		// seconds
 
 
 static void run_initd(const String& servname, bool start, bool fail);
@@ -56,401 +54,410 @@
 static void gulm_leave();
 
 
-
-
 bool
 is_service_vm(const XMLObject& cluster_conf, const String& name)
 {
-  for (list<XMLObject>::const_iterator iter = cluster_conf.children().begin();
-       iter != cluster_conf.children().end();
-       iter++) {
-    const XMLObject& kid = *iter;
-    if (kid.tag() == "rm")
-      for (list<XMLObject>::const_iterator iter_s = kid.children().begin();
-	   iter_s != kid.children().end();
-	   iter_s++) {
-	const XMLObject& service_conf = *iter_s;
-	if (iter_s->tag() == "vm")
-	  if (iter_s->get_attr("name") == name)
-	    return true;;
-      }
-  }
-  return false;
+	for (list<XMLObject>::const_iterator
+			iter = cluster_conf.children().begin() ;
+			iter != cluster_conf.children().end() ;
+			iter++)
+	{
+		const XMLObject& kid = *iter;
+		if (kid.tag() == "rm") {
+			for (list<XMLObject>::const_iterator
+					iter_s = kid.children().begin() ;
+					iter_s != kid.children().end() ;
+					iter_s++)
+			{
+				if (iter_s->tag() == "vm") {
+					if (iter_s->get_attr("name") == name)
+						return true;
+				}
+			}
+		}
+	}
+	return false;
 }
 
-
-
-XMLObject 
+XMLObject
 Cluster::status()
 {
-  ClientSocket sock;
-  
-  try {  
-    ClientSocket s("/var/run/clumond.sock");
-    sock = s;
-  } catch ( ... ) {
-    // start clumon
-    run_initd("modclusterd", true, true);
-    
-    // wait for it to come up and sync
-    sleep_sec(CLUMON_SYNC_TIME);
-    
-    // try again
-    ClientSocket s("/var/run/clumond.sock");
-    sock = s;
-  }
-  sock.nonblocking(true);
-  
-  // send status request
-  int beg = int(time_sec());
-  String request("GET");
-  while ((int(time_sec()) < beg + 5)) {
-    bool read = false, write = true;
-    sock.ready(read, write, 500);
-    if (write)
-      if ((request = sock.send(request)).empty())
-	break;
-  }
-  
-  // receive status report
-  beg = int(time_sec());
-  String xml_in;
-  while ((int(time_sec()) < beg + 5)) {
-    bool read = true, write = false;
-    sock.ready(read, write, 500);
-    if (read)
-      xml_in += sock.recv();
-    try {
-      parseXML(xml_in);
-      break;
-    } catch ( ... ) {}
-  }
-  
-  const XMLObject status_xml(parseXML(xml_in));
-  
-  const XMLObject cluster_conf(ClusterConf::get());
-  if (cluster_conf.get_attr("name") != status_xml.get_attr("name"))
-    throw String("cluster names mismatch");
-  
-  // add "vm" attr to services
-  XMLObject status_new(status_xml.tag());
-  for (map<String, String>::const_iterator iter = status_xml.attrs().begin();
-       iter != status_xml.attrs().end();
-       iter++)
-    status_new.set_attr(iter->first, iter->second);
-  for (list<XMLObject>::const_iterator iter = status_xml.children().begin();
-       iter != status_xml.children().end();
-       iter++) {
-    XMLObject s(*iter);
-    if (s.tag() == "service")
-      s.set_attr("vm", 
-		 (is_service_vm(cluster_conf, s.get_attr("name"))) ? "true" : "false");
-    status_new.add_child(s);
-  }
-  return status_new;
+	ClientSocket sock;
+
+	try {
+		ClientSocket s("/var/run/clumond.sock");
+		sock = s;
+	} catch ( ... ) {
+		// start clumon
+		run_initd("modclusterd", true, true);
+
+		// wait for it to come up and sync
+		sleep_sec(CLUMON_SYNC_TIME);
+
+		// try again
+		ClientSocket s("/var/run/clumond.sock");
+		sock = s;
+	}
+	sock.nonblocking(true);
+
+	// send status request
+	int beg = int(time_sec());
+	String request("GET");
+
+	while ((int(time_sec()) < beg + 5)) {
+		bool read = false, write = true;
+		sock.ready(read, write, 500);
+		if (write) {
+			if ((request = sock.send(request)).empty())
+				break;
+		}
+	}
+
+	// receive status report
+	beg = int(time_sec());
+	String xml_in;
+
+	while ((int(time_sec()) < beg + 5)) {
+		bool read = true, write = false;
+		sock.ready(read, write, 500);
+		if (read)
+			xml_in += sock.recv();
+		try {
+			parseXML(xml_in);
+			break;
+		} catch ( ... ) {}
+	}
+
+	const XMLObject status_xml(parseXML(xml_in));
+	const XMLObject cluster_conf(ClusterConf::get());
+
+	if (cluster_conf.get_attr("name") != status_xml.get_attr("name"))
+		throw String("cluster names mismatch");
+
+	// add "vm" attr to services
+	XMLObject status_new(status_xml.tag());
+	for (map<String, String>::const_iterator
+			iter = status_xml.attrs().begin() ;
+			iter != status_xml.attrs().end() ;
+			iter++)
+	{
+		status_new.set_attr(iter->first, iter->second);
+	}
+
+	for (list<XMLObject>::const_iterator
+			iter = status_xml.children().begin() ;
+			iter != status_xml.children().end() ;
+			iter++)
+	{
+		XMLObject s(*iter);
+		if (s.tag() == "service")
+			s.set_attr("vm", (is_service_vm(cluster_conf, s.get_attr("name"))) ? "true" : "false");
+		status_new.add_child(s);
+	}
+	return status_new;
 }
 
-void 
+void
 Cluster::start_node(bool cluster_startup)
 {
-  XMLObject cluster_conf(ClusterConf::get()); // bailout if cluster.conf not present
-  XMLObject stat = status();
-  bool cman_cluster = ClusterConf::is_cman(cluster_conf);
-  
-  if (stat.get_attr("cluster_version") == "4") {
-    run_initd("ccsd", true, false);
-    if (cman_cluster)
-      try {
-	run_initd("cman", true, true);
-      } catch ( ... ) {
-	// try again
-	run_initd("cman", true, true);
-      }
-    else
-      run_initd("lock_gulmd", true, true);
-    
-    if (cluster_startup) {
-      // wait for all nodes to join -> avoid fencing
-      bool all_in = false;
-      while (all_in == false) {
-	all_in = true;
+	// bail out if cluster.conf is not present
+	XMLObject cluster_conf(ClusterConf::get());
 	XMLObject stat = status();
-	for (list<XMLObject>::const_iterator iter = stat.children().begin();
-	     iter != stat.children().end();
-	     iter++)
-	  if (iter->tag() == "node")
-	    if (iter->get_attr("clustered") == "false")
-	      all_in = false;
-	if (all_in == false)
-	  sleep_sec(CLUMON_SYNC_TIME);
-      }
-    }
-    
-    bool use_qdisk = false;
-    cluster_conf = ClusterConf::get(); // ccsd should bring newest cluster.conf
-    for (list<XMLObject>::const_iterator iter = cluster_conf.children().begin();
-	 iter != cluster_conf.children().end();
-	 iter++)
-      if (iter->tag() == "quorumd")
-	use_qdisk = true;
-    
-    if (use_qdisk)
-      run_initd("qdiskd", true, false);
-    if (cman_cluster)
-      run_initd("fenced", true, false);
-    run_initd("clvmd", true, false);
-    run_initd("gfs", true, false);
-    run_initd("rgmanager", true, true);
-    
-    // enable them on boot
-    
-    run_chkconfig("ccsd", true);
-    if (cman_cluster) {
-      run_chkconfig("cman", true);
-      run_chkconfig("lock_gulmd", false);
-      run_chkconfig("fenced", true);
-    } else {
-      run_chkconfig("cman", false);
-      run_chkconfig("fenced", false);
-      run_chkconfig("lock_gulmd", true);
-    }
-    if (use_qdisk)
-      run_chkconfig("qdiskd", true);
-    else
-      run_chkconfig("qdiskd", false);
-    run_chkconfig("clvmd", true);
-    run_chkconfig("gfs", true);
-    run_chkconfig("rgmanager", true);
-    
-  } else if (stat.get_attr("cluster_version") == "5") {
-    try {
-      run_initd("cman", true, true);
-    } catch ( ... ) {
-      // try again
-      run_initd("cman", true, true);
-    }
-    
-    if (cluster_startup) {
-      // wait for all nodes to join -> avoid fencing
-      // trouble: fenced started from within cman!!!
-      /*
-      bool all_in = false;
-      while (all_in == false) {
-	all_in = true;
-	XMLObject stat = status();
-	for (list<XMLObject>::const_iterator iter = stat.children().begin();
-	     iter != stat.children().end();
-	     iter++)
-	  if (iter->tag() == "node")
-	    if (iter->get_attr("clustered") == "false")
-	      all_in = false;
-	if (all_in == false)
-	  sleep_sec(CLUMON_SYNC_TIME);
-      }
-      */
-    }
-    
-    bool use_qdisk = false;
-    cluster_conf = ClusterConf::get(); // ccsd should bring newest cluster.conf
-    for (list<XMLObject>::const_iterator iter = cluster_conf.children().begin();
-	 iter != cluster_conf.children().end();
-	 iter++)
-      if (iter->tag() == "quorumd")
-	use_qdisk = true;
-    
-    if (use_qdisk)
-      run_initd("qdiskd", true, false);
-    run_initd("clvmd", true, false);
-    run_initd("gfs", true, false);
-    run_initd("gfs2", true, false);
-    run_initd("rgmanager", true, true);
-    
-    // enable them on boot
-    
-    run_chkconfig("cman", true);
-    if (use_qdisk)
-      run_chkconfig("qdiskd", true);
-    else
-      run_chkconfig("qdiskd", false);
-    run_chkconfig("clvmd", true);
-    run_chkconfig("gfs", true);
-    run_chkconfig("gfs2", true);
-    run_chkconfig("rgmanager", true);
-  } else {
-    throw String("unsupported cluster version ") + stat.get_attr("cluster_version");
-  }
-}
+	bool cman_cluster = ClusterConf::is_cman(cluster_conf);
 
-void 
-Cluster::stop_node(bool cluster_shutdown,
-		   bool purge_conf)
-{
-  XMLObject stat = status();
-  
-  if (cluster_shutdown) {
-    // stop all services, so they don't bounce around
-    for (list<XMLObject>::const_iterator iter = stat.children().begin();
-	 iter != stat.children().end();
-	 iter++)
-      if (iter->tag() == "service")
-	if (iter->get_attr("running") == "true")
-	  try {
-	    Clusvcadm::stop(iter->get_attr("name"));
-	  } catch ( ... ) {}
-  }
-  
-  if (stat.get_attr("cluster_version") == "4") {
-    run_initd("rgmanager", false, true);
-    run_initd("gfs", false, false);
-    run_initd("clvmd", false, false);
-    run_initd("fenced", false, false);
-    run_initd("qdiskd", false, false);
-    if (ClusterConf::is_cman(ClusterConf::get()))
-      cman_leave();
-    else
-      gulm_leave();
-    run_initd("ccsd", false, false);
-    
-    // disable them on boot
-    
-    run_chkconfig("ccsd", false);
-    run_chkconfig("cman", false);
-    run_chkconfig("lock_gulmd", false);
-    run_chkconfig("qdiskd", false);
-    run_chkconfig("fenced", false);
-    run_chkconfig("clvmd", false);
-    run_chkconfig("gfs", false);
-    run_chkconfig("rgmanager", false);
-    
-  } else if (stat.get_attr("cluster_version") == "5") {
-    run_initd("rgmanager", false, true);
-    run_initd("gfs2", false, false);
-    run_initd("gfs", false, false);
-    run_initd("clvmd", false, false);
-    run_initd("qdiskd", false, false);
-    run_initd("cman", false, true);
-    
-    // disable them on boot
-    
-    run_chkconfig("cman", false);
-    run_chkconfig("qdiskd", false);
-    run_chkconfig("clvmd", false);
-    run_chkconfig("gfs", false);
-    run_chkconfig("gfs2", false);
-    run_chkconfig("rgmanager", false);
-  } else {
-    throw String("unsupported cluster version ") + stat.get_attr("cluster_version");
-  }
-  
-  if (purge_conf) {
-    ClusterConf::purge_conf();
-    
-    // disable LVM cluster locking
-    try {
-      String out, err;
-      int status;
-      vector<String> args;
-      args.push_back("--disable-cluster");
-      utils::execute(LVMCONF_PATH, args, out, err, status, false);
-    } catch ( ... ) {}
-  }
+	if (stat.get_attr("cluster_version") == "4") {
+		run_initd("ccsd", true, false);
+		if (cman_cluster) {
+			try {
+				run_initd("cman", true, true);
+			} catch ( ... ) {
+				// try again
+				run_initd("cman", true, true);
+			}
+		} else
+			run_initd("lock_gulmd", true, true);
+
+		if (cluster_startup) {
+			// wait for all nodes to join -> avoid fencing
+			bool all_in = false;
+			while (all_in == false) {
+				all_in = true;
+				XMLObject stat = status();
+				for (list<XMLObject>::const_iterator
+						iter = stat.children().begin() ;
+						iter != stat.children().end() ;
+						iter++)
+				{
+					if (iter->tag() == "node")
+						if (iter->get_attr("clustered") == "false")
+							all_in = false;
+					if (all_in == false)
+						sleep_sec(CLUMON_SYNC_TIME);
+				}
+			}
+		}
+
+		bool use_qdisk = false;
+
+		// ccsd should bring newest cluster.conf
+		cluster_conf = ClusterConf::get();
+		for (list<XMLObject>::const_iterator
+				iter = cluster_conf.children().begin() ;
+				iter != cluster_conf.children().end() ;
+				iter++)
+		{
+			if (iter->tag() == "quorumd")
+				use_qdisk = true;
+		}
+
+		if (use_qdisk)
+			run_initd("qdiskd", true, false);
+
+		if (cman_cluster)
+			run_initd("fenced", true, false);
+		run_initd("clvmd", true, false);
+		run_initd("gfs", true, false);
+		run_initd("rgmanager", true, true);
+
+		// enable them on boot
+		run_chkconfig("ccsd", true);
+		if (cman_cluster) {
+			run_chkconfig("cman", true);
+			run_chkconfig("fenced", true);
+			run_chkconfig("lock_gulmd", false);
+		} else {
+			run_chkconfig("cman", false);
+			run_chkconfig("fenced", false);
+			run_chkconfig("lock_gulmd", true);
+		}
+
+		if (use_qdisk)
+			run_chkconfig("qdiskd", true);
+		else
+			run_chkconfig("qdiskd", false);
+		run_chkconfig("clvmd", true);
+		run_chkconfig("gfs", true);
+		run_chkconfig("rgmanager", true);
+	} else if (stat.get_attr("cluster_version") == "5") {
+		try {
+			run_initd("cman", true, true);
+		} catch ( ... ) {
+			// try again
+			run_initd("cman", true, true);
+		}
+
+		bool use_qdisk = false;
+		// ccsd should bring newest cluster.conf
+		cluster_conf = ClusterConf::get();
+
+		for (list<XMLObject>::const_iterator
+				iter = cluster_conf.children().begin() ;
+				iter != cluster_conf.children().end() ;
+				iter++)
+		{
+			if (iter->tag() == "quorumd")
+				use_qdisk = true;
+		}
+
+		if (use_qdisk)
+			run_initd("qdiskd", true, false);
+		run_initd("clvmd", true, false);
+		run_initd("gfs", true, false);
+		run_initd("gfs2", true, false);
+		run_initd("rgmanager", true, true);
+
+		// enable them on boot
+		run_chkconfig("cman", true);
+		if (use_qdisk)
+			run_chkconfig("qdiskd", true);
+		else
+			run_chkconfig("qdiskd", false);
+		run_chkconfig("clvmd", true);
+		run_chkconfig("gfs", true);
+		run_chkconfig("gfs2", true);
+		run_chkconfig("rgmanager", true);
+	} else {
+		throw String("unsupported cluster version ")
+				+ stat.get_attr("cluster_version");
+	}
 }
 
+void
+Cluster::stop_node(bool cluster_shutdown, bool purge_conf)
+{
+	XMLObject stat = status();
 
+	if (cluster_shutdown) {
+		// stop all services, so they don't bounce around
+		for (list<XMLObject>::const_iterator
+			iter = stat.children().begin() ;
+			iter != stat.children().end() ;
+			iter++)
+		{
+			if (iter->tag() == "service") {
+				if (iter->get_attr("running") == "true") {
+					try {
+						Clusvcadm::stop(iter->get_attr("name"));
+					} catch ( ... ) {}
+				}
+			}
+		}
+	}
+
+	if (stat.get_attr("cluster_version") == "4") {
+		run_initd("rgmanager", false, true);
+		run_initd("gfs", false, false);
+		run_initd("clvmd", false, false);
+		run_initd("fenced", false, false);
+		run_initd("qdiskd", false, false);
+
+		if (ClusterConf::is_cman(ClusterConf::get()))
+			cman_leave();
+		else
+			gulm_leave();
+		run_initd("ccsd", false, false);
+
+		// disable them on boot
+		run_chkconfig("ccsd", false);
+		run_chkconfig("cman", false);
+		run_chkconfig("lock_gulmd", false);
+		run_chkconfig("qdiskd", false);
+		run_chkconfig("fenced", false);
+		run_chkconfig("clvmd", false);
+		run_chkconfig("gfs", false);
+		run_chkconfig("rgmanager", false);
+	} else if (stat.get_attr("cluster_version") == "5") {
+		run_initd("rgmanager", false, true);
+		run_initd("gfs2", false, false);
+		run_initd("gfs", false, false);
+		run_initd("clvmd", false, false);
+		run_initd("qdiskd", false, false);
+		run_initd("cman", false, true);
+
+		// disable them on boot
+		run_chkconfig("cman", false);
+		run_chkconfig("qdiskd", false);
+		run_chkconfig("clvmd", false);
+		run_chkconfig("gfs", false);
+		run_chkconfig("gfs2", false);
+		run_chkconfig("rgmanager", false);
+	} else {
+		throw String("unsupported cluster version ")
+				+ stat.get_attr("cluster_version");
+	}
+
+	if (purge_conf) {
+		ClusterConf::purge_conf();
+
+		// disable LVM cluster locking
+		try {
+			String out, err;
+			int status;
+			vector<String> args;
+
+			args.push_back("--disable-cluster");
+			utils::execute(LVMCONF_PATH, args, out, err, status, false);
+		} catch ( ... ) {}
+	}
+}
 
-void 
-run_chkconfig(const String& servname,
-	      bool on)
+void
+run_chkconfig(const String& servname, bool on)
 {
-  String out, err;
-  int status;
-  vector<String> args;
-  args.push_back(servname);
-  if (on)
-    args.push_back("on");
-  else
-    args.push_back("off");
-  utils::execute(CHKCONFIG_PATH, args, out, err, status, false);
+	String out, err;
+	int status;
+	vector<String> args;
+
+	args.push_back(servname);
+	if (on)
+		args.push_back("on");
+	else
+		args.push_back("off");
+	utils::execute(CHKCONFIG_PATH, args, out, err, status, false);
 }
 
-void 
+void
 run_initd(const String& servname, bool start, bool fail)
 {
-  String path(INITD_DIR_PATH);
-  path += servname;
-  
-  String out, err;
-  int status;
-  vector<String> args;
-  if (start)
-    args.push_back("start");
-  else
-    args.push_back("stop");
-  bool failed = true;
-  if (utils::execute(path, args, out, err, status, false) == 0)
-    if (status == 0)
-      failed = false;
-  if (fail && failed)
-    throw String("service ") + servname + " " + String(start?"start":"stop") + " failed: " + err;
+	String path(INITD_DIR_PATH);
+	path += servname;
+
+	String out, err;
+	int status;
+	vector<String> args;
+
+	if (start)
+		args.push_back("start");
+	else
+		args.push_back("stop");
+	bool failed = true;
+
+	if (utils::execute(path, args, out, err, status, false) == 0) {
+		if (status == 0)
+			failed = false;
+	}
+
+	if (fail && failed) {
+		throw String("service ") + servname + " "
+				+ String(start ? "start" : "stop") + " failed: " + err;
+	}
 }
 
-void 
+void
 cman_leave()
 {
-  set_CMAN_TOOL_PATH();
-  
-  // when bz179627 gets fixed, just call service cman stop, but for now ...
-  String out, err;
-  int status;
-  vector<String> args;
-  if (utils::execute(LSMOD_PATH, args, out, err, status, false))
-    throw command_not_found_error_msg(LSMOD_PATH);
-  bool cman_loaded = (out.find("cman") != out.npos);
-  
-  if (cman_loaded) {
-    // wait until things settle down
-    sleep_sec(CMAN_SETTLE_TIME);
-    
-    args.clear();
-    args.push_back("leave");
-    args.push_back("-t");
-    args.push_back(CMAN_LEAVE_TIMEOUT);
-    args.push_back("-w");
-    args.push_back("remove");
-    utils::execute(CMAN_TOOL_PATH, args, out, err, status, false);
-    
-    // bz149282
-    sleep_sec(CMAN_SETTLE_TIME);
-    
-    args.clear();
-    args.push_back("-r");
-    args.push_back("dlm");
-    args.push_back("cman");
-    if (utils::execute(MODPROBE_PATH, args, out, err, status, false))
-      throw command_not_found_error_msg(MODPROBE_PATH);
-    if (status != 0)
-      throw String("modprobe -r failed: ") + err;
-  }
+	set_CMAN_TOOL_PATH();
+
+	// when bz179627 gets fixed, just call service cman stop, but for now ...
+	String out, err;
+	int status;
+	vector<String> args;
+
+	if (utils::execute(LSMOD_PATH, args, out, err, status, false))
+		throw command_not_found_error_msg(LSMOD_PATH);
+
+	bool cman_loaded = (out.find("cman") != out.npos);
+	if (cman_loaded) {
+		// wait until things settle down
+		sleep_sec(CMAN_SETTLE_TIME);
+
+		args.clear();
+		args.push_back("leave");
+		args.push_back("-t");
+		args.push_back(CMAN_LEAVE_TIMEOUT);
+		args.push_back("-w");
+		args.push_back("remove");
+		utils::execute(CMAN_TOOL_PATH, args, out, err, status, false);
+
+		// bz149282
+		sleep_sec(CMAN_SETTLE_TIME);
+
+		args.clear();
+		args.push_back("-r");
+		args.push_back("dlm");
+		args.push_back("cman");
+		if (utils::execute(MODPROBE_PATH, args, out, err, status, false))
+			throw command_not_found_error_msg(MODPROBE_PATH);
+		if (status != 0)
+			throw String("modprobe -r failed: ") + err;
+	}
 }
 
-void 
+void
 gulm_leave()
 {
-  // TODO: implement me
-  
-  run_initd("lock_gulmd", false, true);
+	// TODO: implement me
+	run_initd("lock_gulmd", false, true);
 }
 
-
-
-void 
+void
 set_CMAN_TOOL_PATH()
 {
-  static bool path_set = false;
-  if (!path_set) {
-    CMAN_TOOL_PATH = "/sbin/cman_tool";
-    if (access(CMAN_TOOL_PATH.c_str(), X_OK)) 
-      CMAN_TOOL_PATH = "/usr/sbin/cman_tool";
-    path_set = true;
-  }
+	static bool path_set = false;
+	if (!path_set) {
+		CMAN_TOOL_PATH = "/sbin/cman_tool";
+		if (access(CMAN_TOOL_PATH.c_str(), X_OK))
+			CMAN_TOOL_PATH = "/usr/sbin/cman_tool";
+		path_set = true;
+	}
 }
--- conga/ricci/modules/cluster/ClusterStatus.h	2006/10/05 17:38:01	1.4
+++ conga/ricci/modules/cluster/ClusterStatus.h	2007/08/23 15:30:27	1.5
@@ -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
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -26,17 +26,13 @@
 
 #include "XML.h"
 
-
 class Cluster
 {
- public:
-  static XMLObject status();
-  
-  static void start_node(bool cluster_startup = false);
-  static void stop_node(bool cluster_shutdown = false,
-			bool purge_conf = false);
-  
+	public:
+		static XMLObject status();
+		static void start_node(bool cluster_startup = false);
+		static void stop_node(	bool cluster_shutdown = false,
+								bool purge_conf = false);
 };
 
-
-#endif  // ClusterStatus_h
+#endif // ClusterStatus_h
--- conga/ricci/modules/cluster/Clusvcadm.cpp	2007/08/22 18:47:19	1.14
+++ conga/ricci/modules/cluster/Clusvcadm.cpp	2007/08/23 15:30:27	1.15
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -29,336 +29,408 @@
 
 using namespace std;
 
-
-#define CLUSTAT_TOOL_PATH         "/usr/sbin/clustat"
-#define CLUSVCADM_TOOL_PATH       "/usr/sbin/clusvcadm"
-
+#define CLUSTAT_TOOL_PATH		"/usr/sbin/clustat"
+#define CLUSVCADM_TOOL_PATH		"/usr/sbin/clusvcadm"
 
 
 class ServiceStatus
 {
-public:
-  enum state {
-		  RG_STATE_STOPPED         = 110,    // Resource group is stopped
-	      RG_STATE_STARTING        = 111,    // Resource is starting
-	      RG_STATE_STARTED         = 112,    // Resource is started
-	      RG_STATE_STOPPING        = 113,    // Resource is stopping
-	      RG_STATE_FAILED          = 114,    // Resource has failed
-	      RG_STATE_UNINITIALIZED   = 115,    // Thread not running yet
-	      RG_STATE_CHECK           = 116,    // Checking status
-	      RG_STATE_ERROR           = 117,    // Recoverable error
-	      RG_STATE_RECOVER         = 118,    // Pending recovery
-	      RG_STATE_DISABLED        = 119,    // Resource not allowd to run
-	      RG_STATE_MIGRATE         = 120     // Resource migrating
-  };
-  
-  ServiceStatus(const String& name,
-		const String& node, 
-		state status,
-		bool vm) :
-    name(name),
-    node(node),
-    status(status),
-    vm(vm) {}
-  virtual ~ServiceStatus() {}
-  
-  String name;
-  String node;
-  state status;
-  bool vm;
+	public:
+		enum state {
+			RG_STATE_STOPPED		= 110,	// Resource group is stopped
+			RG_STATE_STARTING		= 111,	// Resource is starting
+			RG_STATE_STARTED		= 112,	// Resource is started
+			RG_STATE_STOPPING		= 113,	// Resource is stopping
+			RG_STATE_FAILED			= 114,	// Resource has failed
+			RG_STATE_UNINITIALIZED	= 115,	// Thread not running yet
+			RG_STATE_CHECK			= 116,	// Checking status
+			RG_STATE_ERROR			= 117,	// Recoverable error
+			RG_STATE_RECOVER		= 118,	// Pending recovery
+			RG_STATE_DISABLED		= 119,	// Resource not allowd to run
+			RG_STATE_MIGRATE		= 120	// Resource migrating
+		};
+
+		ServiceStatus(const String& name,
+			const String& node, state status, bool vm) :
+				name(name),
+				node(node),
+				status(status),
+				vm(vm) {}
+		virtual ~ServiceStatus() {}
+
+		String name;
+		String node;
+		state status;
+		bool vm;
 };
 
+static pair<list<String>, list<ServiceStatus> > service_states();
 
-static pair<list<String>, list<ServiceStatus> > 
-service_states();
+void
+Clusvcadm::start(const String& servicename, const String& nodename)
+{
+	pair<list<String>, list<ServiceStatus> > info = service_states();
+	list<String> nodes = info.first;
+	list<ServiceStatus> services = info.second;
+
+	// check if node can run services
+	bool node_found = false;
+
+	for (list<String>::const_iterator
+		iter = nodes.begin() ;
+		iter != nodes.end() ;
+		iter++)
+	{
+		if (*iter == nodename) {
+			node_found = true;
+			break;
+		}
+	}
 
+	if (!node_found && nodename.size()) {
+		throw String("Node " + nodename
+			+ " is unable to run cluster services. Check whether the rgmanager service is running on that node.");
+	}
 
+	// start
+	for (list<ServiceStatus>::const_iterator
+		iter = services.begin() ;
+		iter != services.end() ;
+		iter++)
+	{
+		if (iter->name != servicename)
+			continue;
+		String flag;
+
+		if (iter->status == ServiceStatus::RG_STATE_MIGRATE)
+			throw String(servicename + " is in the process of being migrated");
+
+		/*
+		** Failed services must be disabled before they can be
+		** started again.
+		*/
+		if (iter->status == ServiceStatus::RG_STATE_FAILED) {
+			try {
+				Clusvcadm::stop(servicename);
+			} catch (String e) {
+				throw String("Unable to disable failed service "
+						+ servicename + " before starting it: " + e);
+			} catch ( ... ) {
+				throw String("Unable to disable failed service "
+						+ servicename + " before starting it");
+			}
+			flag = "-e";
+		} else if (	iter->status == ServiceStatus::RG_STATE_STOPPED ||
+					iter->status == ServiceStatus::RG_STATE_STOPPING ||
+					iter->status == ServiceStatus::RG_STATE_ERROR ||
+					iter->status == ServiceStatus::RG_STATE_DISABLED)
+		{
+			flag = "-e";
+		} else if (	iter->status == ServiceStatus::RG_STATE_STARTED ||
+					iter->status == ServiceStatus::RG_STATE_STARTING)
+		{
+			flag = "-r";
+		}
+
+		if (flag.size() < 1) {
+			throw String(servicename + " is in unknown state "
+					+ utils::to_string(iter->status));
+		}
+
+		String out, err;
+		int status;
+		vector<String> args;
+
+		args.push_back(flag);
+		if (iter->vm)
+			args.push_back("vm:" + servicename);
+		else
+			args.push_back(servicename);
+
+		if (nodename.size()) {
+			args.push_back("-m");
+			args.push_back(nodename);
+		}
+
+		if (utils::execute(CLUSVCADM_TOOL_PATH, args, out, err, status, false))
+			throw command_not_found_error_msg(CLUSVCADM_TOOL_PATH);
+
+		if (status != 0) {
+			throw String("clusvcadm start failed to start "
+					+ servicename + ": " + err);
+		}
+		return;
+	}
 
+	throw String(servicename + ": no such cluster service");
+}
 
-void 
-Clusvcadm::start(const String& servicename,
-		 const String& nodename)
+void
+Clusvcadm::migrate(const String& servicename, const String& nodename)
 {
-  pair<list<String>, list<ServiceStatus> > info = service_states();
-  list<String> nodes = info.first;
-  list<ServiceStatus> services = info.second;
-  
-  // check if node can run services
-  bool node_found = false;
-  for (list<String>::const_iterator iter = nodes.begin();
-       iter != nodes.end();
-       iter++)
-    if (*iter == nodename)
-      node_found = true;
-  if (!node_found && nodename.size())
-    throw String("Node " + nodename + " is unable to run cluster services. Check whether the rgmanager service is running");
-  
-  // start
-  for (list<ServiceStatus>::const_iterator iter = services.begin();
-       iter != services.end();
-       iter++)
-    if (iter->name == servicename) {
-      String flag;
-
-      if (iter->status == ServiceStatus::RG_STATE_MIGRATE)
-         throw String(servicename + " is in the process of being migrated");
-
-      /*
-      ** Failed services must be disabled before they can be
-      ** started again.
-      */
-      if (iter->status == ServiceStatus::RG_STATE_FAILED) {
-        try {
-          Clusvcadm::stop(servicename);
-        } catch ( ... ) {
-          throw String("Unable to disable failed service " + servicename + " before starting it");
-        }
-        flag = "-e";
-      } else if (iter->status == ServiceStatus::RG_STATE_STOPPED ||
-	  iter->status == ServiceStatus::RG_STATE_STOPPING ||
-	  iter->status == ServiceStatus::RG_STATE_ERROR ||
-	  iter->status == ServiceStatus::RG_STATE_DISABLED)
-	flag = "-e";
-      else if (iter->status == ServiceStatus::RG_STATE_STARTED ||
-	       iter->status == ServiceStatus::RG_STATE_STARTING)
-	flag = "-r";
-      
-      if (flag.size()) {
-	String out, err;
-	int status;
-	vector<String> args;
-	args.push_back(flag);
-	if (iter->vm)
+	pair<list<String>, list<ServiceStatus> > info = service_states();
+	list<String> nodes = info.first;
+	list<ServiceStatus> services = info.second;
+
+	// check if node can run services
+	bool node_found = false;
+	for (list<String>::const_iterator
+		iter = nodes.begin() ;
+		iter != nodes.end() ;
+		iter++)
+	{
+		if (*iter == nodename) {
+			node_found = true;
+			break;
+		}
+	}
+
+	if (!node_found && nodename.size())
+		throw String("Node " + nodename + " is unable to run cluster services. Check whether the rgmanager service is running on that node.");
+
+	// start
+	for (list<ServiceStatus>::const_iterator
+		iter = services.begin() ;
+		iter != services.end() ;
+		iter++)
+	{
+		if (!iter->vm)
+			continue;
+		if (iter->name != servicename)
+			continue;
+
+		String flag;
+		if (iter->status == ServiceStatus::RG_STATE_MIGRATE)
+			throw String(servicename +
+					" is already in the process of being migrated");
+
+		if (iter->status == ServiceStatus::RG_STATE_FAILED) {
+			try {
+				Clusvcadm::stop(servicename);
+			} catch (String e) {
+				throw String("Unable to disable failed service "
+						+ servicename + " before starting it: " + e);
+			} catch ( ... ) {
+				throw String("Unable to disable failed service "
+						+ servicename + " before starting it");
+			}
+			flag = "-e";
+		} else if (	iter->status == ServiceStatus::RG_STATE_STOPPED ||
+					iter->status == ServiceStatus::RG_STATE_STOPPING ||
+					iter->status == ServiceStatus::RG_STATE_ERROR ||
+					iter->status == ServiceStatus::RG_STATE_DISABLED)
+		{
+			flag = "-e";
+		} else if (	iter->status == ServiceStatus::RG_STATE_STARTED ||
+					iter->status == ServiceStatus::RG_STATE_STARTING)
+		{
+			flag = "-M";
+		}
+
+		if (flag.size() < 1) {
+			throw String(servicename + " is in unknown state "
+					+ utils::to_string(iter->status));
+		}
+
+		String out, err;
+		int status;
+		vector<String> args;
+
+		args.push_back(flag);
 		args.push_back("vm:" + servicename);
-	else
-		args.push_back(servicename);
-	if (nodename.size()) {
-	  args.push_back("-m");
-	  args.push_back(nodename);
+
+		if (nodename.size()) {
+			args.push_back("-m");
+			args.push_back(nodename);
+		}
+
+		if (utils::execute(CLUSVCADM_TOOL_PATH, args, out, err, status, false))
+			throw command_not_found_error_msg(CLUSVCADM_TOOL_PATH);
+
+		if (status != 0) {
+			throw String("clusvcadm failed to migrate "
+					+ servicename + ": " + err);
+		}
+		return;
 	}
-	if (utils::execute(CLUSVCADM_TOOL_PATH, args, out, err, status, false))
-	  throw command_not_found_error_msg(CLUSVCADM_TOOL_PATH);
-	if (status != 0)
-	  throw String("clusvcadm failed to start " + servicename);
-      }
-      return;
-    }
-  
-  throw String(servicename + ": no such cluster service");
+
+	throw String(servicename + ": no such virtual machine service");
 }
 
-void 
-Clusvcadm::migrate(const String& servicename, const String& nodename)
+void
+Clusvcadm::stop(const String& servicename)
 {
-  pair<list<String>, list<ServiceStatus> > info = service_states();
-  list<String> nodes = info.first;
-  list<ServiceStatus> services = info.second;
-  
-  // check if node can run services
-  bool node_found = false;
-  for (list<String>::const_iterator iter = nodes.begin();
-       iter != nodes.end();
-       iter++)
-    if (*iter == nodename)
-      node_found = true;
-  if (!node_found && nodename.size())
-    throw String("Node " + nodename + " is unable to run cluster services. Check whether the rgmanager service is running");
-  
-  // start
-  for (list<ServiceStatus>::const_iterator iter = services.begin();
-       iter != services.end();
-       iter++) {
-	if (!iter->vm)
-		continue;
-    if (iter->name == servicename) {
-      String flag;
-      if (iter->status == ServiceStatus::RG_STATE_MIGRATE)
-         throw String(servicename + " is already in the process of being migrated");
-
-      if (iter->status == ServiceStatus::RG_STATE_FAILED) {
-        try {
-          Clusvcadm::stop(servicename);
-        } catch ( ... ) {
-          throw String("Unable to disable failed service " + servicename + " before starting it");
-        }
-        flag = "-e";
-      } else if (iter->status == ServiceStatus::RG_STATE_STOPPED ||
-	  iter->status == ServiceStatus::RG_STATE_STOPPING ||
-	  iter->status == ServiceStatus::RG_STATE_ERROR ||
-	  iter->status == ServiceStatus::RG_STATE_DISABLED)
-	flag = "-e";
-      else if (iter->status == ServiceStatus::RG_STATE_STARTED ||
-	       iter->status == ServiceStatus::RG_STATE_STARTING)
-	flag = "-M";
-      
-      if (flag.size()) {
-	String out, err;
-	int status;
-	vector<String> args;
-	args.push_back(flag);
-	args.push_back("vm:" + servicename);
-	if (nodename.size()) {
-	  args.push_back("-m");
-	  args.push_back(nodename);
+	pair<list<String>, list<ServiceStatus> > info = service_states();
+	list<String> nodes = info.first;
+	list<ServiceStatus> services = info.second;
+
+	for (list<ServiceStatus>::const_iterator
+		iter = services.begin() ;
+		iter != services.end() ;
+		iter++)
+	{
+		if (iter->name != servicename)
+			continue;
+
+		if (iter->status == ServiceStatus::RG_STATE_STARTING ||
+			iter->status == ServiceStatus::RG_STATE_FAILED ||
+			iter->status == ServiceStatus::RG_STATE_STARTED)
+		{
+			String out, err;
+			int status;
+			vector<String> args;
+
+			args.push_back("-d");
+			if (iter->vm)
+				args.push_back("vm:" + servicename);
+			else
+				args.push_back(servicename);
+
+			if (utils::execute(CLUSVCADM_TOOL_PATH, args, out, err, status, false))
+				throw command_not_found_error_msg(CLUSVCADM_TOOL_PATH);
+
+			if (status != 0) {
+				throw String("clusvcadm failed to stop "
+						+ servicename + ": " + err);
+			}
+			return;
+		}
 	}
-	if (utils::execute(CLUSVCADM_TOOL_PATH, args, out, err, status, false))
-	  throw command_not_found_error_msg(CLUSVCADM_TOOL_PATH);
-	if (status != 0)
-	  throw String("clusvcadm failed to migrate " + servicename + ": " + err);
-      }
-      return;
-    }
-  }
-  
-  throw String(servicename + ": no such virtual machine service");
+
+	throw String(servicename + ": no such cluster service");
 }
 
-void 
-Clusvcadm::stop(const String& servicename)
+void
+Clusvcadm::restart(const String& servicename)
 {
-  pair<list<String>, list<ServiceStatus> > info = service_states();
-  list<String> nodes = info.first;
-  list<ServiceStatus> services = info.second;
-  
-  for (list<ServiceStatus>::const_iterator iter = services.begin();
-       iter != services.end();
-       iter++)
-    if (iter->name == servicename) {
-      if (iter->status == ServiceStatus::RG_STATE_STARTING ||
-          iter->status == ServiceStatus::RG_STATE_FAILED   ||
-	  iter->status == ServiceStatus::RG_STATE_STARTED) {
-	String out, err;
-	int status;
-	vector<String> args;
-	args.push_back("-d");
-	if (iter->vm)
-		args.push_back("vm:" + servicename);
-	else
-		args.push_back(servicename);
-	if (utils::execute(CLUSVCADM_TOOL_PATH, args, out, err, status, false))
-	  throw command_not_found_error_msg(CLUSVCADM_TOOL_PATH);
-	if (status != 0)
-	  throw String("clusvcadm failed to stop " + servicename + ": " + err);
-      }
-      return;
-    }
-  
-  throw String(servicename + ": no such cluster service");
+	pair<list<String>, list<ServiceStatus> > info = service_states();
+	list<String> nodes = info.first;
+	list<ServiceStatus> services = info.second;
+
+	for (list<ServiceStatus>::const_iterator
+		iter = services.begin() ;
+		iter != services.end() ;
+		iter++)
+	{
+		if (iter->name != servicename)
+			continue;
+		if (iter->status == ServiceStatus::RG_STATE_MIGRATE)
+			throw String(servicename + " is in the process of being migrated");
+		if (iter->status == ServiceStatus::RG_STATE_STARTING)
+			throw String(servicename + " is in the process of being started");
+
+		String flag;
+		if (iter->status == ServiceStatus::RG_STATE_FAILED) {
+			try {
+				Clusvcadm::stop(servicename);
+			} catch (String e) {
+				throw String("Unable to disable failed service "
+						+ servicename + " before starting it: " + e);
+			} catch ( ... ) {
+				throw String("Unable to disable failed service "
+						+ servicename + " before starting it");
+			}
+			flag = "-e";
+		} else if (	iter->status == ServiceStatus::RG_STATE_STOPPED ||
+					iter->status == ServiceStatus::RG_STATE_STOPPING ||
+					iter->status == ServiceStatus::RG_STATE_ERROR ||
+					iter->status == ServiceStatus::RG_STATE_DISABLED)
+		{
+			flag = "-e";
+		} else if (iter->status == ServiceStatus::RG_STATE_STARTED)
+			flag = "-R";
+
+		if (flag.size() < 1) {
+			throw String(servicename + " is in unknown state "
+					+ utils::to_string(iter->status));
+		}
+
+		String out, err;
+		int status;
+		vector<String> args;
+		args.push_back(flag);
+
+		if (iter->vm)
+			args.push_back("vm:" + servicename);
+		else
+			args.push_back(servicename);
+
+		if (utils::execute(CLUSVCADM_TOOL_PATH, args, out, err, status, false))
+			throw command_not_found_error_msg(CLUSVCADM_TOOL_PATH);
+		if (status != 0)
+			throw String("clusvcadm failed to restart cluster service " + servicename + ": " + err);
+		return;
+	}
+
+	throw String(servicename + ": no such cluster service");
 }
 
-void 
-Clusvcadm::restart(const String& servicename)
+pair<list<String>, list<ServiceStatus> > service_states()
 {
-  pair<list<String>, list<ServiceStatus> > info = service_states();
-  list<String> nodes = info.first;
-  list<ServiceStatus> services = info.second;
-  
-  for (list<ServiceStatus>::const_iterator iter = services.begin();
-       iter != services.end();
-       iter++)
-    if (iter->name == servicename) {
-      String flag;
-      if (iter->status == ServiceStatus::RG_STATE_MIGRATE)
-         throw String(servicename + " is in the process of being migrated");
-      if (iter->status == ServiceStatus::RG_STATE_STARTING)
-         throw String(servicename + " is in the process of being started");
-
-      if (iter->status == ServiceStatus::RG_STATE_FAILED) {
-        try {
-          Clusvcadm::stop(servicename);
-        } catch ( ... ) {
-          throw String("Unable to disable failed service " + servicename + " before starting it");
-        }
-        flag = "-e";
-      } else if (iter->status == ServiceStatus::RG_STATE_STOPPED ||
-	  iter->status == ServiceStatus::RG_STATE_STOPPING ||
-	  iter->status == ServiceStatus::RG_STATE_ERROR ||
-	  iter->status == ServiceStatus::RG_STATE_DISABLED)
-	flag = "-e";
-      else if (iter->status == ServiceStatus::RG_STATE_STARTED)
-	flag = "-R";
-      
-      if (flag.size()) {
 	String out, err;
 	int status;
 	vector<String> args;
-	args.push_back(flag);
-	if (iter->vm)
-		args.push_back("vm:" + servicename);
-	else
-		args.push_back(servicename);
-	if (utils::execute(CLUSVCADM_TOOL_PATH, args, out, err, status, false))
-	  throw command_not_found_error_msg(CLUSVCADM_TOOL_PATH);
-	if (status != 0)
-	  throw String("clusvcadm failed to restart cluster service " + servicename + ": " + err);
-      }
-      return;
-    }
-  
-  throw String(servicename + ": no such cluster service");
-}
 
+	args.clear();
+	args.push_back("-f");
+	args.push_back("-x");
+	if (utils::execute(CLUSTAT_TOOL_PATH, args, out, err, status, false))
+		throw command_not_found_error_msg(CLUSTAT_TOOL_PATH);
+	if (status)
+		throw String("clustat -fx failed: " + err);
+
+	XMLObject xml = parseXML(out);
+	if (xml.tag() != "clustat")
+		throw String("invalid clustat output (expecting 'clustat' tag)");
+
+	XMLObject nodes_xml("noname"), groups_xml("noname"), quorum_xml("noname");
+	for (list<XMLObject>::const_iterator
+		iter = xml.children().begin() ;
+		iter != xml.children().end() ;
+		iter++)
+	{
+		if (iter->tag() == "nodes")
+			nodes_xml = *iter;
+		else if (iter->tag() == "groups")
+			groups_xml = *iter;
+		else if (iter->tag() == "quorum")
+			quorum_xml = *iter;
+	}
 
+	if (quorum_xml.get_attr("groupmember") != "1")
+		throw NoServiceManager();
 
+	list<String> nodes;
+	for (list<XMLObject>::const_iterator
+		iter = nodes_xml.children().begin() ;
+		iter != nodes_xml.children().end() ;
+		iter++)
+	{
+		if (iter->tag() == "node")
+			nodes.push_back(iter->get_attr("name"));
+	}
 
-pair<list<String>, list<ServiceStatus> >
-service_states()
-{
-  String out, err;
-  int status;
-  vector<String> args;
-  
-  args.clear();
-  args.push_back("-f");
-  args.push_back("-x");
-  if (utils::execute(CLUSTAT_TOOL_PATH, args, out, err, status, false))
-    throw command_not_found_error_msg(CLUSTAT_TOOL_PATH);
-  if (status)
-    throw String("clustat failed: ") + err;
-  
-  XMLObject xml = parseXML(out);
-  if (xml.tag() != "clustat")
-    throw String("invalid clustat output: no clustat tag");
-  
-  XMLObject nodes_xml("noname"), groups_xml("noname"), quorum_xml("noname");
-  for (list<XMLObject>::const_iterator iter = xml.children().begin();
-       iter != xml.children().end();
-       iter++) 
-    if (iter->tag() == "nodes")
-      nodes_xml = *iter;
-    else if (iter->tag() == "groups")
-      groups_xml = *iter;
-    else if (iter->tag() == "quorum")
-      quorum_xml = *iter;
-  
-  if (quorum_xml.get_attr("groupmember") != "1")
-    throw NoServiceManager();
-  
-  list<String> nodes;
-  for (list<XMLObject>::const_iterator iter = nodes_xml.children().begin();
-       iter != nodes_xml.children().end();
-       iter++)
-    if (iter->tag() == "node")
-      nodes.push_back(iter->get_attr("name"));
-  
-  list<ServiceStatus> services;
-  for (list<XMLObject>::const_iterator iter = groups_xml.children().begin();
-       iter != groups_xml.children().end();
-       iter++)
-    if (iter->tag() == "group") {
-      bool vm = false;
-      String name(iter->get_attr("name"));
-      String::size_type idx = name.find(":");
-      if (idx != name.npos) {
-	if (name.substr(0, idx) == "vm")
-	  vm = true;
-	name = name.substr(idx + 1);
-      }
-      String node(iter->get_attr("owner"));
-      ServiceStatus::state state = (ServiceStatus::state) 
-	utils::to_long(iter->get_attr("state"));
-      services.push_back(ServiceStatus(name, node, state, vm));
-    }
-  
-  return pair<list<String>, list<ServiceStatus> >(nodes, services);
+	list<ServiceStatus> services;
+	for (list<XMLObject>::const_iterator
+		iter = groups_xml.children().begin() ;
+		iter != groups_xml.children().end() ;
+		iter++)
+	{
+		if (iter->tag() == "group") {
+			bool vm = false;
+			String name(iter->get_attr("name"));
+			String::size_type idx = name.find(":");
+			if (idx != name.npos) {
+				if (name.substr(0, idx) == "vm")
+					vm = true;
+				name = name.substr(idx + 1);
+			}
+			String node(iter->get_attr("owner"));
+			ServiceStatus::state state =
+				(ServiceStatus::state) utils::to_long(iter->get_attr("state"));
+			services.push_back(ServiceStatus(name, node, state, vm));
+		}
+	}
+
+	return pair<list<String>, list<ServiceStatus> >(nodes, services);
 }
--- conga/ricci/modules/cluster/Clusvcadm.h	2007/03/09 22:48:20	1.3
+++ conga/ricci/modules/cluster/Clusvcadm.h	2007/08/23 15:30:27	1.4
@@ -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
@@ -13,28 +13,25 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
  * Author: Stanko Kupcevic <kupcevic at redhat.com>
  */
 
-
 #ifndef Clusvcadm_h
 #define Clusvcadm_h
 
 #include "String.h"
 
-
 class Clusvcadm
 {
- public:
-  static void start(const String& servicename, const String& nodename);
-  static void migrate(const String& servicename, const String& nodename);
-  static void restart(const String& servicename);
-  static void stop(const String& servicename);
+	public:
+		static void start(const String& servicename, const String& nodename);
+		static void migrate(const String& servicename, const String& nodename);
+		static void restart(const String& servicename);
+		static void stop(const String& servicename);
 };
 
-
-#endif  // Clusvcadm_h
+#endif // Clusvcadm_h
--- conga/ricci/modules/cluster/Fence.cpp	2007/08/22 18:47:19	1.5
+++ conga/ricci/modules/cluster/Fence.cpp	2007/08/23 15:30:27	1.6
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -27,23 +27,21 @@
 
 using namespace std;
 
+#define FENCE_NODE_TOOL_PATH	"/sbin/fence_node"
 
-#define FENCE_NODE_TOOL_PATH         "/sbin/fence_node"
-
-
+void
+Fence::fence_node(const String& nodename)
+{
+	String out, err;
+	int status;
+	vector<String> args;
 
+	args.push_back("-O");
+	args.push_back(nodename);
 
+	if (utils::execute(FENCE_NODE_TOOL_PATH, args, out, err, status, false))
+		throw command_not_found_error_msg(FENCE_NODE_TOOL_PATH);
 
-void 
-Fence::fence_node(const String& nodename)
-{
-  String out, err;
-  int status;
-  vector<String> args;
-  args.push_back("-O");
-  args.push_back(nodename);
-  if (utils::execute(FENCE_NODE_TOOL_PATH, args, out, err, status, false))
-    throw command_not_found_error_msg(FENCE_NODE_TOOL_PATH);
-  if (status != 0)
-    throw String("fence_node failed: ") + err;
+	if (status != 0)
+		throw String("fence_node failed: ") + err;
 }
--- conga/ricci/modules/cluster/Fence.h	2006/08/10 22:53:08	1.2
+++ conga/ricci/modules/cluster/Fence.h	2007/08/23 15:30:27	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
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -29,10 +29,8 @@
 
 class Fence
 {
- public:
-  static void fence_node(const String& nodename);
-  
+	public:
+		static void fence_node(const String& nodename);
 };
 
-
 #endif  // Fence_h
--- conga/ricci/modules/cluster/NoServiceManager.h	2006/04/07 16:42:40	1.1
+++ conga/ricci/modules/cluster/NoServiceManager.h	2007/08/23 15:30:27	1.2
@@ -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
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -26,16 +26,12 @@
 
 #include "Except.h"
 
-
 class NoServiceManager : public Except
 {
- public:
-  NoServiceManager() 
-    : Except(1, "Service Manager not running on this node") {}
-  virtual ~NoServiceManager()
-    {}
-  
+	public:
+		NoServiceManager()
+			: Except(1, "Service Manager not running on this node") {}
+		virtual ~NoServiceManager() {}
 };
 
-
-#endif  // NoServiceManager_h
+#endif // NoServiceManager_h
--- conga/ricci/modules/cluster/Virt.cpp	2007/08/22 18:47:19	1.4
+++ conga/ricci/modules/cluster/Virt.cpp	2007/08/23 15:30:27	1.5
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 
@@ -33,21 +33,22 @@
 using namespace std;
 
 bool Virt::virt_guest(void) {
-    try {
-        String out, err;
-        int status;
-        vector<String> args;
-        if (utils::execute(DMIDECODE_PATH, args, out, err, status, false))
-            throw command_not_found_error_msg(DMIDECODE_PATH);
-        if (status != 0)
+	try {
+		String out, err;
+		int status;
+		vector<String> args;
+
+		if (utils::execute(DMIDECODE_PATH, args, out, err, status, false))
+			throw command_not_found_error_msg(DMIDECODE_PATH);
+		if (status != 0)
 			throw String("dmidecode failed: " + err);
-        if (out.find("Vendor: Xen") != out.npos)
-            return true;
-        if (out.find("Manufacturer: Xen") != out.npos)
-            return true;
-    } catch ( ... ) {}
+		if (out.find("Vendor: Xen") != out.npos)
+			return true;
+		if (out.find("Manufacturer: Xen") != out.npos)
+			return true;
+	} catch ( ... ) {}
 
-    return false;
+	return false;
 }
 
 bool Virt::delete_xvm_key(void) {
@@ -66,7 +67,7 @@
 
 	if (key_base64 == NULL)
 		throw String("no key was given");
-	
+
 	keylen = strlen(key_base64);
 	if (keylen < 1)
 		throw String("no key was given");
@@ -115,7 +116,6 @@
 	int fd;
 	size_t ret;
 	char buf[XVM_KEY_MAX_SIZE];
-	struct stat stat;
 	int err = 0;
 
 	if (keylen < XVM_KEY_MIN_SIZE || keylen > XVM_KEY_MAX_SIZE)
@@ -130,7 +130,6 @@
 	close(fd);
 	if ((size_t) ret != keylen)
 		throw String("error generating key: ") + String(strerror(err));
-		
 
 	fd = open(XVM_KEY_PATH, O_WRONLY | O_EXCL | O_CREAT, 0600);
 	if (fd < 0)
--- conga/ricci/modules/cluster/Virt.h	2007/07/23 18:47:50	1.3
+++ conga/ricci/modules/cluster/Virt.h	2007/08/23 15:30:27	1.4
@@ -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
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 
@@ -30,12 +30,12 @@
 #define DMIDECODE_PATH			"/usr/sbin/dmidecode"
 
 class Virt {
- public:
-	static bool virt_guest(void);
-	static bool delete_xvm_key(void);
-	static bool set_xvm_key(const char *key_base64);
-	static char *get_xvm_key(void);
-	static bool generate_xvm_key(size_t key_bytes);
+	public:
+		static bool virt_guest(void);
+		static bool delete_xvm_key(void);
+		static bool set_xvm_key(const char *key_base64);
+		static char *get_xvm_key(void);
+		static bool generate_xvm_key(size_t key_bytes);
 };
 
 #endif
--- conga/ricci/modules/cluster/main.cpp	2006/08/15 04:15:53	1.4
+++ conga/ricci/modules/cluster/main.cpp	2007/08/23 15:30:27	1.5
@@ -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
@@ -13,7 +13,7 @@
 
   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge,
   MA 02139, USA.
 */
 /*
@@ -24,18 +24,18 @@
 #include "ClusterModule.h"
 
 #include <iostream>
+
 using namespace std;
 
 int
 main(int argc, char** argv)
 {
-  try {
-    ClusterModule m;
-    return stdin_out_module_driver(m,
-				   argc,
-				   argv);
-  } catch (String e) {
-    cerr << e << endl;
-    return 1;
-  }
+	try {
+		ClusterModule m;
+		return stdin_out_module_driver(m, argc, argv);
+	} catch (String e) {
+		cerr << e << endl;
+		return 1;
+	}
+	return 1;
 }




More information about the Cluster-devel mailing list