[Pkg-libvirt-commits] [libguestfs] 140/165: v2v: Allow relative paths to appear in -i libvirtxml input.

Hilko Bengen bengen at moszumanska.debian.org
Sat Aug 30 08:25:23 UTC 2014


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to branch experimental
in repository libguestfs.

commit 27e1b6ca8b39eace5fb7162af4e4ba16c05d0b34
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Wed Jun 18 14:06:50 2014 +0100

    v2v: Allow relative paths to appear in -i libvirtxml input.
    
    When writing libvirt XML by hand, or for tests, this is
    immensely useful.
---
 mllib/common_utils.ml |  4 ++++
 v2v/source_libvirt.ml | 28 ++++++++++++++++++++++++----
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/mllib/common_utils.ml b/mllib/common_utils.ml
index 1aa81fb..60e3812 100644
--- a/mllib/common_utils.ml
+++ b/mllib/common_utils.ml
@@ -458,3 +458,7 @@ let is_char_device file =
 let is_directory path =
   try Sys.is_directory path
   with Sys_error _ -> false
+
+let absolute_path path =
+  if not (Filename.is_relative path) then path
+  else Sys.getcwd () // path
diff --git a/v2v/source_libvirt.ml b/v2v/source_libvirt.ml
index 3e252ed..245e0d2 100644
--- a/v2v/source_libvirt.ml
+++ b/v2v/source_libvirt.ml
@@ -24,7 +24,24 @@ open Common_utils
 open Types
 open Utils
 
-let create_xml xml =
+let create_xml ?dir xml =
+  (* When reading libvirt XML from a file (-i libvirtxml) we allow
+   * paths to disk images in the libvirt XML to be relative.  Relative
+   * paths are in fact not permitted in real libvirt XML, but they are
+   * very useful when dealing with test images or when writing the XML
+   * by hand.
+   *)
+  let absolute_path_of_disk path =
+    if not (Filename.is_relative path) then path
+    else (
+      match dir with
+      | None ->
+        error (f_"libvirt returned a non-absolute path in the XML (%s)") path
+      | Some dir ->
+        dir // path
+    )
+  in
+
   let doc = Xml.parse_memory xml in
   let xpathctx = Xml.xpath_new_context doc in
 
@@ -87,10 +104,12 @@ let create_xml xml =
       match xpath_to_string "@type" "" with
       | "block" ->
         let path = xpath_to_string "source/@dev" "" in
-        if path <> "" then disks := (path, format) :: !disks
+        if path <> "" then
+          disks := (absolute_path_of_disk path, format) :: !disks
       | "file" ->
         let path = xpath_to_string "source/@file" "" in
-        if path <> "" then disks := (path, format) :: !disks
+        if path <> "" then
+          disks := (absolute_path_of_disk path, format) :: !disks
       | "network" ->
         (* We only handle <source protocol="nbd"> here, and that is
          * intended only for virt-p2v.  Any other network disk is
@@ -137,7 +156,8 @@ let create_xml xml =
 
 let create_from_xml file =
   let xml = read_whole_file file in
-  create_xml xml
+  let dir = Filename.dirname (absolute_path file) in
+  create_xml ~dir xml
 
 let create libvirt_uri guest =
   let cmd =

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list