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