diff --git a/common/mltools/xpath_helpers.ml b/common/mltools/xpath_helpers.ml index 05fad89a4..3afee8b21 100644 --- a/common/mltools/xpath_helpers.ml +++ b/common/mltools/xpath_helpers.ml @@ -40,15 +40,3 @@ let xpath_eval parsefn xpathctx expr = let xpath_string = xpath_eval identity let xpath_int = xpath_eval int_of_string let xpath_int64 = xpath_eval Int64.of_string - -(* Parse an xpath expression and return a string/int; if the expression - * doesn't match, return the default. - *) -let xpath_eval_default parsefn xpath expr default = - match xpath_eval parsefn xpath expr with - | None -> default - | Some s -> s - -let xpath_string_default = xpath_eval_default identity -let xpath_int_default = xpath_eval_default int_of_string -let xpath_int64_default = xpath_eval_default Int64.of_string diff --git a/common/mltools/xpath_helpers.mli b/common/mltools/xpath_helpers.mli index 7434ba645..3a8190b05 100644 --- a/common/mltools/xpath_helpers.mli +++ b/common/mltools/xpath_helpers.mli @@ -25,9 +25,3 @@ val xpath_int : Xml.xpathctx -> string -> int option val xpath_int64 : Xml.xpathctx -> string -> int64 option (** Parse an xpath expression and return a string/int. Returns [Some v], or [None] if the expression doesn't match. *) - -val xpath_string_default : Xml.xpathctx -> string -> string -> string -val xpath_int_default : Xml.xpathctx -> string -> int -> int -val xpath_int64_default : Xml.xpathctx -> string -> int64 -> int64 -(** Parse an xpath expression and return a string/int; if the expression - doesn't match, return the default. *) diff --git a/v2v/copy_to_local.ml b/v2v/copy_to_local.ml index d92ad0f88..98aafbd87 100644 --- a/v2v/copy_to_local.ml +++ b/v2v/copy_to_local.ml @@ -243,14 +243,14 @@ and parse_libvirt_xml guest_name xml = let xpathctx = Xml.xpath_new_context doc in Xml.xpath_register_ns xpathctx "vmware" "http://libvirt.org/schemas/domain/vmware/1.0"; - let xpath_string = xpath_string xpathctx - and xpath_string_default = xpath_string_default xpathctx in + let xpath_string = xpath_string xpathctx in (* Get the dcpath, only present for libvirt >= 1.2.20 so use a * sensible default for older versions. *) let dcpath = - xpath_string_default "/domain/vmware:datacenterpath" "ha-datacenter" in + Option.default "ha-datacenter" + (xpath_string "/domain/vmware:datacenterpath") in (* Parse the disks. *) let get_disks, add_disk = diff --git a/v2v/parse_libvirt_xml.ml b/v2v/parse_libvirt_xml.ml index d81717b9d..d55a5d95e 100644 --- a/v2v/parse_libvirt_xml.ml +++ b/v2v/parse_libvirt_xml.ml @@ -77,10 +77,8 @@ let parse_libvirt_xml ?conn xml = let doc = Xml.parse_memory xml in let xpathctx = Xml.xpath_new_context doc in let xpath_string = xpath_string xpathctx - and xpath_string_default = xpath_string_default xpathctx and xpath_int = xpath_int xpathctx - (*and xpath_int_default = xpath_int_default xpathctx*) - and xpath_int64_default = xpath_int64_default xpathctx in + and xpath_int64 = xpath_int64 xpathctx in let hypervisor = match xpath_string "/domain/@type" with @@ -92,7 +90,8 @@ let parse_libvirt_xml ?conn xml = | None | Some "" -> error (f_"in the libvirt XML metadata, is missing or empty") | Some s -> s in - let memory = xpath_int64_default "/domain/memory/text()" (1024L *^ 1024L) in + let memory = + Option.default (1024L *^ 1024L) (xpath_int64 "/domain/memory/text()") in let memory = memory *^ 1024L in let cpu_vendor = xpath_string "/domain/cpu/vendor/text()" in @@ -317,7 +316,7 @@ let parse_libvirt_xml ?conn xml = (* This is for testing curl, eg for testing VMware conversions * without needing VMware around. *) - let path = xpath_string_default "source/@name" "" in + let path = Option.default "" (xpath_string "source/@name") in let qemu_uri = create_curl_qemu_uri driver host port path in add_disk qemu_uri format controller P_dont_rewrite | Some protocol, _, _ -> diff --git a/v2v/parse_ovf_from_ova.ml b/v2v/parse_ovf_from_ova.ml index e3518e30d..fe8228dcc 100644 --- a/v2v/parse_ovf_from_ova.ml +++ b/v2v/parse_ovf_from_ova.ml @@ -52,9 +52,7 @@ let parse_ovf_from_ova ovf_filename = let xpath_string = xpath_string xpathctx and xpath_int = xpath_int xpathctx - and xpath_string_default = xpath_string_default xpathctx - and xpath_int_default = xpath_int_default xpathctx - and xpath_int64_default = xpath_int64_default xpathctx in + and xpath_int64 = xpath_int64 xpathctx in let rec parse_top () = (* Search for vm name. *) @@ -64,11 +62,11 @@ let parse_ovf_from_ova ovf_filename = | Some _ as name -> name in (* Search for memory. *) - let memory = xpath_int64_default "/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/ovf:Item[rasd:ResourceType/text()=4]/rasd:VirtualQuantity/text()" (1024L *^ 1024L) in + let memory = Option.default (1024L *^ 1024L) (xpath_int64 "/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/ovf:Item[rasd:ResourceType/text()=4]/rasd:VirtualQuantity/text()") in let memory = memory *^ 1024L *^ 1024L in (* Search for number of vCPUs. *) - let vcpu = xpath_int_default "/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/ovf:Item[rasd:ResourceType/text()=3]/rasd:VirtualQuantity/text()" 1 in + let vcpu = Option.default 1 (xpath_int "/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/ovf:Item[rasd:ResourceType/text()=3]/rasd:VirtualQuantity/text()") in (* CPU topology. coresPerSocket is a VMware proprietary extension. * I couldn't find out how hyperthreads is specified in the OVF. @@ -91,7 +89,7 @@ let parse_ovf_from_ova ovf_filename = Some sockets, Some cores_per_socket in (* BIOS or EFI firmware? *) - let firmware = xpath_string_default "/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/vmw:Config[@vmw:key=\"firmware\"]/@vmw:value" "bios" in + let firmware = Option.default "bios" (xpath_string "/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/vmw:Config[@vmw:key=\"firmware\"]/@vmw:value") in let firmware = match firmware with | "bios" -> BIOS @@ -141,7 +139,8 @@ let parse_ovf_from_ova ovf_filename = | Some id -> parent_controller id in Xml.xpathctx_set_current_context xpathctx n; - let file_id = xpath_string_default "rasd:HostResource/text()" "" in + let file_id = + Option.default "" (xpath_string "rasd:HostResource/text()") in let rex = PCRE.compile "^(?:ovf:)?/disk/(.*)" in if PCRE.matches rex file_id then ( (* Chase the references through to the actual file name. *) @@ -231,7 +230,8 @@ let parse_ovf_from_ova ovf_filename = let n = Xml.xpathobj_node obj i in Xml.xpathctx_set_current_context xpathctx n; let vnet = - xpath_string_default "rasd:ElementName/text()" (sprintf"eth%d" i) in + Option.default (sprintf"eth%d" i) + (xpath_string "rasd:ElementName/text()") in let nic = { s_mac = None; s_nic_model = None;