cluster: RHEL5 - fence: Make fence_xvmd detect Xen or KVM

Lon Hohberger lon@fedoraproject.org
Thu Apr 9 20:42:00 GMT 2009


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=f4c13e8e1bb1c58d03f2cda7380a5173dea025f8
Commit:        f4c13e8e1bb1c58d03f2cda7380a5173dea025f8
Parent:        a72a13f8acd9747fc63299ffd265e3176fb95b52
Author:        Lon Hohberger <lhh@redhat.com>
AuthorDate:    Thu Apr 9 16:17:29 2009 -0400
Committer:     Lon Hohberger <lhh@redhat.com>
CommitterDate: Thu Apr 9 16:17:29 2009 -0400

fence: Make fence_xvmd detect Xen or KVM

Signed-off-by: Lon Hohberger <lhh@redhat.com>
---
 fence/agents/xvm/fence_xvmd.c |   36 ++++++++++++++++++++++++++++++++++--
 fence/agents/xvm/options.c    |    2 +-
 2 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/fence/agents/xvm/fence_xvmd.c b/fence/agents/xvm/fence_xvmd.c
index 1ca9e53..3cba111 100644
--- a/fence/agents/xvm/fence_xvmd.c
+++ b/fence/agents/xvm/fence_xvmd.c
@@ -60,6 +60,38 @@ static int reload_key;
 
 int cleanup_xml(char *xmldesc, char **ret, size_t *retsz);
 
+
+static char *hypervisor_uris[] = {
+	"xen:///",
+	"qemu:///system",
+	NULL
+};
+
+
+virConnectPtr
+find_hypervisor(fence_xvm_args_t *args)
+{
+	virConnectPtr vp;
+	int x;
+
+	if (args->uri)
+		return virConnectOpen(args->uri);
+
+	for (x = 0; hypervisor_uris[x]; x++) {
+		vp = virConnectOpen(hypervisor_uris[x]);
+		if (vp)
+			break;
+	}
+
+	if (!vp)
+		return NULL;
+
+	args->uri = strdup(hypervisor_uris[x]);
+
+	return vp;
+}
+
+
 int
 connect_tcp(fence_req_t *req, fence_auth_type_t auth,
 	    void *key, size_t key_len)
@@ -598,7 +630,7 @@ xvmd_loop(cman_handle_t ch, void *h, int fd, fence_xvm_args_t *args,
 	virt_list_t *vl = NULL;
 	virt_state_t *dom = NULL;
 
-	vp = virConnectOpen(args->uri);
+	vp = find_hypervisor(args);
 	if (!vp)
 		perror("virConnectOpen");
 
@@ -655,7 +687,7 @@ xvmd_loop(cman_handle_t ch, void *h, int fd, fence_xvm_args_t *args,
 			continue;
 	
 		/* Request and/or timeout: open connection */
-		vp = virConnectOpen(args->uri);
+		vp = find_hypervisor(args);
 		if (!vp) {
 			printf("NOTICE: virConnectOpen(): %s; cannot fence!\n",
 			       strerror(errno));
diff --git a/fence/agents/xvm/options.c b/fence/agents/xvm/options.c
index 2c1b5be..0ba422d 100644
--- a/fence/agents/xvm/options.c
+++ b/fence/agents/xvm/options.c
@@ -422,7 +422,7 @@ args_init(fence_xvm_args_t *args)
 	args->addr = NULL;
 	args->domain = NULL;
 	args->key_file = strdup(DEFAULT_KEY_FILE);
-	args->uri = strdup(DEFAULT_HYPERVISOR_URI);
+	args->uri = NULL;
 	args->op = FENCE_REBOOT;
 	args->hash = DEFAULT_HASH;
 	args->auth = DEFAULT_AUTH;



More information about the Cluster-cvs mailing list