Daniel Veillard wrote:
On Thu, Apr 20, 2006 at 04:24:28PM -0600, Jim Fehlig wrote:
FYI,
I have managed to get one of the LTC providers (Xen_ComputerSystem)
working on SLES using openwbem cimom, the xm shim, and libvirt. The
following changes were made:
libvirt
- changed xend_parse_sexp_desc() to not fail if kernel not found. sexp
from xend does not contain kernel for domain 0.
Makes sense, could you send that patch ?
thanks,
Daniel
Attached.
Jim
Index: xend_internal.c
===================================================================
RCS file: /data/cvs/libvirt/src/xend_internal.c,v
retrieving revision 1.24
diff -u -r1.24 xend_internal.c
--- xend_internal.c 20 Apr 2006 14:28:01 -0000 1.24
+++ xend_internal.c 21 Apr 2006 18:02:22 -0000
@@ -1350,28 +1350,30 @@
tmp = sexpr_node(root, "domain/bootloader");
if (tmp != NULL)
virBufferVSprintf(&buf, " <bootloader>%s</bootloader>\n", tmp);
- tmp = sexpr_node(root, "domain/image/linux/kernel");
- if (tmp == NULL) {
- /*
- * TODO: we will need some fallback here for other guest OSes
- */
- virXendError(NULL, VIR_ERR_INTERNAL_ERROR,
- "domain informations incomplete, missing kernel");
- goto error;
+ if (sexpr_lookup(root, "domain/image")) {
+ tmp = sexpr_node(root, "domain/image/linux/kernel");
+ if (tmp == NULL) {
+ /*
+ * TODO: we will need some fallback here for other guest OSes
+ */
+ virXendError(NULL, VIR_ERR_INTERNAL_ERROR,
+ "domain informations incomplete, missing kernel");
+ goto error;
+ }
+ virBufferAdd(&buf, " <os>\n", 7);
+ virBufferVSprintf(&buf, " <type>linux</type>\n");
+ virBufferVSprintf(&buf, " <kernel>%s</kernel>\n", tmp);
+ tmp = sexpr_node(root, "domain/image/linux/ramdisk");
+ if ((tmp != NULL) && (tmp[0] != 0))
+ virBufferVSprintf(&buf, " <initrd>%s</initrd>\n", tmp);
+ tmp = sexpr_node(root, "domain/image/linux/root");
+ if ((tmp != NULL) && (tmp[0] != 0))
+ virBufferVSprintf(&buf, " <root>%s</root>\n", tmp);
+ tmp = sexpr_node(root, "domain/image/linux/args");
+ if ((tmp != NULL) && (tmp[0] != 0))
+ virBufferVSprintf(&buf, " <cmdline>%s</cmdline>\n", tmp);
+ virBufferAdd(&buf, " </os>\n", 8);
}
- virBufferAdd(&buf, " <os>\n", 7);
- virBufferVSprintf(&buf, " <type>linux</type>\n");
- virBufferVSprintf(&buf, " <kernel>%s</kernel>\n", tmp);
- tmp = sexpr_node(root, "domain/image/linux/ramdisk");
- if ((tmp != NULL) && (tmp[0] != 0))
- virBufferVSprintf(&buf, " <initrd>%s</initrd>\n", tmp);
- tmp = sexpr_node(root, "domain/image/linux/root");
- if ((tmp != NULL) && (tmp[0] != 0))
- virBufferVSprintf(&buf, " <root>%s</root>\n", tmp);
- tmp = sexpr_node(root, "domain/image/linux/args");
- if ((tmp != NULL) && (tmp[0] != 0))
- virBufferVSprintf(&buf, " <cmdline>%s</cmdline>\n", tmp);
- virBufferAdd(&buf, " </os>\n", 8);
virBufferVSprintf(&buf, " <memory>%d</memory>\n",
(int) (sexpr_u64(root, "domain/maxmem") << 10));
virBufferVSprintf(&buf, " <vcpu>%d</vcpu>\n",