All of lore.kernel.org
 help / color / mirror / Atom feed
From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/ricci modules/cluster/ClusterModule.cpp  ...
Date: 23 Jul 2007 18:47:53 -0000	[thread overview]
Message-ID: <20070723184753.30858.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-07-23 18:47:51

Modified files:
	ricci/modules/cluster: ClusterModule.cpp Virt.cpp Virt.h 
Added files:
	ricci/test_suite/cluster: delete_xvm_key.xml 
	                          generate_xvm_key.xml get_xvm_key.xml 
	                          set_xvm_key.xml 

Log message:
	Complete ricci support for managing fence_xvm key files

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/cluster/delete_xvm_key.xml.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/cluster/generate_xvm_key.xml.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/cluster/get_xvm_key.xml.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/cluster/set_xvm_key.xml.diff?cvsroot=cluster&r1=NONE&r2=1.1

--- conga/ricci/modules/cluster/ClusterModule.cpp	2007/03/09 22:48:20	1.7
+++ conga/ricci/modules/cluster/ClusterModule.cpp	2007/07/23 18:47:50	1.8
@@ -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,11 +13,12 @@
 
   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@redhat.com>
+ * Author: Ryan McCabe <rmccabe@redhat.com>
  */
 
 
@@ -27,6 +28,7 @@
 #include "Clusvcadm.h"
 #include "Fence.h"
 #include "Virt.h"
+#include "base64.h"
 
 
 using namespace std;
@@ -42,13 +44,18 @@
 static VarMap fence_node(const VarMap& args);
 static VarMap start_node(const VarMap& args);
 static VarMap stop_node(const VarMap& args);
+
 static VarMap virt_guest(const VarMap& args);
+static VarMap delete_xvm_key(const VarMap& args);
+static VarMap set_xvm_key(const VarMap& args);
+static VarMap get_xvm_key(const VarMap& args);
+static VarMap generate_xvm_key(const VarMap& args);
 
 static ApiFcnMap build_fcn_map();
 
 
 ClusterModule::ClusterModule() :
-  Module(build_fcn_map())
+	Module(build_fcn_map())
 {}
 
 ClusterModule::~ClusterModule()
@@ -58,157 +65,161 @@
 ApiFcnMap
 build_fcn_map()
 {
-  FcnMap   api_1_0;
-  api_1_0["get_cluster.conf"]                     = get_cluster_conf;
-  api_1_0["set_cluster.conf"]                     = set_cluster_conf;
-  
-  api_1_0["status"]                               = cluster_status;
-  
-  api_1_0["start_service"]                        = service_start;
-  api_1_0["stop_service"]                         = service_stop;
-  api_1_0["restart_service"]                      = service_restart;
-  api_1_0["migrate_service"]                      = service_migrate;
-  
-  api_1_0["start_node"]                           = start_node;
-  api_1_0["stop_node"]                            = stop_node;
-  api_1_0["fence_node"]                           = fence_node;
-  api_1_0["virt_guest"]                           = virt_guest;
-  
-  
-  ApiFcnMap   api_fcn_map;
-  api_fcn_map["1.0"] = api_1_0;
-  
-  return api_fcn_map;
-}
+	FcnMap	api_1_0;
+
+	api_1_0["get_cluster.conf"]		= get_cluster_conf;
+	api_1_0["set_cluster.conf"]		= set_cluster_conf;
+
+	api_1_0["status"]				= cluster_status;
+
+	api_1_0["start_service"]		= service_start;
+	api_1_0["stop_service"]			= service_stop;
+	api_1_0["restart_service"]		= service_restart;
+	api_1_0["migrate_service"]		= service_migrate;
+
+	api_1_0["start_node"]			= start_node;
+	api_1_0["stop_node"]			= stop_node;
+	api_1_0["fence_node"]			= fence_node;
 
 
-VarMap 
+	api_1_0["delete_xvm_key"]		= delete_xvm_key;
+	api_1_0["set_xvm_key"]			= set_xvm_key;
+	api_1_0["get_xvm_key"]			= get_xvm_key;
+	api_1_0["generate_xvm_key"]		= generate_xvm_key;
+	api_1_0["virt_guest"]			= virt_guest;
+
+
+	ApiFcnMap api_fcn_map;
+	api_fcn_map["1.0"] = api_1_0;
+
+	return api_fcn_map;
+}
+
+VarMap
 cluster_status(const VarMap& args)
 {
-  Variable var("status", Cluster::status());
-  
-  VarMap ret;
-  ret.insert(pair<String, Variable>(var.name(), var));
-  return ret;
+	Variable var("status", Cluster::status());
+
+	VarMap ret;
+	ret.insert(pair<String, Variable>(var.name(), var));
+	return ret;
 }
 
-VarMap 
+VarMap
 get_cluster_conf(const VarMap& args)
 {
-  Variable var("cluster.conf", ClusterConf::get());
-  
-  VarMap ret;
-  ret.insert(pair<String, Variable>(var.name(), var));
-  return ret;
+	Variable var("cluster.conf", ClusterConf::get());
+
+	VarMap ret;
+	ret.insert(pair<String, Variable>(var.name(), var));
+	return ret;
 }
 
-VarMap 
+VarMap
 set_cluster_conf(const VarMap& args)
 {
-  XMLObject conf;
-  bool propagate;
-  try {
-    VarMap::const_iterator iter = args.find("cluster.conf");
-    if (iter == args.end())
-      throw APIerror("missing cluster.conf variable");
-    conf = iter->second.get_XML();
-    
-    propagate = false;
-    iter = args.find("propagate");
-    if (iter != args.end())
-      propagate = iter->second.get_bool();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-  
-  ClusterConf::set(conf, propagate);
-  
-  VarMap ret;
-  return ret;
+	XMLObject conf;
+	bool propagate;
+
+	try {
+		VarMap::const_iterator iter = args.find("cluster.conf");
+		if (iter == args.end())
+			throw APIerror("missing cluster.conf variable");
+		conf = iter->second.get_XML();
+
+		propagate = false;
+		iter = args.find("propagate");
+		if (iter != args.end())
+			propagate = iter->second.get_bool();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	ClusterConf::set(conf, propagate);
+	VarMap ret;
+	return ret;
 }
 
-VarMap 
+VarMap
 service_stop(const VarMap& args)
 {
-  String name;
-  try {
-    VarMap::const_iterator iter = args.find("servicename");
-    if (iter == args.end())
-      throw APIerror("missing servicename variable");
-    name = iter->second.get_string();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-  
-  Clusvcadm::stop(name);
-  
-  VarMap ret;
-  return ret;
+	String name;
+
+	try {
+		VarMap::const_iterator iter = args.find("servicename");
+		if (iter == args.end())
+			throw APIerror("missing servicename variable");
+		name = iter->second.get_string();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	Clusvcadm::stop(name);
+	VarMap ret;
+	return ret;
 }
 
-VarMap 
+VarMap
 service_start(const VarMap& args)
 {
-  String service_name, node_name;
-  try {
-    VarMap::const_iterator iter = args.find("servicename");
-    if (iter == args.end())
-      throw APIerror("missing servicename variable");
-    service_name = iter->second.get_string();
-    
-    iter = args.find("nodename");
-    if (iter != args.end())
-      node_name = iter->second.get_string();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-  
-  Clusvcadm::start(service_name, node_name);
-  
-  VarMap ret;
-  return ret;
+	String service_name, node_name;
+
+	try {
+		VarMap::const_iterator iter = args.find("servicename");
+		if (iter == args.end())
+			throw APIerror("missing servicename variable");
+		service_name = iter->second.get_string();
+
+		iter = args.find("nodename");
+		if (iter != args.end())
+			node_name = iter->second.get_string();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	Clusvcadm::start(service_name, node_name);
+	VarMap ret;
+	return ret;
 }
 
-VarMap 
+VarMap
 service_migrate(const VarMap& args)
 {
-  String service_name, node_name;
-  try {
-    VarMap::const_iterator iter = args.find("servicename");
-    if (iter == args.end())
-      throw APIerror("missing servicename variable");
-    service_name = iter->second.get_string();
-    
-    iter = args.find("nodename");
-    if (iter != args.end())
-      node_name = iter->second.get_string();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-  
-  Clusvcadm::migrate(service_name, node_name);
-  
-  VarMap ret;
-  return ret;
+	String service_name, node_name;
+	try {
+		VarMap::const_iterator iter = args.find("servicename");
+		if (iter == args.end())
+			throw APIerror("missing servicename variable");
+		service_name = iter->second.get_string();
+
+		iter = args.find("nodename");
+		if (iter != args.end())
+			node_name = iter->second.get_string();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	Clusvcadm::migrate(service_name, node_name);
+	VarMap ret;
+	return ret;
 }
 
-VarMap 
+VarMap
 service_restart(const VarMap& args)
 {
-  String name;
-  try {
-    VarMap::const_iterator iter = args.find("servicename");
-    if (iter == args.end())
-      throw APIerror("missing servicename variable");
-    name = iter->second.get_string();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-  
-  Clusvcadm::restart(name);
-  
-  VarMap ret;
-  return ret;
+	String name;
+	try {
+		VarMap::const_iterator iter = args.find("servicename");
+		if (iter == args.end())
+			throw APIerror("missing servicename variable");
+		name = iter->second.get_string();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	Clusvcadm::restart(name);
+	VarMap ret;
+	return ret;
 }
 
 VarMap
@@ -221,62 +232,141 @@
 	return ret;
 }
 
-VarMap 
+VarMap
+delete_xvm_key(const VarMap& args) {
+	Virt::delete_xvm_key();
+	VarMap ret;
+	return ret;
+}
+
+VarMap
+set_xvm_key(const VarMap& args) {
+	String key_base64;
+
+	try {
+		VarMap::const_iterator iter = args.find("key_base64");
+
+		if (iter != args.end()) {
+			key_base64 = iter->second.get_string();
+		} else {
+			throw String("missing key_base64 variable");
+		}
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	Virt::set_xvm_key(key_base64.c_str());
+	VarMap ret;
+	return ret;
+}
+
+VarMap
+get_xvm_key(const VarMap& args) {
+	char *key_base64 = NULL;
+
+	key_base64 = Virt::get_xvm_key();
+	Variable var("key_base64", String(key_base64));
+	memset(key_base64, 0, strlen(key_base64));
+	free(key_base64);
+
+	VarMap ret;
+	ret.insert(pair<String, Variable>(var.name(), var));
+	return ret;
+}
+
+VarMap
+generate_xvm_key(const VarMap& args) {
+	size_t key_bytes = XVM_KEY_DEFAULT_SIZE;
+
+	try {
+		VarMap::const_iterator iter = args.find("size");
+
+		if (iter != args.end()) {
+			int bytes = iter->second.get_int();
+
+			if (bytes < XVM_KEY_MIN_SIZE) {
+				char err[64];
+				snprintf(err, sizeof(err),
+					"The minimum fence_xvm key size is %u bytes",
+					XVM_KEY_MIN_SIZE);
+				throw String(err);
+			}
+
+			if (bytes > XVM_KEY_MAX_SIZE) {
+				char err[64];
+				snprintf(err, sizeof(err),
+					"The maximum fence_xvm key size is %u bytes",
+					XVM_KEY_MAX_SIZE);
+				throw String(err);
+			}
+			key_bytes = (size_t) bytes;
+		}
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	Virt::generate_xvm_key(key_bytes);
+	VarMap ret;
+	return ret;
+}
+
+VarMap
 fence_node(const VarMap& args)
 {
-  String name;
-  try {
-    VarMap::const_iterator iter = args.find("nodename");
-    if (iter == args.end())
-      throw APIerror("missing nodename variable");
-    name = iter->second.get_string();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-  
-  Fence::fence_node(name);
-  
-  VarMap ret;
-  return ret;
+	String name;
+
+	try {
+		VarMap::const_iterator iter = args.find("nodename");
+		if (iter == args.end())
+			throw APIerror("missing nodename variable");
+		name = iter->second.get_string();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	Fence::fence_node(name);
+	VarMap ret;
+	return ret;
 }
 
-VarMap 
+VarMap
 start_node(const VarMap& args)
 {
-  bool cluster_startup = false;
-  try {
-    VarMap::const_iterator iter = args.find("cluster_startup");
-    if (iter != args.end())
-      cluster_startup = iter->second.get_bool();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-  
-  Cluster::start_node(cluster_startup);
-  
-  VarMap ret;
-  return ret;
+	bool cluster_startup = false;
+
+	try {
+		VarMap::const_iterator iter = args.find("cluster_startup");
+		if (iter != args.end())
+			cluster_startup = iter->second.get_bool();
+		} catch ( String e ) {
+			throw APIerror(e);
+	}
+
+	Cluster::start_node(cluster_startup);
+
+	VarMap ret;
+	return ret;
 }
 
-VarMap 
+VarMap
 stop_node(const VarMap& args)
 {
-  bool cluster_shutdown = false;
-  bool purge_conf = false;
-  try {
-    VarMap::const_iterator iter = args.find("cluster_shutdown");
-    if (iter != args.end())
-      cluster_shutdown = iter->second.get_bool();
-    iter = args.find("purge_conf");
-    if (iter != args.end())
-      purge_conf = iter->second.get_bool();
-  } catch ( String e ) {
-    throw APIerror(e);
-  }
-  
-  Cluster::stop_node(cluster_shutdown,
-		     purge_conf);
-  
-  VarMap ret;
-  return ret;
+	bool cluster_shutdown = false;
+	bool purge_conf = false;
+
+	try {
+		VarMap::const_iterator iter = args.find("cluster_shutdown");
+		if (iter != args.end())
+			cluster_shutdown = iter->second.get_bool();
+
+		iter = args.find("purge_conf");
+		if (iter != args.end())
+			purge_conf = iter->second.get_bool();
+	} catch ( String e ) {
+		throw APIerror(e);
+	}
+
+	Cluster::stop_node(cluster_shutdown, purge_conf);
+	VarMap ret;
+	return ret;
 }
--- conga/ricci/modules/cluster/Virt.cpp	2007/07/17 22:30:45	1.2
+++ conga/ricci/modules/cluster/Virt.cpp	2007/07/23 18:47:50	1.3
@@ -30,10 +30,6 @@
 
 using namespace std;
 
-#define XVM_KEY_PATH		"/etc/cluster/fence_xvm.key"
-#define XVM_KEY_MAX_SIZE	4096
-#define XVM_KEY_MIN_SIZE	128
-
 bool Virt::virt_guest(void) {
     try {
         String out, err;
@@ -48,41 +44,43 @@
         if (out.find("Manufacturer: Xen") != out.npos)
             return true;
     } catch ( ... ) {}
+
     return false;
 }
 
 bool Virt::delete_xvm_key(void) {
-	return unlink(XVM_KEY_PATH);
+	return unlink(XVM_KEY_PATH) == 0;
 }
 
 bool Virt::set_xvm_key(const char *key_base64) {
-	char buf[4608];
+	char *buf = NULL;
 	size_t keylen;
 	size_t keylen_dec = 0;
-	bool ret;
+	ssize_t ret;
+	bool decoded = false;
 	int fd;
 	mode_t old_mask;
 	char tmpname[] = "/etc/cluster/.fence_xvm.keyXXXXXX";
 
 	if (key_base64 == NULL)
-		return (false);
+		throw String("no key was given");
 	
 	keylen = strlen(key_base64);
 	if (keylen < 1)
-		return (false);
+		throw String("no key was given");
 
-	ret = base64_decode(key_base64, keylen, buf, &keylen_dec);
-	if (!ret || keylen_dec < XVM_KEY_MIN_SIZE) {
-		memset(buf, 0, sizeof(buf));
-		return (false);
-	}
+	decoded = base64_decode_alloc(key_base64, keylen, &buf, &keylen_dec);
+	if (!decoded || buf == NULL)
+		throw String("an invalid key was given");
 
 	old_mask = umask(077);
+
 	fd = mkstemp(tmpname);
 	umask(old_mask);
 	if (fd < 0) {
-		memset(buf, 0, sizeof(buf));
-		return (false);
+		memset(buf, 0, keylen_dec);
+		free(buf);
+		throw String("error setting new key");
 	}
 
 	fchmod(fd, 0600);
@@ -90,16 +88,18 @@
 	if (ret < 0 || (size_t) ret != keylen_dec) {
 		unlink(tmpname);
 		close(fd);
-		memset(buf, 0, sizeof(buf));
-		return (false);
+		memset(buf, 0, keylen_dec);
+		free(buf);
+		throw String("error setting new key");
 	}
 
 	close(fd);
-	memset(buf, 0, sizeof(buf));
+	memset(buf, 0, keylen_dec);
+	free(buf);
 
 	if (rename(tmpname, XVM_KEY_PATH) != 0) {
 		unlink(tmpname);
-		return (false);
+		throw String("error setting new key");
 	}
 
 	return (true);
@@ -112,63 +112,60 @@
 	struct stat stat;
 
 	if (keylen < XVM_KEY_MIN_SIZE || keylen > XVM_KEY_MAX_SIZE)
-		return (false);
+		throw String("invalid key length");
 
 	fd = open("/dev/urandom", O_RDONLY);
 	if (fd < 0)
-		return (false);
+		throw String("error generating key");
+
 	ret = read(fd, buf, keylen);
 	close(fd);
 	if ((size_t) ret != keylen)
-		return (false);
+		throw String("error generating key");
+		
 
 	fd = open(XVM_KEY_PATH, O_WRONLY | O_EXCL | O_CREAT, 0600);
 	if (fd < 0)
-		return (false);
+		throw String("error generating key");
+
 	ret = write(fd, buf, keylen);
 	close(fd);
 	if ((size_t) ret != keylen) {
 		unlink(XVM_KEY_PATH);
-		return (false);
+		throw String("error generating key");
 	}
 	return (true);
 }
 
-bool Virt::get_xvm_key(char *key_out, size_t len) {
+char *Virt::get_xvm_key(void) {
 	int fd;
 	ssize_t ret;
 	size_t keylen_bin = 0;
 	size_t keylen_base64 = 0;
 	char buf[XVM_KEY_MAX_SIZE];
 	struct stat st;
-
-	if (len == 0 || len > SSIZE_MAX)
-		return (false);
+	char *key_out = NULL;
 
 	fd = open(XVM_KEY_PATH, O_RDONLY);
 	if (fd < 0)
-		return (false);
+		throw String("error retrieving key");
 
 	if (fstat(fd, &st) != 0) {
 		close(fd);
-		return (false);
+		throw String("error retrieving key");
 	}
 
 	ret = read(fd, buf, sizeof(buf));
 	close(fd);
 	if (ret < 0 || (off_t) ret != st.st_size) {
 		memset(buf, 0, sizeof(buf));
-		return (false);
+		throw String("error retrieving key");
 	}
-
 	keylen_bin = (size_t) ret;
-	if (len < BASE64_LENGTH(keylen_bin) + 1) {
-		/* Output won't fit in the buffer. */
-		memset(buf, 0, sizeof(buf));
-		return (false);
-	}
 
-	base64_encode(buf, keylen_bin, key_out, len);
+	keylen_base64 = base64_encode_alloc(buf, keylen_bin, &key_out);
 	memset(buf, 0, sizeof(buf));
-	return (false);
+	if (keylen_base64 < 1 || key_out == NULL)
+		throw String("error retrieving key");
+	return (key_out);
 }
--- conga/ricci/modules/cluster/Virt.h	2007/07/17 22:30:45	1.2
+++ conga/ricci/modules/cluster/Virt.h	2007/07/23 18:47:50	1.3
@@ -22,15 +22,20 @@
 
 #include "String.h"
 
-#define DMIDECODE_PATH	"/usr/sbin/dmidecode"
+#define XVM_KEY_PATH			"/etc/cluster/fence_xvm.key"
+#define XVM_KEY_MAX_SIZE		4096
+#define XVM_KEY_MIN_SIZE		128
+#define XVM_KEY_DEFAULT_SIZE	4096
+
+#define DMIDECODE_PATH			"/usr/sbin/dmidecode"
 
 class Virt {
  public:
 	static bool virt_guest(void);
-	bool delete_xvm_key(void);
-	bool set_xvm_key(const char *key_base64);
-	bool get_xvm_key(char *key_out_base64, size_t buflen);
-	bool generate_xvm_key(size_t key_bytes);
+	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
/cvs/cluster/conga/ricci/test_suite/cluster/delete_xvm_key.xml,v  -->  standard output
revision 1.1
--- conga/ricci/test_suite/cluster/delete_xvm_key.xml
+++ -	2007-07-23 18:47:52.828775000 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<ricci version="1.0" function="process_batch" async="false">
+<batch>
+
+<module name="cluster">
+<request sequence="1254" API_version="1.0">
+<function_call name="delete_xvm_key" />
+</request>
+</module>
+
+</batch>
+</ricci>
+
/cvs/cluster/conga/ricci/test_suite/cluster/generate_xvm_key.xml,v  -->  standard output
revision 1.1
--- conga/ricci/test_suite/cluster/generate_xvm_key.xml
+++ -	2007-07-23 18:47:52.920499000 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<ricci version="1.0" function="process_batch" async="false">
+<batch>
+
+<module name="cluster">
+<request sequence="1254" API_version="1.0">
+<function_call name="generate_xvm_key" />
+</request>
+</module>
+
+</batch>
+</ricci>
+
/cvs/cluster/conga/ricci/test_suite/cluster/get_xvm_key.xml,v  -->  standard output
revision 1.1
--- conga/ricci/test_suite/cluster/get_xvm_key.xml
+++ -	2007-07-23 18:47:53.010883000 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<ricci version="1.0" function="process_batch" async="false">
+<batch>
+
+<module name="cluster">
+<request sequence="1254" API_version="1.0">
+<function_call name="get_xvm_key" />
+</request>
+</module>
+
+</batch>
+</ricci>
+
/cvs/cluster/conga/ricci/test_suite/cluster/set_xvm_key.xml,v  -->  standard output
revision 1.1
--- conga/ricci/test_suite/cluster/set_xvm_key.xml
+++ -	2007-07-23 18:47:53.089392000 +0000
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<ricci version="1.0" function="process_batch" async="false">
+<batch>
+
+<module name="cluster">
+<request sequence="1254" API_version="1.0">
+<function_call name="set_xvm_key">
+	<var mutable="false" name="key_base64" type="string" value="33+Yc2b3UfmAGuvknYE2oW3r26fI/jLZYrVnmEQcnG9ANTlKBd2kFrjstZiDzWENBoOAHGCIX4p5SanuysqHZBrEmgh06FY9ZFz5Ss1unGVNzq39EQDkCIKd+rMOF8ncQTDK3RmGmNImic9Ur13w4AXgSodJJp4m3ycxh3cZDT34G1Q2ZI804FLjSSIE3UNpbtmrxLfIm5jZqquVjtQc/xRWr7MyFgu9t0a40gSVHcojYUml7PTtDkcxE6ka274qQoGLwt77Z/kR2RghuPFAoBa3quyA9V8hFtxlG8sSzTS39R82j5Y2/SNKyMJyRsSeSjNPCXlAEuTPItoCYdZghvR1F9lqXHc51nEhd+MaTCFQ5kdJZ6x1CDniCHteiA7f6a4FLMnT6R+HM7b8/MBUqd9x7iwt9aIwgppoWfTvIV+pJ8N4QrpVliUqt8ZxQ02z7D1QlIKYBGrhnsglMHv6BlZMe4ogX4YkXtV8kjSHBxYHSXvOb+LSHYT8qpQDlmAfONsj+UWsN75Af9HDTUuUcjDl05dEjxrEa/E5OAmpBixjuWrsxVjQfi/qZvETX68k1XC93YEDBwMMEej/uxfomf1BzSxlBSWX/3iXWjvxiOWXoENYLM9IYR/XmZUvq5L45bJ4KLjj178EBRyOWXHdhbD5QJLPyxRg+ePHksFsgsTp3jSqru2i1K+EFLpNGObinTNqzCtGyb0vKjuFlD2/C/IQyOGMg7mIEizJSaJvlRFtLVEJRsPN1Pi9sKXpMgaV4lzkzzGgrooz4zRXJ3cDqEKx2uqRikEakPS0jIgL41NAGlOKNQdFee4RKrB5tefVVuRdfRf8WD0XJ3Fub7YAeKosPMMP6g6aeU32HV2l7SBpxbKoeBUcNyHJ5hGn94U8LLYMJ5j0cY73o0c3AvU/vfFukzU8cLq!
 Xo8ZQ/hrmc51Evk3e5QDhaiv0huR3JbcrmAVEOnrcgXXYUiezE/mDTD+IR44xrCSqO6mWOTYMh0ZGb2roZS4rRy5kykzmbVT/D4TqFHGgpn8aIyP8qVRDhH/UOZZOCdc6um+ipi+otzVQcK9yOYD4pk0rRnJ0DBzDuebLWEvcoHuBiZFzanaEGK7R7FXy3iR9eE7O/6UVbZSsr6DhmdseAKGKQ2HQ0KJ38X1zf+6vOcV/PUvYimNKmpta2qn9pkNyWTdBRVOrS3VLRNRGtHl2uE/oW9QMpL/mY5+YsPyBR8iEcD1Ra3vknGQ0hDK+6KxPeJx1f/QGaVj7oxQze5RWoVKRuhgeWcKaomxoJ+36O5rgakNduOCIUcrGKxWHb1C3YNsDxIzYLLGHhxLVbciXGzxY5EL12GsELFnK+cdv++qkX1HsiKayBt88O0YlYK1DxFK7wMvuK7stOtfzWFI67j/LGoxBYAkXuMcaRiSzDJm5ADEUrug7L9zCp9A+LYPylPu7t2qdEG57bauEosPy48g+3+/fln//JflUOQemnRbAXLfIQxWJwG4JMYDBegJcVtOvoY+kemTP0rPlDwNgijqBwaU/JW0APCZfOUzmLSbt0jV7m46IwUMkvv9Tf2npi8rKABAY7GwuZUKU1IaDYtsEx4njgodHgRQmLvrAaNLA/7L51jI35PxJ2fsj95Iia7jUmOEIe45IpOfEBxPAHGeBUryt9hohfddBocazucGz3b+14grJ68TXJsAGcTeAe66rw/W+cXksG1W5Ih8gQ+v3xUEBoXTTgqD+336C5Lf0APqBMCCF6om0n3NBIVJ4XvqTHjx6Wbj99bTooDcDKsIJVGY3sf1FZdwdsAs85s1CY3k/j6L732jwKdtV+kdqc5VTAkOG4nqST2UFI5Qtc2umjwxDrDe8GJvQLxtMXPGZcxVW3jgsLOAasYdf6VBN79HMd0FrjfG7t2lQ+BjwEmsOS/E!
 gvWV2MjPsyX85901P0M8WSdB7nR5ETvYhQhizFLVjc4ZDY/GBEyCwg20ywEMGU!
 7Fr0r8wg
NUWWi/+gBMsXw6DS6c4Dnwj1U6rExffMOJoXum8Gcdi2N3B1vGAH99KGOFtei3E2DJNpd+EgyuJiuO8fz7EWqbokoJba9U2XMEF+9w7YrtZUOF3tmEMlabNDff/GdBFiEPC4bD7GfBE+1jhuYito7fOMXR4e16q1WDspXhD6MGmqe0xSHXqRLtAO9EErZ9RDm0ass7Uwc3gNtgKtx3Oms4kV/+P/6WTslMmQttKpVAmU1Nhw/5cuaHwuRNNDZvNuSdj4tsykkIGsrfSdiWuE/0Ts+PI17rrgxtHBZWTF10Xg/xaAvytspNHbJylSfwN4a4aBf7U7G3DYg95onD4A4KitWA18VCcP4u8M4TDj/Tyz7Tr37/DAfyLek0+NPKFLgcSuMicBovvHrziuZ+QHCquCTAWxvLC965WKpo7jQzqNZVI195b+CocV+YgV2jKeEoaTdMDjeIVGmxElBYVCKU3+y6BVQpARJ+OSqudqPNuukXR8oBCaZQlsCVkugJ+AqPObsDLTda2mjcCREopIzXhYEYGEUwU8AIMzYlw1F15ZzHzgDOG2b3tXW7TairT2KJA0ZtigVAvHGxBh7H7Z3w0s9sInNvH/bZvjWsvB7fXu9qVZxYh9QYFew7zliyvNXUH3NIJseu3njaKluHhYzPokr2RzTHKdNVeeYcFwIWEJFGnk0AYTxb7mW2ATyWJ7CQHUwAWW0n4DyUdkiOU/081x2wPn/+SuH+YvKc1bzdszoSO2zBaAZjbz7GeZJMYAZfAmigYrjSmtMAClk8BgQy0Ecmt9y/vkoPXNq7iiu7O3dNNX2zd1QXbWkYIYhbvl+Z9zWysuVqZ/sVAavUMjm8cnpWh2Rl13siarO57TL/QysyyGYzKEJw55n+Xhjral6c7NhSi4WbuTaMwpw5pSIw38YA/3XTKLI3FXvV5ZQvNKONsKW4WwHgBDkx0QiGWayLtBU8VLEsYWHWU5jIUc3JJA7QgcV!
 Swii22vlXCcmfqUJuBtV2AkVTOjUluvk9VOqR8Av3hS/iGBHHoEb8oiJUAjL2P1AqdKrmomZpfYtrVRmHOB0dbNUIq0I6sXY0v0kYzKMfu930NrJEjW1kyPJKnbTfifLlOMUYX+6HBqeSa5ml/04qYwajsG/HfgOqtlIBwOU/OilrK4wqjEIZrDR3eO6wIi2Dmeoqc5euFIfkSu2WR2AO+gxhx80lE4Kny97nykVkgK3I79hpfa7A1h0MGp6ZHKOMesGDJMtDRkCCw7ByHI/+or7ysCHfVmTVJ2nX0dpOUoK6eG+YtidtsI/8i++YLXHyZIl8y+LJHwIpLQOzbVAWoLDihrCR0INL3Z/1NCsp1UlbQwe6Ko+7YHzYGHvaVal1CKeTUmNRaX4ydwL1G57PnlYCNF9+YzLuuAKQavRd/o/LVxojlwj2LaUycfGVcXidLZmNfLulKRX7cyly0bxCuf6RNRnRdLGxnPCRu5SJJrhO9AJXKfTzWaPfIn1vUJaNfEQnhA4D1PwKRTpLlPoF/RgIlzzLY47y1o0pEQ/iRH+9W+EObka5l9Re/1K3ZKmrIJaBftpw8ynvq9sjsnR6mr4GgWGPaVkk32ywNB8MFAS0ZgDgoP2l3cKGZyKH7DifPQsO27EjulMmZHwsBdk4yrPv0Ngmz5Mg35UzkIDEqE7m/l5u27CJ5Jo5jdvio57p0DTI1Rkbr/UpsjlnWwrsq7k/bhRWbES9qXxrsI5rD3wsd1EXH4eoxyDNb4X0IkR8oD4UdGQ6JK/IZfY9hK7D0OpGatK150ftvnqabIkExve4+qdZXVIRIVYikSfbb0+2cAj4sOqr2A/TuSLwlDFLIHj1INFB4gM7qCnPQYJ4SwH86HFiBtM7tRNzT6HUNWm/qhe4tqQRYtJSH1w0kOyMXLP5yNLX57AvVzdcvURvY41DV2BgDwM8NKzSO4qNFwGs5sfyvj6uRQW21xGT7C3EHlE1QQK!
 f9sRdRnRmaVHyMOLnRK0aaPsDWhwerO6Wsz2Vm3UJ4Vvgaf9ysA08UvSzcU7mO!
 wbPTRciB
MNrx6q5+XIN7xTOYKPsPHkMRrDlyEPojIgnAUNISAhfSPNZuPwhAC5+OiKQV674GntSTOQ1X+VRRX5DtOEd8I/Z4FzPr+vLl8pgoEEJQlNi7UAeaz0Cn5YH8NlCvk62AjVJ/og9dk1SNr0tXMgQjkETxkTsGFamOx8YdENKqTXXVcE6yZurvnyMdTKDmYnLsPeQgeq2Ngfik/vshyLvssewA3sBm9a8iEYwErXWbu/9ccFXDA7KNS76IJfLSYqPKb68M78/ip6v4z8195MyXrx6Nzpalw3KUeXA/YNcx/jMouX8J2F1nN4V0pvHi1Lwi5bl1kCvbQKQNQtpQyZ0MGjTkxzKHxzzIMtd6a3BR+N8UvSUCxq66mLVPsXRgXuB2oyKE/Q5QnQhrotHCEAwF7Gd5yRQBne+7GzTBGc/JGLhni8iIaMg2lw8blQ4sTqWwNB2eJfyOZ1da4AI+YFubcj86O3XEihRwcsn8UZWu9hdsZuS/S6Al+Ocee1JqeHEM1uc07IAoVL6TW0X2Z6VrobCEB1Gkm9iS419EXLzG9vbjidpz5ORB8yRXDFuouv4hXFSGj4WGj9uew52bcyr+WbtlmBBL1/79E78twZsrVSZ9v/drLqq1Cxr/GIu386pdCfgl0AdZeqwXYuU+3dA5iYQDi1CLRZB9D8pMQovAJE4o/HG54lrmHQ1OckVQ6D9Bqr4Pb0yvCcVozXvDgvPcZnSZT3O1L2pIu0FVWbN5izTR3Yk0zWdGCiyGDjnbH7rs9A5PRsahpaoqjemLHePL12rsJnhcmFBx9sEeXkJQHEWBVot+GphFrMLmJ3LurVJgGi1nIIJ8yBqSno+wU5/kPcgneUZfei3QBuXClVVDS4K4CLs15LWjKgP7DFN88Ojdx3HXHjJyfm8tSyToQEEonw0O2O3Vr1fJHg5cEn8p7yCFY36AqjhqtsFPyZESnUsjW2sIcRhlOcvGP0LDqWko81qW7VUjA!
 AI4Yi2eDWqCsN4OnrJ8UtkYBC07oNiUNhrwV96KPXj8hM1pn7Err56wnGym0dQ1sEUXDSKZV9vMrMNv+TKCtmN1JN0wQplx0fHDl7sUmCQsWgilELEAtVmPH8U/7xe2CHTKaAwveCbu7ebWTqLE2tTd1mmgG+9V60ptZa3SZ9EU3dpMy83cF3QUhfWZiHUh8c/jpSxnw39o8FrDcXuHjjlLJGni/dDHeMH/TVa+SLx6t/uGwZpdXSmvE4ApXMtxabHNTZO8DGbwbfjeD9kL8LA9R9Td9QfMDbYPSpUXqX7Q0HHQAdyPZIftsZ/ZphDrLyveCHsTwPWo/sGKIfQgv35mAgocuobVZqHUJngNpxNppmVbwnbw/We4pla+UZFQvM7gpBkJRAtHFwu+Wlf8/Nk87ZtgPwiNgq1gaLQLORnsRJ5okyS5v223sw=="/>
+</function_call>
+</request>
+</module>
+
+</batch>
+</ricci>



             reply	other threads:[~2007-07-23 18:47 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-23 18:47 rmccabe [this message]
  -- strict thread matches above, loose matches on Subject: below --
2006-11-20 23:15 [Cluster-devel] conga/ricci modules/cluster/ClusterModule.cpp rmccabe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070723184753.30858.qmail@sourceware.org \
    --to=rmccabe@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.