From a1f1129dc148639ed0b05b737157268d9b824a63 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 11 Apr 2022 11:01:46 +0100 Subject: [PATCH] output: Remove -o json mode This removes the -o json mode completely. Reviewed-by: Laszlo Ersek (cherry picked from commit 4e6b389b4e27c8d13e57fcaf777d96ad7e08650b) --- docs/virt-v2v.pod | 4 - output/Makefile.am | 51 +----- output/create_json.ml | 338 ----------------------------------- output/create_json.mli | 27 --- output/output_json.ml | 153 ---------------- output/output_json.mli | 21 --- output/var_expander.ml | 72 -------- output/var_expander.mli | 82 --------- output/var_expander_tests.ml | 113 ------------ tests/Makefile.am | 2 - tests/test-v2v-o-json.sh | 68 ------- v2v/v2v.ml | 7 +- 12 files changed, 5 insertions(+), 933 deletions(-) delete mode 100644 output/create_json.ml delete mode 100644 output/create_json.mli delete mode 100644 output/output_json.ml delete mode 100644 output/output_json.mli delete mode 100644 output/var_expander.ml delete mode 100644 output/var_expander.mli delete mode 100644 output/var_expander_tests.ml delete mode 100755 tests/test-v2v-o-json.sh diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod index 7ad22f00..912f1bc3 100644 --- a/docs/virt-v2v.pod +++ b/docs/virt-v2v.pod @@ -409,10 +409,6 @@ See L below. This is the same as I<-o local>. -=item B<-o> B - -This option is deprecated and will be removed in S. - =item B<-o> B Set the output method to I. This is the default. diff --git a/output/Makefile.am b/output/Makefile.am index 61caf68b..dd488549 100644 --- a/output/Makefile.am +++ b/output/Makefile.am @@ -39,18 +39,15 @@ EXTRA_DIST = \ rhv-upload-precheck.py \ rhv-upload-transfer.py \ rhv-upload-vmcheck.py \ - test-v2v-python-syntax.sh \ - var_expander_tests.ml + test-v2v-python-syntax.sh SOURCES_MLI = \ changeuid.mli \ - create_json.mli \ create_libvirt_xml.mli \ openstack_image_properties.mli \ output.mli \ output_disk.mli \ output_glance.mli \ - output_json.mli \ output_libvirt.mli \ output_null.mli \ output_openstack.mli \ @@ -66,14 +63,11 @@ SOURCES_MLI = \ output_rhv_upload_transfer_source.mli \ output_rhv_upload_vmcheck_source.mli \ python_script.mli \ - qemuopts.mli \ - var_expander.mli + qemuopts.mli SOURCES_ML = \ changeuid.ml \ python_script.ml \ - var_expander.ml \ - create_json.ml \ create_libvirt_xml.ml \ qemuopts.ml \ openstack_image_properties.ml \ @@ -87,7 +81,6 @@ SOURCES_ML = \ output.ml \ output_disk.ml \ output_glance.ml \ - output_json.ml \ output_libvirt.ml \ output_null.ml \ output_openstack.ml \ @@ -203,47 +196,9 @@ $(MLOUTPUT_CMA): $(OBJECTS) libmloutput.a $(OCAMLFIND) mklib $(OCAMLPACKAGES) \ $(OBJECTS) $(libmloutput_a_OBJECTS) -o mloutput -# Unit tests. -TESTS = -if HAVE_OCAML_PKG_OUNIT -TESTS += \ - var_expander_tests -check_PROGRAMS = \ - var_expander_tests -endif - -var_expander_tests_BOBJECTS = \ - var_expander.cmo \ - var_expander_tests.cmo -var_expander_tests_XOBJECTS = $(var_expander_tests_BOBJECTS:.cmo=.cmx) - -var_expander_tests_SOURCES = dummy.c -var_expander_tests_CPPFLAGS = $(virt_v2v_CPPFLAGS) -var_expander_tests_CFLAGS = $(virt_v2v_CFLAGS) - -if !HAVE_OCAMLOPT -# Can't call this var_expander_tests_OBJECTS because automake gets confused. -var_expander_tests_THEOBJECTS = $(var_expander_tests_BOBJECTS) -var_expander_tests.cmo: OCAMLPACKAGES += -package ounit2 -else -var_expander_tests_THEOBJECTS = $(var_expander_tests_XOBJECTS) -var_expander_tests.cmx: OCAMLPACKAGES += -package ounit2 -endif - -var_expander_tests_DEPENDENCIES = \ - $(var_expander_tests_THEOBJECTS) \ - $(top_builddir)/common/mlpcre/mlpcre.$(MLARCHIVE) \ - $(top_srcdir)/ocaml-link.sh -var_expander_tests_LINK = \ - $(top_srcdir)/ocaml-link.sh -cclib '$(OCAMLCLIBS)' -- \ - $(OCAMLFIND) $(BEST) $(OCAMLFLAGS) \ - $(OCAMLPACKAGES) -package ounit2 \ - $(OCAMLLINKFLAGS) \ - $(var_expander_tests_THEOBJECTS) -o $@ - # Unit tests. TESTS_ENVIRONMENT = $(top_builddir)/run --test -TESTS += test-v2v-python-syntax.sh +TESTS = test-v2v-python-syntax.sh # Dependencies. .depend: \ diff --git a/output/create_json.ml b/output/create_json.ml deleted file mode 100644 index cbc27fdc..00000000 --- a/output/create_json.ml +++ /dev/null @@ -1,338 +0,0 @@ -(* virt-v2v - * Copyright (C) 2019 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -open Std_utils -open C_utils -open Tools_utils - -open Types -open Utils - -module G = Guestfs - -let json_list_of_string_list = - List.map (fun x -> JSON.String x) - -let json_list_of_string_string_list = - List.map (fun (x, y) -> x, JSON.String y) - -let push_optional_string lst name = function - | None -> () - | Some v -> List.push_back lst (name, JSON.String v) - -let push_optional_int lst name = function - | None -> () - | Some v -> List.push_back lst (name, JSON.Int (Int64.of_int v)) - -let json_unknown_string = function - | "unknown" -> JSON.Null - | v -> JSON.String v - -let create_json_metadata source inspect - { guestcaps; target_buses; target_firmware; target_nics } - outdisk_name output_format output_name = - let doc = ref [ - "version", JSON.Int 1L; - "name", JSON.String output_name; - "memory", JSON.Int source.s_memory; - "vcpu", JSON.Int (Int64.of_int source.s_vcpu); - ] in - - (match source.s_genid with - | None -> () - | Some genid -> List.push_back doc ("genid", JSON.String genid) - ); - - if source.s_cpu_vendor <> None || source.s_cpu_model <> None || - source.s_cpu_topology <> None then ( - let cpu = ref [] in - - push_optional_string cpu "vendor" source.s_cpu_vendor; - push_optional_string cpu "model" source.s_cpu_model; - (match source.s_cpu_topology with - | None -> () - | Some { s_cpu_sockets; s_cpu_cores; s_cpu_threads } -> - let attrs = [ - "sockets", JSON.Int (Int64.of_int s_cpu_sockets); - "cores", JSON.Int (Int64.of_int s_cpu_cores); - "threads", JSON.Int (Int64.of_int s_cpu_threads); - ] in - List.push_back cpu ("topology", JSON.Dict attrs) - ); - - List.push_back doc ("cpu", JSON.Dict !cpu); - ); - - let firmware = - let firmware_type = - match target_firmware with - | TargetBIOS -> "bios" - | TargetUEFI -> "uefi" in - - let fw = ref [ - "type", JSON.String firmware_type; - ] in - - (match target_firmware with - | TargetBIOS -> () - | TargetUEFI -> - let uefi_firmware = find_uefi_firmware guestcaps.gcaps_arch in - let flags = - List.map ( - function - | Uefi.UEFI_FLAG_SECURE_BOOT_REQUIRED -> "secure_boot_required" - ) uefi_firmware.Uefi.flags in - - let uefi = ref [ - "code", JSON.String uefi_firmware.Uefi.code; - "vars", JSON.String uefi_firmware.Uefi.vars; - "flags", JSON.List (json_list_of_string_list flags); - ] in - - push_optional_string uefi "code-debug" uefi_firmware.Uefi.code_debug; - - List.push_back fw ("uefi", JSON.Dict !uefi) - ); - - !fw in - List.push_back doc ("firmware", JSON.Dict firmware); - - List.push_back doc ("features", - JSON.List (json_list_of_string_list source.s_features)); - - let machine = - match guestcaps.gcaps_machine with - | I440FX -> "pc" - | Q35 -> "q35" - | Virt -> "virt" in - List.push_back doc ("machine", JSON.String machine); - - let disks, removables = - let disks = ref [] - and removables = ref [] in - - let iter_bus bus_name drive_prefix i = function - | BusSlotEmpty -> () - | BusSlotDisk d -> - (* Find the corresponding target disk. *) - let outdisk = outdisk_name d.s_disk_id in - - let disk = [ - "dev", JSON.String (drive_prefix ^ drive_name i); - "bus", JSON.String bus_name; - "format", JSON.String output_format; - "file", JSON.String outdisk; - ] in - - List.push_back disks (JSON.Dict disk) - - | BusSlotRemovable { s_removable_type = CDROM } -> - let cdrom = [ - "type", JSON.String "cdrom"; - "dev", JSON.String (drive_prefix ^ drive_name i); - "bus", JSON.String bus_name; - ] in - - List.push_back removables (JSON.Dict cdrom) - - | BusSlotRemovable { s_removable_type = Floppy } -> - let floppy = [ - "type", JSON.String "floppy"; - "dev", JSON.String (drive_prefix ^ drive_name i); - ] in - - List.push_back removables (JSON.Dict floppy) - in - - Array.iteri (iter_bus "virtio" "vd") target_buses.target_virtio_blk_bus; - Array.iteri (iter_bus "ide" "hd") target_buses.target_ide_bus; - Array.iteri (iter_bus "scsi" "sd") target_buses.target_scsi_bus; - Array.iteri (iter_bus "floppy" "fd") target_buses.target_floppy_bus; - - !disks, !removables in - List.push_back doc ("disks", JSON.List disks); - List.push_back doc ("removables", JSON.List removables); - - let nics = - List.map ( - fun { s_mac = mac; s_vnet_type = vnet_type; s_nic_model = nic_model; - s_vnet = vnet; } -> - let vnet_type_str = - match vnet_type with - | Bridge -> "bridge" - | Network -> "network" in - - let nic = ref [ - "vnet", JSON.String vnet; - "vnet-type", JSON.String vnet_type_str; - ] in - - let nic_model_str = Option.map string_of_nic_model nic_model in - push_optional_string nic "model" nic_model_str; - - push_optional_string nic "mac" mac; - - JSON.Dict !nic - ) target_nics in - List.push_back doc ("nics", JSON.List nics); - - let guestcaps_dict = - let block_bus = - match guestcaps.gcaps_block_bus with - | Virtio_blk -> "virtio-blk" - | IDE -> "ide" in - let net_bus = - match guestcaps.gcaps_net_bus with - | Virtio_net -> "virtio-net" - | E1000 -> "e1000" - | RTL8139 -> "rtl8139" in - let video = "vga" in - let machine = - match guestcaps.gcaps_machine with - | I440FX -> "i440fx" - | Q35 -> "q35" - | Virt -> "virt" in - - [ - "block-bus", JSON.String block_bus; - "net-bus", JSON.String net_bus; - "video", JSON.String video; - "machine", JSON.String machine; - "arch", JSON.String guestcaps.gcaps_arch; - "virtio-rng", JSON.Bool guestcaps.gcaps_virtio_rng; - "virtio-balloon", JSON.Bool guestcaps.gcaps_virtio_balloon; - "isa-pvpanic", JSON.Bool guestcaps.gcaps_isa_pvpanic; - "virtio-socket", JSON.Bool guestcaps.gcaps_virtio_socket; - "acpi", JSON.Bool guestcaps.gcaps_acpi; - "virtio-1-0", JSON.Bool guestcaps.gcaps_virtio_1_0; - ] in - List.push_back doc ("guestcaps", JSON.Dict guestcaps_dict); - - (match source.s_sound with - | None -> () - | Some { s_sound_model = model } -> - let sound = [ - "model", JSON.String (string_of_source_sound_model model); - ] in - List.push_back doc ("sound", JSON.Dict sound) - ); - - (match source.s_display with - | None -> () - | Some d -> - let display_type = - match d.s_display_type with - | Window -> "window" - | VNC -> "vnc" - | Spice -> "spice" in - - let display = ref [ - "type", JSON.String display_type; - ] in - - push_optional_string display "keymap" d.s_keymap; - push_optional_string display "password" d.s_password; - - let listen = - match d.s_listen with - | LNoListen -> None - | LAddress address -> - Some [ - "type", JSON.String "address"; - "address", JSON.String address; - ] - | LNetwork network -> - Some [ - "type", JSON.String "network"; - "network", JSON.String network; - ] - | LSocket None -> - Some [ - "type", JSON.String "socket"; - "socket", JSON.Null; - ] - | LSocket (Some socket) -> - Some [ - "type", JSON.String "socket"; - "socket", JSON.String socket; - ] - | LNone -> - Some [ - "type", JSON.String "none"; - ] in - (match listen with - | None -> () - | Some l -> List.push_back display ("listen", JSON.Dict l) - ); - - push_optional_int display "port" d.s_port; - - List.push_back doc ("display", JSON.Dict !display) - ); - - let inspect_dict = - let apps = - List.map ( - fun { G.app2_name = name; app2_display_name = display_name; - app2_epoch = epoch; app2_version = version; - app2_release = release; app2_arch = arch; } -> - JSON.Dict [ - "name", JSON.String name; - "display-name", JSON.String display_name; - "epoch", JSON.Int (Int64.of_int32 epoch); - "version", JSON.String version; - "release", JSON.String release; - "arch", JSON.String arch; - ] - ) inspect.i_apps in - - let firmware_dict = - match inspect.i_firmware with - | I_BIOS -> - [ - "type", JSON.String "bios"; - ] - | I_UEFI devices -> - [ - "type", JSON.String "uefi"; - "devices", JSON.List (json_list_of_string_list devices); - ] in - - [ - "root", JSON.String inspect.i_root; - "type", JSON.String inspect.i_type; - "distro", json_unknown_string inspect.i_distro; - "osinfo", json_unknown_string inspect.i_osinfo; - "arch", JSON.String inspect.i_arch; - "major-version", JSON.Int (Int64.of_int inspect.i_major_version); - "minor-version", JSON.Int (Int64.of_int inspect.i_minor_version); - "package-format", json_unknown_string inspect.i_package_format; - "package-management", json_unknown_string inspect.i_package_management; - "product-name", json_unknown_string inspect.i_product_name; - "product-variant", json_unknown_string inspect.i_product_variant; - "mountpoints", JSON.Dict (json_list_of_string_string_list inspect.i_mountpoints); - "applications", JSON.List apps; - "windows-systemroot", JSON.String inspect.i_windows_systemroot; - "windows-software-hive", JSON.String inspect.i_windows_software_hive; - "windows-system-hive", JSON.String inspect.i_windows_system_hive; - "windows-current-control-set", JSON.String inspect.i_windows_current_control_set; - "firmware", JSON.Dict firmware_dict; - ] in - List.push_back doc ("inspect", JSON.Dict inspect_dict); - - !doc diff --git a/output/create_json.mli b/output/create_json.mli deleted file mode 100644 index 97086ff5..00000000 --- a/output/create_json.mli +++ /dev/null @@ -1,27 +0,0 @@ -(* virt-v2v - * Copyright (C) 2019 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -(** Create JSON metadata for [-o json]. *) - -val create_json_metadata : Types.source -> Types.inspect -> - Types.target_meta -> - (int -> string) -> string -> string -> - JSON.doc -(** [create_json_metadata source targets outdisk_map output_format output_name] - creates the JSON with the majority of the data that virt-v2v used for the - conversion. *) diff --git a/output/output_json.ml b/output/output_json.ml deleted file mode 100644 index 6e81b639..00000000 --- a/output/output_json.ml +++ /dev/null @@ -1,153 +0,0 @@ -(* virt-v2v - * Copyright (C) 2009-2021 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -open Printf -open Unix - -open C_utils -open Std_utils -open Tools_utils -open Common_gettext.Gettext - -open Types -open Utils - -open Output - -module Json = struct - type poptions = string * Types.output_allocation * string * string * string - - type t = unit - - let to_string options = - "-o json" ^ - match options.output_storage with - | Some os -> " -os " ^ os - | None -> "" - - let query_output_options () = - printf (f_"Output options (-oo) which can be used with -o json: - - -oo json-disks-pattern=PATTERN Pattern for the disks. -") - - let parse_options options source = - if options.output_conn <> None then - error_option_cannot_be_used_in_output_mode "json" "-oc"; - if options.output_password <> None then - error_option_cannot_be_used_in_output_mode "json" "-op"; - - let known_pattern_variables = ["DiskNo"; "DiskDeviceName"; "GuestName"] in - let json_disks_pattern = ref None in - List.iter ( - fun (k, v) -> - match k with - | "json-disks-pattern" -> - if !json_disks_pattern <> None then - error (f_"-o json: -oo json-disks-pattern set more than once"); - let vars = - try Var_expander.scan_variables v - with Var_expander.Invalid_variable var -> - error (f_"-o json: -oo json-disks-pattern: invalid variable %%{%s}") - var in - List.iter ( - fun var -> - if not (List.mem var known_pattern_variables) then - error (f_"-o json: -oo json-disks-pattern: unhandled variable %%{%s}") - var - ) vars; - json_disks_pattern := Some v - | k -> - error (f_"-o json: unknown output option ‘-oo %s’") k - ) options.output_options; - - let json_disks_pattern = - Option.default "%{GuestName}-%{DiskDeviceName}" !json_disks_pattern in - - (* -os must be set to a directory. *) - let output_storage = - match options.output_storage with - | None -> - error (f_"-o json: output directory was not specified, use '-os /dir'") - | Some d when not (is_directory d) -> - error (f_"-os %s: output directory does not exist or is not a directory") d - | Some d -> d in - - let output_name = Option.default source.s_name options.output_name in - - (json_disks_pattern, - options.output_alloc, options.output_format, output_name, output_storage) - - let rec setup dir options source = - let disks = get_disks dir in - let json_disks_pattern, - output_alloc, output_format, output_name, - output_storage = options in - - List.iter ( - fun (i, size) -> - let socket = sprintf "%s/out%d" dir i in - On_exit.unlink socket; - - (* Create the actual output disk. *) - let outdisk = json_path output_storage output_name - json_disks_pattern i in - mkdir_p (Filename.dirname outdisk) 0o755; - - output_to_local_file output_alloc output_format outdisk size socket - ) disks - - (* For -o json, return the output disk name of the i'th disk. *) - and json_path os output_name json_disks_pattern i = - let outname = - let vars_fn = function - | "DiskNo" -> Some (string_of_int (i+1)) - | "DiskDeviceName" -> Some (sprintf "sd%s" (drive_name i)) - | "GuestName" -> Some output_name - | _ -> assert false - in - Var_expander.replace_fn json_disks_pattern vars_fn in - let outdisk = os // outname in - let outdisk = absolute_path outdisk in - outdisk - - let finalize dir options () source inspect target_meta = - let json_disks_pattern, - output_alloc, output_format, output_name, output_storage = options in - - let doc = - Create_json.create_json_metadata source inspect target_meta - (json_path output_storage output_name json_disks_pattern) - output_format output_name in - let doc_string = JSON.string_of_doc ~fmt:JSON.Indented doc in - - if verbose () then ( - eprintf "resulting JSON:\n"; - output_string Stdlib.stderr doc_string; - eprintf "\n\n%!"; - ); - - let file = output_storage // output_name ^ ".json" in - with_open_out file ( - fun chan -> - output_string chan doc_string; - output_char chan '\n' - ) - - let request_size = None -end diff --git a/output/output_json.mli b/output/output_json.mli deleted file mode 100644 index 00786ef7..00000000 --- a/output/output_json.mli +++ /dev/null @@ -1,21 +0,0 @@ -(* virt-v2v - * Copyright (C) 2009-2021 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -(** [-o json] output mode. *) - -module Json : Output.OUTPUT diff --git a/output/var_expander.ml b/output/var_expander.ml deleted file mode 100644 index 24b9bafe..00000000 --- a/output/var_expander.ml +++ /dev/null @@ -1,72 +0,0 @@ -(* virt-v2v - * Copyright (C) 2019 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -open Std_utils - -exception Invalid_variable of string - -let var_re = PCRE.compile "(^|[^%])%{([^}]+)}" - -let check_variable var = - String.iter ( - function - | '0'..'9' - | 'a'..'z' - | 'A'..'Z' - | '_' - | '-' -> () - | _ -> raise (Invalid_variable var) - ) var - -let scan_variables str = - let res = ref [] in - let offset = ref 0 in - while PCRE.matches ~offset:!offset var_re str; do - let var = PCRE.sub 2 in - check_variable var; - let _, end_ = PCRE.subi 0 in - List.push_back res var; - offset := end_ - done; - List.remove_duplicates !res - -let replace_fn str fn = - let res = ref str in - let offset = ref 0 in - while PCRE.matches ~offset:!offset var_re !res; do - let var = PCRE.sub 2 in - check_variable var; - let start_, end_ = PCRE.subi 0 in - match fn var with - | None -> - offset := end_ - | Some text -> - let prefix_len = - let prefix_start, prefix_end = PCRE.subi 1 in - prefix_end - prefix_start in - res := (String.sub !res 0 (start_ + prefix_len)) ^ text ^ (String.sub !res end_ (String.length !res - end_)); - offset := start_ + prefix_len + String.length text - done; - !res - -let replace_list str lst = - let fn var = - try Some (List.assoc var lst) - with Not_found -> None - in - replace_fn str fn diff --git a/output/var_expander.mli b/output/var_expander.mli deleted file mode 100644 index 80aa33c2..00000000 --- a/output/var_expander.mli +++ /dev/null @@ -1,82 +0,0 @@ -(* virt-v2v - * Copyright (C) 2019 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -(** Simple variable expander. - - This module provides the support to expand variables in strings, - specified in the form of [%{name}]. - - For example: - -{v -let str = "variable-%{INDEX} in %{INDEX} replaced %{INDEX} times" -let index = ref 0 -let fn = function - | "INDEX" -> - incr index; - Some (string_of_int !index) - | _ -> None -in -let str = Var_expander.replace_fn str fn -(* now str is "variable-1 in 2 replaced 3 times" *) -v} - - The names of variables can contain only ASCII letters (uppercase, - and lowercase), digits, underscores, and dashes. - - The replacement is done in a single pass: this means that if a - variable is replaced with the text of a variable, that new text - is kept as is in the final output. In practice: - -{v -let str = "%{VAR}" -let str = Var_expander.replace_list str [("VAR", "%{VAR}")] -(* now str is "%{VAR}" *) -v} -*) - -exception Invalid_variable of string -(** Invalid variable name error. - - In case a variable contains characters not allowed, then this - exception with the actual unacceptable variable. *) - -val scan_variables : string -> string list -(** Scan the pattern string for all the variables available. - - This can raise {!Invalid_variable} in case there are invalid - variable names. *) - -val replace_fn : string -> (string -> string option) -> string -(** Replaces a string expanding all the variables. - - The replacement function specify how a variable is replaced; - if [None] is returned, then that variable is not replaced. - - This can raise {!Invalid_variable} in case there are invalid - variable names. *) - -val replace_list : string -> (string * string) list -> string -(** Replaces a string expanding all the variables. - - The replacement list specify how a variable is replaced; - if it is not specified in the list, then that variable is not - replaced. - - This can raise {!Invalid_variable} in case there are invalid - variable names. *) diff --git a/output/var_expander_tests.ml b/output/var_expander_tests.ml deleted file mode 100644 index 35b62836..00000000 --- a/output/var_expander_tests.ml +++ /dev/null @@ -1,113 +0,0 @@ -(* virt-v2v - * Copyright (C) 2019 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -open Printf -open OUnit - -open Std_utils - -let assert_equal_string = assert_equal ~printer:identity -let assert_equal_stringlist = assert_equal ~printer:(fun x -> "(" ^ (String.escaped (String.concat "," x)) ^ ")") - -let replace_none_fn _ = None -let replace_empty_fn _ = Some "" - -let test_no_replacement () = - assert_equal_string "" (Var_expander.replace_fn "" replace_none_fn); - assert_equal_string "x" (Var_expander.replace_fn "x" replace_none_fn); - assert_equal_string "%{}" (Var_expander.replace_fn "%{}" replace_none_fn); - assert_equal_string "%{EMPTY}" (Var_expander.replace_fn "%{EMPTY}" replace_none_fn); - assert_equal_string "%{EMPTY} %{no}" (Var_expander.replace_fn "%{EMPTY} %{no}" replace_none_fn); - assert_equal_string "a %{EMPTY} b" (Var_expander.replace_fn "a %{EMPTY} b" replace_none_fn); - () - -let test_replacements () = - assert_equal_string "" (Var_expander.replace_fn "%{EMPTY}" replace_empty_fn); - assert_equal_string "x " (Var_expander.replace_fn "x %{EMPTY}" replace_empty_fn); - assert_equal_string "xy" (Var_expander.replace_fn "x%{EMPTY}y" replace_empty_fn); - assert_equal_string "x<->y" (Var_expander.replace_fn "x%{FOO}y" (function | "FOO" -> Some "<->" | _ -> None)); - assert_equal_string "a x b" (Var_expander.replace_fn "a %{FOO} b" (function | "FOO" -> Some "x" | _ -> None)); - assert_equal_string "%{FOO} x" (Var_expander.replace_fn "%{FOO} %{BAR}" (function | "BAR" -> Some "x" | _ -> None)); - assert_equal_string "%{FOO}" (Var_expander.replace_fn "%{BAR}" (function | "BAR" -> Some "%{FOO}" | _ -> None)); - assert_equal_string "%{FOO} x" (Var_expander.replace_fn "%{BAR} %{FOO}" (function | "BAR" -> Some "%{FOO}" | "FOO" -> Some "x" | _ -> None)); - begin - let str = "%{INDEX}, %{INDEX}, %{INDEX}" in - let index = ref 0 in - let fn = function - | "INDEX" -> - incr index; - Some (string_of_int !index) - | _ -> None - in - assert_equal_string "1, 2, 3" (Var_expander.replace_fn str fn) - end; - () - -let test_escape () = - assert_equal_string "%%{FOO}" (Var_expander.replace_fn "%%{FOO}" replace_empty_fn); - assert_equal_string "x %%{FOO} x" (Var_expander.replace_fn "%{FOO} %%{FOO} %{FOO}" (function | "FOO" -> Some "x" | _ -> None)); - () - -let test_list () = - assert_equal_string "x %{NONE}" (Var_expander.replace_list "%{FOO} %{NONE}" [("FOO", "x")]); - () - -let test_scan_variables () = - let assert_invalid_variable var = - let str = "%{" ^ var ^ "}" in - assert_raises (Var_expander.Invalid_variable var) - (fun () -> Var_expander.scan_variables str) - in - assert_equal_stringlist [] (Var_expander.scan_variables ""); - assert_equal_stringlist [] (Var_expander.scan_variables "foo"); - assert_equal_stringlist ["FOO"] (Var_expander.scan_variables "%{FOO}"); - assert_equal_stringlist ["FOO"; "BAR"] (Var_expander.scan_variables "%{FOO} %{BAR}"); - assert_equal_stringlist ["FOO"; "BAR"] (Var_expander.scan_variables "%{FOO} %{BAR} %{FOO}"); - assert_equal_stringlist ["FOO"; "BAR"] (Var_expander.scan_variables "%{FOO} %%{ESCAPED} %{BAR}"); - assert_invalid_variable "FOO/BAR"; - () - -let test_errors () = - let assert_invalid_variable var = - let str = "%{" ^ var ^ "}" in - assert_raises (Var_expander.Invalid_variable var) - (fun () -> Var_expander.replace_fn str replace_none_fn) - in - assert_invalid_variable "FOO/BAR"; - assert_invalid_variable "FOO:BAR"; - assert_invalid_variable "FOO(BAR"; - assert_invalid_variable "FOO)BAR"; - assert_invalid_variable "FOO@BAR"; - () - -(* Suites declaration. *) -let suite = - TestList ([ - "basic" >::: [ - "no_replacement" >:: test_no_replacement; - "replacements" >:: test_replacements; - "escape" >:: test_escape; - "list" >:: test_list; - "scan_variables" >:: test_scan_variables; - "errors" >:: test_errors; - ]; - ]) - -let () = - ignore (run_test_tt_main suite); - Printf.fprintf stderr "\n" diff --git a/tests/Makefile.am b/tests/Makefile.am index db32e42b..e787a86c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -81,7 +81,6 @@ TESTS = \ test-v2v-machine-readable.sh \ test-v2v-networks-and-bridges.sh \ test-v2v-o-glance.sh \ - test-v2v-o-json.sh \ test-v2v-o-libvirt.sh \ test-v2v-o-null.sh \ test-v2v-o-openstack.sh \ @@ -241,7 +240,6 @@ EXTRA_DIST += \ test-v2v-networks-and-bridges.sh \ test-v2v-networks-and-bridges-expected.xml \ test-v2v-o-glance.sh \ - test-v2v-o-json.sh \ test-v2v-o-libvirt.sh \ test-v2v-o-null.sh \ test-v2v-o-openstack.sh \ diff --git a/tests/test-v2v-o-json.sh b/tests/test-v2v-o-json.sh deleted file mode 100755 index 15e7ad5a..00000000 --- a/tests/test-v2v-o-json.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash - -# libguestfs virt-v2v test script -# Copyright (C) 2019 Red Hat Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -# Test -o json. - -set -e -set -x - -source ./functions.sh -set -e -set -x - -skip_if_skipped -requires test -f ../test-data/phony-guests/windows.img -requires jq --version - -libvirt_uri="test://$abs_top_builddir/test-data/phony-guests/guests.xml" - -export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" - -guestname=windows - -d=test-v2v-o-json.d -rm -rf $d -cleanup_fn rm -r $d -mkdir $d - -json=$d/$guestname.json -disk=$d/$guestname-sda - -$VG virt-v2v --debug-gc \ - -i libvirt -ic "$libvirt_uri" windows \ - -o json -os $d -on $guestname - -# Test the disk was created. -test -f $disk - -# Test the JSON. -test x$(jq -r '.name' $json) = xwindows -test x$(jq -r '.inspect.type' $json) = xwindows -test x$(jq -r '.inspect.distro' $json) = xwindows -test $(jq -r '.disks | length' $json) -eq 1 -test $(jq -r '.disks[0].file' $json) = $(realpath $disk) -test $(jq -r '.nics | length' $json) -eq 1 -test $(jq -r '.removables | length' $json) -eq 0 - -# libguestfs 1.40 didn't have osinfo inspection data, but we want this -# test to work with 1.40, so ignore if jq returns this field as -# "null". -osinfo=$(jq -r '.inspect.osinfo' $json) -if [ "x$osinfo" != "xnull" ]; then - test x$osinfo = xwin7 -fi diff --git a/v2v/v2v.ml b/v2v/v2v.ml index e00f9814..994982ac 100644 --- a/v2v/v2v.ml +++ b/v2v/v2v.ml @@ -194,7 +194,6 @@ let rec main () = match mode with | "libvirt" -> output_mode := `Libvirt | "disk" | "local" -> output_mode := `Disk - | "json" -> output_mode := `JSON | "null" -> output_mode := `Null | "openstack" | "osp" | "rhosp" -> output_mode := `Openstack | "ovirt" | "rhv" | "rhev" -> output_mode := `RHV @@ -241,7 +240,7 @@ let rec main () = s_"Map network ‘in’ to ‘out’"; [ L"no-trim" ], Getopt.String ("-", no_trim_warning), s_"Ignored for backwards compatibility"; - [ S 'o' ], Getopt.String ("json|libvirt|local|null|openstack|qemu|rhv|rhv-upload|vdsm", set_output_mode), + [ S 'o' ], Getopt.String ("libvirt|local|null|openstack|qemu|rhv|rhv-upload|vdsm", set_output_mode), s_"Set output mode (default: libvirt)"; [ M"oa" ], Getopt.String ("sparse|preallocated", set_output_alloc), s_"Set output allocation mode"; @@ -376,7 +375,6 @@ read the man page virt-v2v(1). pr "input:libvirtxml\n"; pr "input:ova\n"; pr "input:vmx\n"; - pr "output:json\n"; pr "output:libvirt\n"; pr "output:local\n"; pr "output:null\n"; @@ -472,8 +470,7 @@ read the man page virt-v2v(1). | `Openstack -> (module Output_openstack.Openstack) | `RHV_Upload -> (module Output_rhv_upload.RHVUpload) | `RHV -> (module Output_rhv.RHV) - | `VDSM -> (module Output_vdsm.VDSM) - | `JSON -> (module Output_json.Json) in + | `VDSM -> (module Output_vdsm.VDSM) in let output_options = { Output.output_alloc = output_alloc;