[Libguestfs] [PATCH v2 6/6] v2v: -i libvirt: If <vcpu> is missing, calculate it from CPU topology.

Richard W.M. Jones rjones at redhat.com
Fri Mar 17 11:34:02 UTC 2017


---
 v2v/parse_libvirt_xml.ml           | 18 ++++++++++++++++--
 v2v/test-v2v-print-source.expected |  2 +-
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/v2v/parse_libvirt_xml.ml b/v2v/parse_libvirt_xml.ml
index 6032c31..2dee274 100644
--- a/v2v/parse_libvirt_xml.ml
+++ b/v2v/parse_libvirt_xml.ml
@@ -50,7 +50,7 @@ let parse_libvirt_xml ?conn xml =
   let xpathctx = Xml.xpath_new_context doc in
   let xpath_string = xpath_string xpathctx
   and xpath_int = xpath_int xpathctx
-  and xpath_int_default = xpath_int_default xpathctx
+  (*and xpath_int_default = xpath_int_default xpathctx*)
   and xpath_int64_default = xpath_int64_default xpathctx in
 
   let hypervisor =
@@ -65,7 +65,6 @@ let parse_libvirt_xml ?conn xml =
     | Some s -> s in
   let memory = xpath_int64_default "/domain/memory/text()" (1024L *^ 1024L) in
   let memory = memory *^ 1024L in
-  let vcpu = xpath_int_default "/domain/vcpu/text()" 1 in
 
   let cpu_vendor = xpath_string "/domain/cpu/vendor/text()" in
   let cpu_model = xpath_string "/domain/cpu/model/text()" in
@@ -73,6 +72,21 @@ let parse_libvirt_xml ?conn xml =
   let cpu_cores = xpath_int "/domain/cpu/topology/@cores" in
   let cpu_threads = xpath_int "/domain/cpu/topology/@threads" in
 
+  (* Get the <vcpu> field from the input XML.  If not set then
+   * try calculating it from the <cpu> <topology> node.  If that's
+   * not set either, then assume 1 vCPU.
+   *)
+  let vcpu = xpath_int "/domain/vcpu/text()" in
+  let vcpu =
+    match vcpu, cpu_sockets, cpu_cores, cpu_threads with
+    | Some vcpu, _,    _,    _    -> vcpu
+    | None,      None, None, None -> 1
+    | None,      _,    _,    _    ->
+       let sockets = match cpu_sockets with None -> 1 | Some v -> v in
+       let cores = match cpu_cores with None -> 1 | Some v -> v in
+       let threads = match cpu_threads with None -> 1 | Some v -> v in
+       sockets * cores * threads in
+
   let features =
     let features = ref [] in
     let obj = Xml.xpath_eval_expression xpathctx "/domain/features/*" in
diff --git a/v2v/test-v2v-print-source.expected b/v2v/test-v2v-print-source.expected
index 6e78aad..df40ec9 100644
--- a/v2v/test-v2v-print-source.expected
+++ b/v2v/test-v2v-print-source.expected
@@ -1,7 +1,7 @@
     source name: windows
 hypervisor type: kvm
          memory: 1073741824 (bytes)
-       nr vCPUs: 1
+       nr vCPUs: 64
      CPU vendor: Intel
       CPU model: Broadwell
    CPU topology: sockets: 4 cores/socket: 8 threads/core: 2
-- 
2.10.2




More information about the Libguestfs mailing list