--- v2v/parse_libvirt_xml.ml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/v2v/parse_libvirt_xml.ml b/v2v/parse_libvirt_xml.ml index 6032c31..fb895e4 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 -- 2.10.2