Blob Blame History Raw
From a1f1129dc148639ed0b05b737157268d9b824a63 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 <lersek@redhat.com>
(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</Networks and bridges> below.
 
 This is the same as I<-o local>.
 
-=item B<-o> B<json>
-
-This option is deprecated and will be removed in S<virt-v2v 2.2>.
-
 =item B<-o> B<libvirt>
 
 Set the output method to I<libvirt>.  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;