[Libguestfs] [PATCH 2/4] v2v: domainxml: add vol_dumpxml
Richard W.M. Jones
rjones at redhat.com
Tue Apr 14 16:15:43 UTC 2015
On Tue, Apr 14, 2015 at 05:05:40PM +0200, Pino Toscano wrote:
> Add a new vol_dumpxml to get the XML dump of a pool's volume.
> ---
> v2v/domainxml-c.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> v2v/domainxml.ml | 1 +
> v2v/domainxml.mli | 6 +++++
> 3 files changed, 75 insertions(+)
>
> diff --git a/v2v/domainxml-c.c b/v2v/domainxml-c.c
> index 077c153..88fb6d5 100644
> --- a/v2v/domainxml-c.c
> +++ b/v2v/domainxml-c.c
> @@ -304,6 +304,68 @@ v2v_pool_dumpxml (value connv, value poolnamev)
> CAMLreturn (retv);
> }
>
> +value
> +v2v_vol_dumpxml (value connv, value poolnamev, value volnamev)
> +{
> + CAMLparam3 (connv, poolnamev, volnamev);
> + CAMLlocal1 (retv);
> + const char *conn_uri = NULL;
> + const char *poolname;
> + const char *volname;
> + /* We have to assemble the error on the stack because a dynamic
> + * string couldn't be freed.
> + */
> + char errmsg[256];
> + virErrorPtr err;
> + virConnectPtr conn;
> + virStoragePoolPtr pool;
> + virStorageVolPtr vol;
> + char *xml;
> +
> + if (connv != Val_int (0))
> + conn_uri = String_val (Field (connv, 0)); /* Some conn */
> +
> + /* Look up the pool. */
> + poolname = String_val (poolnamev);
> +
> + pool = connect_and_load_pool (conn_uri, poolname);
> + conn = virStoragePoolGetConnect (pool);
> +
> + /* Look up the volume. */
> + volname = String_val (volnamev);
> +
> + vol = virStorageVolLookupByName (pool, volname);
> +
> + if (!vol) {
> + err = virGetLastError ();
> + snprintf (errmsg, sizeof errmsg,
> + _("cannot find libvirt volume '%s': %s"), volname, err->message);
> + virStoragePoolFree (pool);
> + virConnectClose (conn);
> + caml_invalid_argument (errmsg);
> + }
> +
> + xml = virStorageVolGetXMLDesc (vol, 0);
> + if (xml == NULL) {
> + err = virGetLastError ();
> + snprintf (errmsg, sizeof errmsg,
> + _("cannot fetch XML description of volume '%s': %s"),
> + volname, err->message);
> + virStorageVolFree (vol);
> + virStoragePoolFree (pool);
> + virConnectClose (conn);
> + caml_invalid_argument (errmsg);
> + }
> + virStorageVolFree (vol);
> + virStoragePoolFree (pool);
> + virConnectClose (conn);
> +
> + retv = caml_copy_string (xml);
> + free (xml);
> +
> + CAMLreturn (retv);
> +}
> +
> #else /* !HAVE_LIBVIRT */
>
> value
> @@ -318,4 +380,10 @@ v2v_pool_dumpxml (value connv, value poolv)
> caml_invalid_argument ("virt-v2v was compiled without libvirt support");
> }
>
> +value
> +v2v_vol_dumpxml (value connv, value poolnamev, value volnamev)
> +{
> + caml_invalid_argument ("virt-v2v was compiled without libvirt support");
> +}
> +
> #endif /* !HAVE_LIBVIRT */
> diff --git a/v2v/domainxml.ml b/v2v/domainxml.ml
> index 8782ea1..7dbfcbd 100644
> --- a/v2v/domainxml.ml
> +++ b/v2v/domainxml.ml
> @@ -20,3 +20,4 @@
>
> external dumpxml : ?password:string -> ?conn:string -> string -> string = "v2v_dumpxml"
> external pool_dumpxml : ?conn:string -> string -> string = "v2v_pool_dumpxml"
> +external vol_dumpxml : ?conn:string -> string -> string -> string = "v2v_vol_dumpxml"
> diff --git a/v2v/domainxml.mli b/v2v/domainxml.mli
> index 47a91cf..7008769 100644
> --- a/v2v/domainxml.mli
> +++ b/v2v/domainxml.mli
> @@ -32,3 +32,9 @@ val pool_dumpxml : ?conn:string -> string -> string
> (** [pool_dumpxml ?conn pool] returns the libvirt XML of pool [pool].
> The optional [?conn] parameter is the libvirt connection URI.
> [pool] may be a pool name or UUID. *)
> +
> +val vol_dumpxml : ?conn:string -> string -> string -> string
> +(** [vol_dumpxml ?conn pool vol] returns the libvirt XML of volume [vol],
> + which is part of the pool [pool].
> + The optional [?conn] parameter is the libvirt connection URI.
> + [pool] may be a pool name or UUID. *)
> --
ACK.
Same comment applies w.r.t. String_val however.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org
More information about the Libguestfs
mailing list