From c659c58c7f8b503e9f8daa4e13c0deb60d812f25 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: May 09 2023 05:20:31 +0000 Subject: import virt-v2v-2.2.0-5.el9 --- diff --git a/.gitignore b/.gitignore index 923c58a..2c64b31 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ SOURCES/libguestfs.keyring -SOURCES/virt-v2v-2.0.7.tar.gz +SOURCES/virt-v2v-2.2.0.tar.gz diff --git a/.virt-v2v.metadata b/.virt-v2v.metadata index f059275..8f7127c 100644 --- a/.virt-v2v.metadata +++ b/.virt-v2v.metadata @@ -1,2 +1,2 @@ 1bbc40f501a7fef9eef2a39b701a71aee2fea7c4 SOURCES/libguestfs.keyring -2d898dc22eca44c9d73d664dc7e901fe437570bc SOURCES/virt-v2v-2.0.7.tar.gz +a7eff6dd19ae599850fe414b5636431d2149e5a5 SOURCES/virt-v2v-2.2.0.tar.gz diff --git a/SOURCES/0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch b/SOURCES/0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch deleted file mode 100644 index 89790ba..0000000 --- a/SOURCES/0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch +++ /dev/null @@ -1,30 +0,0 @@ -From d7c0992dfb11982d96cac8e279c454d82787918a Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Sun, 28 Sep 2014 19:14:43 +0100 -Subject: [PATCH] RHEL: v2v: Select correct qemu binary for -o qemu mode - (RHBZ#1147313). - -RHEL does not have qemu-system-x86_64 (etc), and in addition the -qemu binary is located in /usr/libexec. Encode the path to this -binary directly in the script. - -Note that we don't support people running qemu directly like this. -It's just for quick testing of converted VMs, and to help us with -support cases. ---- - output/output_qemu.ml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index 3269fba5..7f2e9284 100644 ---- a/output/output_qemu.ml -+++ b/output/output_qemu.ml -@@ -137,7 +137,7 @@ module QEMU = struct - * module deals with shell and qemu comma quoting. - *) - let cmd = Qemuopts.create () in -- Qemuopts.set_binary_by_arch cmd (Some guestcaps.gcaps_arch); -+ Qemuopts.set_binary cmd "/usr/libexec/qemu-kvm"; - - let flag = Qemuopts.flag cmd - and arg = Qemuopts.arg cmd diff --git a/SOURCES/0001-test-v2v-fedora-btrfs-conversion-spell-out-btrfs-fea.patch b/SOURCES/0001-test-v2v-fedora-btrfs-conversion-spell-out-btrfs-fea.patch new file mode 100644 index 0000000..0e19524 --- /dev/null +++ b/SOURCES/0001-test-v2v-fedora-btrfs-conversion-spell-out-btrfs-fea.patch @@ -0,0 +1,27 @@ +From 019809794742e1990af3c14b953f8c307f629b7c Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 12 Jan 2023 12:27:26 +0100 +Subject: [PATCH] test-v2v-fedora-btrfs-conversion: spell out btrfs feature + group dependency + +In case the libguestfs appliance lacks the btrfs feature group, we create +a zero-sized phony Fedora/BTRFS image variant, causing this test case to +fail. In that situation, the test should just be skipped. + +Signed-off-by: Laszlo Ersek +Acked-by: Richard W.M. Jones +--- + tests/test-v2v-fedora-btrfs-conversion.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/tests/test-v2v-fedora-btrfs-conversion.sh b/tests/test-v2v-fedora-btrfs-conversion.sh +index c78f8ae2..14099893 100755 +--- a/tests/test-v2v-fedora-btrfs-conversion.sh ++++ b/tests/test-v2v-fedora-btrfs-conversion.sh +@@ -27,5 +27,6 @@ set -x + skip_if_skipped + f=../test-data/phony-guests/fedora-btrfs.img + requires test -f $f ++requires test -s $f + + $VG virt-v2v --debug-gc -i disk $f -o null diff --git a/SOURCES/0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch b/SOURCES/0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch deleted file mode 100644 index b5ef618..0000000 --- a/SOURCES/0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch +++ /dev/null @@ -1,109 +0,0 @@ -From 610f53a67a0804ee76e9213c503b7bb00dd722b8 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 30 Sep 2014 10:50:27 +0100 -Subject: [PATCH] RHEL: v2v: Disable the --qemu-boot / -oo qemu-boot option - (RHBZ#1147313). - -This cannot work because there is no Gtk or SDL output mode -in RHEL's qemu-kvm. - -In addition you will have to edit the -display option in the -qemu script. ---- - docs/virt-v2v-output-local.pod | 6 ++---- - docs/virt-v2v.pod | 12 ------------ - output/output_qemu.ml | 3 +++ - v2v/v2v.ml | 2 -- - 4 files changed, 5 insertions(+), 18 deletions(-) - -diff --git a/docs/virt-v2v-output-local.pod b/docs/virt-v2v-output-local.pod -index d2a1c270..0be37f5e 100644 ---- a/docs/virt-v2v-output-local.pod -+++ b/docs/virt-v2v-output-local.pod -@@ -9,7 +9,7 @@ or libvirt - - virt-v2v [-i* options] -o local -os DIRECTORY - -- virt-v2v [-i* options] -o qemu -os DIRECTORY [--qemu-boot] -+ virt-v2v [-i* options] -o qemu -os DIRECTORY - - virt-v2v [-i* options] -o null - -@@ -47,12 +47,10 @@ where C is the guest name. - - =item B<-o qemu -os> C - --=item B<-o qemu -os> C B<--qemu-boot> -- - This converts the guest to files in C. Unlike I<-o local> - above, a shell script is created which contains the raw qemu command - you would need to boot the guest. However the shell script is not --run, I you also add the I<--qemu-boot> option. -+run. - - =item B<-o null> - -diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 4e912b6c..7d0bafff 100644 ---- a/docs/virt-v2v.pod -+++ b/docs/virt-v2v.pod -@@ -139,11 +139,6 @@ Since F contains the path(s) to the guest disk - image(s) you do not need to specify the name of the disk image on the - command line. - --To convert a local disk image and immediately boot it in local --qemu, do: -- -- virt-v2v -i disk disk.img -o qemu -os /var/tmp -oo qemu-boot -- - =head1 OPTIONS - - =over 4 -@@ -487,9 +482,6 @@ This is similar to I<-o local>, except that a shell script is written - which you can use to boot the guest in qemu. The converted disks and - shell script are written to the directory specified by I<-os>. - --When using this output mode, you can also specify the I<-oo qemu-boot> --option which boots the guest under qemu immediately. -- - =item B<-o> B - - This is the same as I<-o rhv>. -@@ -743,10 +735,6 @@ Print information about the source guest and stop. This option is - useful when you are setting up network and bridge maps. - See L. - --=item B<--qemu-boot> -- --This is the same as I<-oo qemu-boot>. -- - =item B<-q> - - =item B<--quiet> -diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index 7f2e9284..527d3c5e 100644 ---- a/output/output_qemu.ml -+++ b/output/output_qemu.ml -@@ -63,6 +63,9 @@ module QEMU = struct - ) options.output_options; - let qemu_boot = !qemu_boot in - -+ if qemu_boot then -+ error (f_"-o qemu: the -oo qemu-boot option cannot be used in RHEL"); -+ - (* -os must be set to a directory. *) - let output_storage = - match options.output_storage with -diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 9790416e..97b4e4ec 100644 ---- a/v2v/v2v.ml -+++ b/v2v/v2v.ml -@@ -270,8 +270,6 @@ let rec main () = - s_"Same as ‘-ip filename’"; - [ L"print-source" ], Getopt.Set print_source, - s_"Print source and stop"; -- [ L"qemu-boot" ], Getopt.Unit (fun () -> set_output_option_compat "qemu-boot" ""), -- s_"Boot in qemu (-o qemu only)"; - [ L"root" ], Getopt.String ("ask|... ", set_root_choice), - s_"How to choose root filesystem"; - [ L"vddk-config" ], Getopt.String ("filename", set_input_option_compat "vddk-config"), diff --git a/SOURCES/0002-test-v2v-i-ova-spell-out-ntfs-feature-group-dependen.patch b/SOURCES/0002-test-v2v-i-ova-spell-out-ntfs-feature-group-dependen.patch new file mode 100644 index 0000000..bb45b56 --- /dev/null +++ b/SOURCES/0002-test-v2v-i-ova-spell-out-ntfs-feature-group-dependen.patch @@ -0,0 +1,78 @@ +From 224243b8e26aa299bd99dd24662c4df10a3f612c Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 12 Jan 2023 12:31:10 +0100 +Subject: [PATCH] test-v2v-i-ova: spell out ntfs feature group dependency + +"windows.img" is created as an empty phony image if the libguestfs +appliance lacks the ntfs feature group. + +"tests/Makefile.am" deals well with this, because for the "central" +"windows.vmdk" target, we restrict the VMDK conversion to a non-empty +"windows.img". Subsequently, dependent test cases check for "windows.vmdk" +specifically, and if that file is missing, the tests are skipped (they +exit with code 77). + +"test-v2v-i-ova.sh" and "test-v2v-i-ova-directory.sh" are exceptions +however. They perform the same conversion manually (in their own separate +workspace directories). They assume that, if "windows.img" exists, it can +be converted to VMDK. When the image size is zero, the conversion breaks, +and both test cases fail. Skip both tests if "windows.img" is empty. + +Signed-off-by: Laszlo Ersek +Acked-by: Richard W.M. Jones +[lersek@redhat.com: replace further occurrences of windows.img with $f] +--- + tests/test-v2v-i-ova-directory.sh | 7 ++++--- + tests/test-v2v-i-ova.sh | 7 ++++--- + 2 files changed, 8 insertions(+), 6 deletions(-) + +diff --git a/tests/test-v2v-i-ova-directory.sh b/tests/test-v2v-i-ova-directory.sh +index fff236f5..ec858464 100755 +--- a/tests/test-v2v-i-ova-directory.sh ++++ b/tests/test-v2v-i-ova-directory.sh +@@ -25,7 +25,9 @@ set -e + set -x + + skip_if_skipped +-requires test -f ../test-data/phony-guests/windows.img ++f=../test-data/phony-guests/windows.img ++requires test -f $f ++requires test -s $f + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" +@@ -39,8 +41,7 @@ vmdk=test-ova.vmdk + ovf=test-v2v-i-ova.ovf + mf=test-ova.mf + +-qemu-img convert ../test-data/phony-guests/windows.img \ +- -O vmdk $d/$vmdk ++qemu-img convert $f -O vmdk $d/$vmdk + cp "$srcdir/$ovf" $d/$ovf + sha1=`do_sha1 $d/$ovf` + echo "SHA1($ovf)= $sha1" > $d/$mf +diff --git a/tests/test-v2v-i-ova.sh b/tests/test-v2v-i-ova.sh +index a55966a7..7d988330 100755 +--- a/tests/test-v2v-i-ova.sh ++++ b/tests/test-v2v-i-ova.sh +@@ -25,7 +25,9 @@ set -e + set -x + + skip_if_skipped +-requires test -f ../test-data/phony-guests/windows.img ++f=../test-data/phony-guests/windows.img ++requires test -f $f ++requires test -s $f + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" +@@ -41,8 +43,7 @@ mf=test-ova.mf + ova=test-ova.ova + raw=TestOva-sda + +-qemu-img convert ../test-data/phony-guests/windows.img \ +- -O vmdk $d/$vmdk ++qemu-img convert $f -O vmdk $d/$vmdk + cp "$srcdir/$ovf" $d/$ovf + sha1=`do_sha1 $d/$ovf` + echo "SHA1($ovf)= $sha1" > $d/$mf diff --git a/SOURCES/0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch b/SOURCES/0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch deleted file mode 100644 index 11b2476..0000000 --- a/SOURCES/0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch +++ /dev/null @@ -1,31 +0,0 @@ -From b61fc893f429eb4bec34816d667cc930e50ccd0f Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 24 Apr 2015 09:45:41 -0400 -Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu - (RHBZ#1176493). - ---- - lib/utils.ml | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/lib/utils.ml b/lib/utils.ml -index 128bb697..7116a4f9 100644 ---- a/lib/utils.ml -+++ b/lib/utils.ml -@@ -60,13 +60,14 @@ let kvm_arch = function - (* Does qemu support the given sound card? *) - let qemu_supports_sound_card = function - | Types.AC97 -- | Types.ES1370 - | Types.ICH6 - | Types.ICH9 - | Types.PCSpeaker -+ -> true -+ | Types.ES1370 - | Types.SB16 - | Types.USBAudio -- -> true -+ -> false - - (* Find the UEFI firmware. *) - let find_uefi_firmware guest_arch = diff --git a/SOURCES/0003-Translated-using-Weblate-Finnish.patch b/SOURCES/0003-Translated-using-Weblate-Finnish.patch new file mode 100644 index 0000000..3533968 --- /dev/null +++ b/SOURCES/0003-Translated-using-Weblate-Finnish.patch @@ -0,0 +1,44 @@ +From d78c3bdcda04885ee7b826a5ce43d07e778641cd Mon Sep 17 00:00:00 2001 +From: Jan Kuparinen +Date: Fri, 13 Jan 2023 21:20:28 +0100 +Subject: [PATCH] Translated using Weblate (Finnish) + +Currently translated at 1.9% (25 of 1305 strings) + +Translation: libguestfs/virt-v2v-docs-master +Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/virt-v2v-docs-master/fi/ +--- + po-docs/fi.po | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/po-docs/fi.po b/po-docs/fi.po +index 29d8ee26..5da30f77 100644 +--- a/po-docs/fi.po ++++ b/po-docs/fi.po +@@ -8,7 +8,7 @@ msgstr "" + "Project-Id-Version: virt-v2v 1.43.1\n" + "Report-Msgid-Bugs-To: libguestfs@redhat.com\n" + "POT-Creation-Date: 2020-08-13 13:17+0200\n" +-"PO-Revision-Date: 2022-01-25 17:16+0000\n" ++"PO-Revision-Date: 2023-01-13 20:20+0000\n" + "Last-Translator: Jan Kuparinen \n" + "Language-Team: Finnish \n" +@@ -17,7 +17,7 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=n != 1;\n" +-"X-Generator: Weblate 4.10.1\n" ++"X-Generator: Weblate 4.15\n" + + #. type: =end + #: common/mlcustomize/customize-options.pod:1 +@@ -4694,7 +4694,7 @@ msgstr "" + #. type: =item + #: docs/virt-v2v-support.pod:86 + msgid "Oracle Linux" +-msgstr "" ++msgstr "Oracle Linux" + + #. type: =item + #: docs/virt-v2v-support.pod:88 diff --git a/SOURCES/0004-RHEL-Fixes-for-libguestfs-winsupport.patch b/SOURCES/0004-RHEL-Fixes-for-libguestfs-winsupport.patch deleted file mode 100644 index 2540451..0000000 --- a/SOURCES/0004-RHEL-Fixes-for-libguestfs-winsupport.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 5d70bf1302ea3f1006d87672676f86eb5d40eb85 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Sun, 30 Aug 2015 03:21:57 -0400 -Subject: [PATCH] RHEL: Fixes for libguestfs-winsupport. - -In tests we cannot use guestfish for arbitrary Windows edits. -In virt-v2v helpers we must set the program name to virt-v2v. ---- - convert/convert.ml | 1 + - convert/windows_virtio.ml | 1 + - test-data/phony-guests/make-windows-img.sh | 1 + - tests/test-v2v-virtio-win-iso.sh | 8 +++++++- - tests/test-v2v-windows-conversion.sh | 8 +++++++- - 5 files changed, 17 insertions(+), 2 deletions(-) - -diff --git a/convert/convert.ml b/convert/convert.ml -index 87fca725..5e0e6c2b 100644 ---- a/convert/convert.ml -+++ b/convert/convert.ml -@@ -51,6 +51,7 @@ let rec convert dir options source = - - message (f_"Opening the source"); - let g = open_guestfs ~identifier:"v2v" () in -+ g#set_program "virt-v2v"; - g#set_memsize (g#get_memsize () * 2); - (* Setting the number of vCPUs allows parallel mkinitrd, but make - * sure this is not too large because each vCPU consumes guest RAM. -diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml -index a27cd6a5..183166b7 100644 ---- a/convert/windows_virtio.ml -+++ b/convert/windows_virtio.ml -@@ -241,6 +241,7 @@ and copy_from_virtio_win g inspect srcdir destdir filter missing = - let g2 = - try - let g2 = open_guestfs ~identifier:"virtio_win" () in -+ g#set_program "virt-v2v"; - g2#add_drive_opts virtio_win ~readonly:true; - g2#launch (); - g2 -diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh -index 30908a91..73cf5144 100755 ---- a/test-data/phony-guests/make-windows-img.sh -+++ b/test-data/phony-guests/make-windows-img.sh -@@ -37,6 +37,7 @@ fi - - # Create a disk image. - guestfish < "$script" - :> "$expected" - -+cat >> "$script" < "$response" -+guestfish --ro -a "$d/windows-sda" < "$script" > "$response" - diff -u "$expected" "$response" -diff --git a/tests/test-v2v-windows-conversion.sh b/tests/test-v2v-windows-conversion.sh -index a4cf191d..1ff41f6a 100755 ---- a/tests/test-v2v-windows-conversion.sh -+++ b/tests/test-v2v-windows-conversion.sh -@@ -76,6 +76,12 @@ mktest () - :> "$script" - :> "$expected" - -+cat >> "$script" < "$response" -+guestfish --ro -a "$d/windows-sda" < "$script" > "$response" - diff -u "$expected" "$response" - - # We also update the Registry several times, for firstboot, and (ONLY diff --git a/SOURCES/0004-Translated-using-Weblate-Georgian.patch b/SOURCES/0004-Translated-using-Weblate-Georgian.patch new file mode 100644 index 0000000..f73787d --- /dev/null +++ b/SOURCES/0004-Translated-using-Weblate-Georgian.patch @@ -0,0 +1,49 @@ +From f395335881974767e4dbdbf73c1abf3bed961f5d Mon Sep 17 00:00:00 2001 +From: Temuri Doghonadze +Date: Fri, 13 Jan 2023 21:20:28 +0100 +Subject: [PATCH] Translated using Weblate (Georgian) + +Currently translated at 8.6% (38 of 439 strings) + +Translation: libguestfs/virt-v2v-master +Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/virt-v2v-master/ka/ +--- + po/ka.po | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/po/ka.po b/po/ka.po +index 4dc891df..26d41f6b 100644 +--- a/po/ka.po ++++ b/po/ka.po +@@ -6,10 +6,10 @@ + msgid "" + msgstr "" + "Project-Id-Version: virt-v2v 2.1.1\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug." ++"cgi?component=libguestfs&product=Virtualization+Tools\n" + "POT-Creation-Date: 2022-12-10 12:01+0000\n" +-"PO-Revision-Date: 2022-12-06 18:19+0000\n" ++"PO-Revision-Date: 2023-01-13 20:20+0000\n" + "Last-Translator: Temuri Doghonadze \n" + "Language-Team: Georgian \n" +@@ -18,7 +18,7 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=n != 1;\n" +-"X-Generator: Weblate 4.14.2\n" ++"X-Generator: Weblate 4.15\n" + + #: input/input_ova.ml:134 common/mltools/tools_utils.ml:235 + msgid "%s" +@@ -2062,7 +2062,7 @@ msgstr "" + #: common/mltools/getopt-c.c:198 + #, c-format + msgid "%s: %s: integer out of range\n" +-msgstr "" ++msgstr "%s: %s: მთელი მნიშვნელობა დიაპაზონს გარეთაა\n" + + #: common/mltools/getopt-c.c:388 + #, c-format diff --git a/SOURCES/0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/SOURCES/0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch deleted file mode 100644 index 2be9f81..0000000 --- a/SOURCES/0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 37e241d6d4f22331b34c2ed0af233c73be2b0869 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 2 Mar 2017 14:21:37 +0100 -Subject: [PATCH] RHEL: v2v: -i disk: force VNC as display (RHBZ#1372671) - -The SDL output mode is not supported in RHEL's qemu-kvm. ---- - input/input_disk.ml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/input/input_disk.ml b/input/input_disk.ml -index 508adf9d..20f2e898 100644 ---- a/input/input_disk.ml -+++ b/input/input_disk.ml -@@ -76,7 +76,7 @@ module Disk = struct - s_features = [ "acpi"; "apic"; "pae" ]; - s_firmware = UnknownFirmware; (* causes virt-v2v to autodetect *) - s_display = -- Some { s_display_type = Window; s_keymap = None; s_password = None; -+ Some { s_display_type = VNC; s_keymap = None; s_password = None; - s_listen = LNoListen; s_port = None }; - s_sound = None; - s_disks = s_disks; diff --git a/SOURCES/0005-Update-translation-files.patch b/SOURCES/0005-Update-translation-files.patch new file mode 100644 index 0000000..957d5d3 --- /dev/null +++ b/SOURCES/0005-Update-translation-files.patch @@ -0,0 +1,9383 @@ +From f201d3c6b906b44b6483b6bb5bec47df6074974c Mon Sep 17 00:00:00 2001 +From: Weblate +Date: Fri, 13 Jan 2023 21:20:28 +0100 +Subject: [PATCH] Update translation files + +Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. + +Translation: libguestfs/virt-v2v-master +Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/virt-v2v-master/ +--- + po/cs.po | 152 ++++++++++++++++++++++++++++----------------------- + po/de.po | 152 ++++++++++++++++++++++++++++----------------------- + po/es.po | 152 ++++++++++++++++++++++++++++----------------------- + po/fi.po | 152 ++++++++++++++++++++++++++++----------------------- + po/fr.po | 152 ++++++++++++++++++++++++++++----------------------- + po/gu.po | 152 ++++++++++++++++++++++++++++----------------------- + po/hi.po | 152 ++++++++++++++++++++++++++++----------------------- + po/ja.po | 152 ++++++++++++++++++++++++++++----------------------- + po/ka.po | 156 ++++++++++++++++++++++++++++------------------------ + po/kn.po | 152 ++++++++++++++++++++++++++++----------------------- + po/ml.po | 152 ++++++++++++++++++++++++++++----------------------- + po/mr.po | 152 ++++++++++++++++++++++++++++----------------------- + po/nl.po | 152 ++++++++++++++++++++++++++++----------------------- + po/or.po | 152 ++++++++++++++++++++++++++++----------------------- + po/pa.po | 152 ++++++++++++++++++++++++++++----------------------- + po/pl.po | 152 ++++++++++++++++++++++++++++----------------------- + po/si.po | 152 ++++++++++++++++++++++++++++----------------------- + po/uk.po | 164 +++++++++++++++++++++++++++++++------------------------ + 18 files changed, 1522 insertions(+), 1230 deletions(-) + +diff --git a/po/cs.po b/po/cs.po +index 5cfc585a..8bd4c717 100644 +--- a/po/cs.po ++++ b/po/cs.po +@@ -4,7 +4,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2022-04-15 20:17+0000\n" + "Last-Translator: Pavel Borecki \n" + "Language-Team: Czech = 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -383,7 +389,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -395,7 +401,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -407,7 +413,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -419,7 +425,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -497,7 +503,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -505,7 +511,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -517,7 +523,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -525,7 +531,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -552,7 +558,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -560,7 +566,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -568,15 +574,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -593,7 +599,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -608,7 +616,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -684,11 +692,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -712,7 +720,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -753,63 +761,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -821,39 +829,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -885,15 +893,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -909,7 +917,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -926,7 +934,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -973,15 +981,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -993,6 +1001,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1119,7 +1133,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1327,7 +1341,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1453,7 +1467,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1589,7 +1603,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1609,13 +1625,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1754,11 +1770,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1822,7 +1838,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1847,14 +1863,14 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + msgstr[2] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1889,7 +1905,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1901,7 +1917,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1909,11 +1925,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/de.po b/po/de.po +index a17028f9..900141c4 100644 +--- a/po/de.po ++++ b/po/de.po +@@ -11,7 +11,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:48+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: German (http://www.transifex.com/projects/p/libguestfs/" +@@ -79,7 +79,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -238,6 +238,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -340,7 +344,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -392,7 +398,7 @@ msgstr "Zeile(n) an die Datei anhängen" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -404,7 +410,7 @@ msgstr "Berechtigungen einer Datei ändern" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "Ausgabedatei komprimieren (nur -of qcow2)" + +@@ -416,7 +422,7 @@ msgstr "Dateien in Festplattenabbild kopieren" + msgid "Copy local files or directories into image" + msgstr "Lokale Dateien oder Verzeichnisse in das Abbild kopieren" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "Festplatte %d/%d wird kopiert" + +@@ -428,7 +434,7 @@ msgstr "Ein Verzeichnis erstellen" + msgid "Create symbolic links" + msgstr "Symbolische Verknüpfungen erstellen" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "Ausgabe-Metadaten erstellen" + +@@ -506,7 +512,7 @@ msgstr "DATEI:ZEILE" + msgid "FILENAME" + msgstr "DATEINAME" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -514,7 +520,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "HOSTNAME" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -526,7 +532,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -534,7 +540,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + #, fuzzy + #| msgid "Set output format" + msgid "Input format" +@@ -563,7 +569,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -571,7 +577,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "Libvirt-URI" + +@@ -579,15 +585,15 @@ msgstr "Libvirt-URI" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -604,7 +610,9 @@ msgstr "Dateien in Festplattenabbild verschieben" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -619,7 +627,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -695,11 +703,11 @@ msgstr "BERECHTIGUNGEN:DATEI" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -723,7 +731,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -764,63 +772,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "QUELLE:ZIEL" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -832,39 +840,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "Ausgabeformat festlegen" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "Ausgabemodus festlegen (Standard: libvirt)" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -898,15 +906,15 @@ msgstr "Ausgabeformat festlegen" + msgid "Set user password" + msgstr "Benutzerpasswort festlegen" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -922,7 +930,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "ZEITZONE" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -939,7 +947,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -986,15 +994,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -1006,6 +1014,12 @@ msgstr "" + msgid "Write file" + msgstr "Datei schreiben" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1132,7 +1146,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1340,7 +1354,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1466,7 +1480,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1602,7 +1616,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1622,13 +1638,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1771,11 +1787,11 @@ msgstr "%s beendet mit Fehlerstatus %d" + msgid "subprocess signalled or stopped by signal %d" + msgstr "%s gestoppt durch Signal %d (%s)" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1839,7 +1855,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1864,13 +1880,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1904,7 +1920,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1916,7 +1932,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1924,11 +1940,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/es.po b/po/es.po +index ccc89021..1ac96853 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -12,7 +12,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-03-16 07:04+0000\n" + "Last-Translator: Alex Puchades \n" + "Language-Team: Spanish (http://www.transifex.com/projects/p/libguestfs/" +@@ -78,7 +78,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -237,6 +237,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -339,7 +343,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -391,7 +397,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -403,7 +409,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -415,7 +421,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -427,7 +433,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -505,7 +511,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -513,7 +519,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -525,7 +531,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -533,7 +539,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -560,7 +566,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -568,7 +574,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -576,15 +582,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -601,7 +607,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -616,7 +624,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -692,11 +700,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -720,7 +728,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -761,63 +769,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -829,39 +837,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -893,15 +901,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -917,7 +925,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -934,7 +942,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -981,15 +989,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -1001,6 +1009,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1127,7 +1141,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1337,7 +1351,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1463,7 +1477,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1599,7 +1613,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1619,13 +1635,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1764,11 +1780,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1832,7 +1848,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1857,13 +1873,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1897,7 +1913,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1909,7 +1925,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1917,11 +1933,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/fi.po b/po/fi.po +index a079dea0..ba7ac019 100644 +--- a/po/fi.po ++++ b/po/fi.po +@@ -8,7 +8,7 @@ msgstr "" + "Project-Id-Version: virt-v2v 1.43.4\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2022-12-23 18:20+0000\n" + "Last-Translator: Jan Kuparinen \n" + "Language-Team: Finnish = 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -389,7 +395,7 @@ msgstr "Liitä tiedostoon rivit" + msgid "Attach to a subscription-manager pool" + msgstr "Liitä tilaus-manager-varantoon" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -401,7 +407,7 @@ msgstr "Muuta tiedoston käyttöoikeuksia" + msgid "Compatibility option doing nothing" + msgstr "Yhteensopivuusvaihtoehto, ei tee mitään" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -413,7 +419,7 @@ msgstr "Kopioi levykuvan tiedostot" + msgid "Copy local files or directories into image" + msgstr "Kopioi paikalliset tiedostot tai hakemistot kuvaan" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -425,7 +431,7 @@ msgstr "Luo hakemisto" + msgid "Create symbolic links" + msgstr "Luo symbolisia linkkejä" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -503,7 +509,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -511,7 +517,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -523,7 +529,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -531,7 +537,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -558,7 +564,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -566,7 +572,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "Libvirt:n URI" + +@@ -574,15 +580,15 @@ msgstr "Libvirt:n URI" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -599,7 +605,9 @@ msgstr "Siirrä levykuvassa olevia tiedostoja" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -614,7 +622,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -690,11 +698,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -718,7 +726,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -759,63 +767,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -827,39 +835,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -891,15 +899,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -915,7 +923,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -932,7 +940,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -979,15 +987,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -999,6 +1007,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1127,7 +1141,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1335,7 +1349,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1461,7 +1475,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1597,7 +1611,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1617,13 +1633,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1762,11 +1778,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "aliprosessi, joka on signaloitu tai pysäytetty signaalilla %d" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1830,7 +1846,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1855,13 +1871,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1895,7 +1911,7 @@ msgstr "tuntematon --root vaihtoehto: %s" + msgid "unknown -i option: %s" + msgstr "tuntematon -i vaihtoehto: %s" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "tuntematon -o vaihtoehto: %s" + +@@ -1907,7 +1923,7 @@ msgstr "tuntematon -oa vaihtoehto: %s" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1915,11 +1931,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/fr.po b/po/fr.po +index 476efdaf..4dafd886 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -12,7 +12,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:49+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: French (http://www.transifex.com/projects/p/libguestfs/" +@@ -78,7 +78,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -239,6 +239,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -341,7 +345,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -393,7 +399,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -405,7 +411,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -417,7 +423,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -429,7 +435,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -507,7 +513,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -515,7 +521,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -527,7 +533,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -535,7 +541,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -562,7 +568,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -570,7 +576,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -578,15 +584,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -603,7 +609,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -618,7 +626,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -694,11 +702,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -722,7 +730,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -763,63 +771,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -831,39 +839,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -895,15 +903,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -919,7 +927,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -936,7 +944,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -983,15 +991,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -1003,6 +1011,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1131,7 +1145,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1341,7 +1355,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1467,7 +1481,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1603,7 +1617,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1623,13 +1639,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1772,11 +1788,11 @@ msgstr "%s s'est terminé avec l'état d'erreur %d" + msgid "subprocess signalled or stopped by signal %d" + msgstr "%s a été arrêté par le signal %d (%s)" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1840,7 +1856,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1865,13 +1881,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1905,7 +1921,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1917,7 +1933,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1925,11 +1941,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/gu.po b/po/gu.po +index 400a91e7..70c0cf07 100644 +--- a/po/gu.po ++++ b/po/gu.po +@@ -10,7 +10,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:49+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Gujarati (http://www.transifex.com/projects/p/libguestfs/" +@@ -76,7 +76,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -235,6 +235,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -337,7 +341,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -389,7 +395,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -401,7 +407,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -413,7 +419,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -425,7 +431,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -503,7 +509,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -511,7 +517,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -523,7 +529,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -531,7 +537,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -558,7 +564,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -566,7 +572,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -574,15 +580,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -599,7 +605,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -614,7 +622,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -690,11 +698,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -718,7 +726,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -759,63 +767,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -827,39 +835,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -891,15 +899,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -915,7 +923,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -932,7 +940,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -979,15 +987,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -999,6 +1007,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1125,7 +1139,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1335,7 +1349,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1461,7 +1475,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1597,7 +1611,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1617,13 +1633,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1762,11 +1778,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1830,7 +1846,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1855,13 +1871,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1895,7 +1911,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1907,7 +1923,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1915,11 +1931,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/hi.po b/po/hi.po +index 9efa8421..30001cc1 100644 +--- a/po/hi.po ++++ b/po/hi.po +@@ -10,7 +10,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:49+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Hindi (http://www.transifex.com/projects/p/libguestfs/" +@@ -76,7 +76,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -235,6 +235,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -337,7 +341,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -389,7 +395,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -401,7 +407,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -413,7 +419,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -425,7 +431,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -503,7 +509,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -511,7 +517,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -523,7 +529,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -531,7 +537,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -558,7 +564,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -566,7 +572,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -574,15 +580,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -599,7 +605,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -614,7 +622,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -690,11 +698,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -718,7 +726,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -759,63 +767,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -827,39 +835,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -891,15 +899,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -915,7 +923,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -932,7 +940,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -979,15 +987,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -999,6 +1007,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1125,7 +1139,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1333,7 +1347,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1459,7 +1473,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1595,7 +1609,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1615,13 +1631,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1760,11 +1776,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1828,7 +1844,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1853,13 +1869,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1893,7 +1909,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1905,7 +1921,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1913,11 +1929,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/ja.po b/po/ja.po +index f98093e8..dbe2cad2 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -11,7 +11,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2017-02-24 07:33+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Japanese (http://www.transifex.com/projects/p/libguestfs/" +@@ -77,7 +77,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -238,6 +238,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -340,7 +344,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -392,7 +398,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -404,7 +410,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -416,7 +422,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -428,7 +434,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -506,7 +512,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -514,7 +520,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -526,7 +532,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -534,7 +540,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -561,7 +567,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -569,7 +575,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -577,15 +583,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -602,7 +608,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -617,7 +625,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -693,11 +701,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -721,7 +729,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -762,63 +770,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -830,39 +838,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -894,15 +902,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -918,7 +926,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -935,7 +943,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -982,15 +990,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -1002,6 +1010,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1130,7 +1144,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1340,7 +1354,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1466,7 +1480,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1602,7 +1616,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1622,13 +1638,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1771,11 +1787,11 @@ msgstr "%s がエラーステータス %d で終了しました" + msgid "subprocess signalled or stopped by signal %d" + msgstr "%s がシグナル %d (%s) により停止しました" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1839,7 +1855,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1864,12 +1880,12 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1902,7 +1918,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1914,7 +1930,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1922,11 +1938,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/ka.po b/po/ka.po +index 26d41f6b..1e8e654a 100644 +--- a/po/ka.po ++++ b/po/ka.po +@@ -6,9 +6,9 @@ + msgid "" + msgstr "" + "Project-Id-Version: virt-v2v 2.1.1\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug." +-"cgi?component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" ++"component=libguestfs&product=Virtualization+Tools\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2023-01-13 20:20+0000\n" + "Last-Translator: Temuri Doghonadze \n" + "Language-Team: Georgian = 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -387,7 +393,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -399,7 +405,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -411,7 +417,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -423,7 +429,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -501,7 +507,7 @@ msgstr "" + msgid "FILENAME" + msgstr "ფაილის სახელი" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -509,7 +515,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "ჰოსტის სახელი" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -521,7 +527,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -529,7 +535,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -556,7 +562,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -564,7 +570,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "Libvirt-ის URI" + +@@ -572,15 +578,15 @@ msgstr "Libvirt-ის URI" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -597,7 +603,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -612,7 +620,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -688,11 +696,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -716,7 +724,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -757,63 +765,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -825,39 +833,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -889,15 +897,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -913,7 +921,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -930,7 +938,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -977,15 +985,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -997,6 +1005,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1123,7 +1137,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1331,7 +1345,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1457,7 +1471,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1593,7 +1607,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1613,13 +1629,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1758,11 +1774,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1826,7 +1842,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1851,13 +1867,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1891,7 +1907,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1903,7 +1919,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1911,11 +1927,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/kn.po b/po/kn.po +index db65445d..db6460c0 100644 +--- a/po/kn.po ++++ b/po/kn.po +@@ -9,7 +9,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:50+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Kannada (http://www.transifex.com/projects/p/libguestfs/" +@@ -75,7 +75,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -234,6 +234,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -336,7 +340,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -388,7 +394,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -400,7 +406,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -412,7 +418,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -424,7 +430,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -502,7 +508,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -510,7 +516,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -522,7 +528,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -530,7 +536,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -557,7 +563,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -565,7 +571,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -573,15 +579,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -598,7 +604,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -613,7 +621,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -689,11 +697,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -717,7 +725,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -758,63 +766,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -826,39 +834,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -890,15 +898,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -914,7 +922,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -931,7 +939,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -978,15 +986,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -998,6 +1006,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1124,7 +1138,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1332,7 +1346,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1458,7 +1472,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1594,7 +1608,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1614,13 +1630,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1759,11 +1775,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1827,7 +1843,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1852,12 +1868,12 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1890,7 +1906,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1902,7 +1918,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1910,11 +1926,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/ml.po b/po/ml.po +index 8461c4e6..393d1c56 100644 +--- a/po/ml.po ++++ b/po/ml.po +@@ -9,7 +9,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:50+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Malayalam (http://www.transifex.com/projects/p/libguestfs/" +@@ -75,7 +75,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -234,6 +234,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -336,7 +340,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -388,7 +394,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -400,7 +406,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -412,7 +418,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -424,7 +430,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -502,7 +508,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -510,7 +516,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -522,7 +528,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -530,7 +536,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -557,7 +563,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -565,7 +571,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -573,15 +579,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -598,7 +604,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -613,7 +621,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -689,11 +697,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -717,7 +725,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -758,63 +766,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -826,39 +834,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -890,15 +898,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -914,7 +922,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -931,7 +939,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -978,15 +986,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -998,6 +1006,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1124,7 +1138,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1332,7 +1346,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1458,7 +1472,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1594,7 +1608,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1614,13 +1630,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1759,11 +1775,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1827,7 +1843,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1852,13 +1868,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1892,7 +1908,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1904,7 +1920,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1912,11 +1928,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/mr.po b/po/mr.po +index e867a8be..ab5c282f 100644 +--- a/po/mr.po ++++ b/po/mr.po +@@ -10,7 +10,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:51+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Marathi (http://www.transifex.com/projects/p/libguestfs/" +@@ -76,7 +76,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -235,6 +235,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -337,7 +341,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -389,7 +395,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -401,7 +407,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -413,7 +419,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -425,7 +431,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -503,7 +509,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -511,7 +517,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -523,7 +529,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -531,7 +537,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -558,7 +564,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -566,7 +572,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -574,15 +580,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -599,7 +605,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -614,7 +622,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -690,11 +698,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -718,7 +726,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -759,63 +767,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -827,39 +835,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -891,15 +899,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -915,7 +923,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -932,7 +940,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -979,15 +987,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -999,6 +1007,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1125,7 +1139,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1335,7 +1349,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1461,7 +1475,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1597,7 +1611,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1617,13 +1633,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1762,11 +1778,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1830,7 +1846,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1855,13 +1871,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1895,7 +1911,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1907,7 +1923,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1915,11 +1931,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/nl.po b/po/nl.po +index 81a66234..251e9c4b 100644 +--- a/po/nl.po ++++ b/po/nl.po +@@ -11,7 +11,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:51+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Dutch (http://www.transifex.com/projects/p/libguestfs/" +@@ -77,7 +77,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -238,6 +238,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -340,7 +344,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -392,7 +398,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -404,7 +410,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -416,7 +422,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -428,7 +434,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -506,7 +512,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -514,7 +520,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -526,7 +532,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -534,7 +540,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -561,7 +567,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -569,7 +575,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -577,15 +583,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -602,7 +608,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -617,7 +625,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -693,11 +701,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -721,7 +729,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -762,63 +770,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -830,39 +838,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -894,15 +902,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -918,7 +926,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -935,7 +943,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -982,15 +990,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -1002,6 +1010,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1130,7 +1144,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1340,7 +1354,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1466,7 +1480,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1602,7 +1616,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1622,13 +1638,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1767,11 +1783,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1835,7 +1851,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1860,13 +1876,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1900,7 +1916,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1912,7 +1928,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1920,11 +1936,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/or.po b/po/or.po +index 73fb2ab6..8023ae0a 100644 +--- a/po/or.po ++++ b/po/or.po +@@ -9,7 +9,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:51+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Oriya (http://www.transifex.com/projects/p/libguestfs/" +@@ -75,7 +75,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -234,6 +234,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -336,7 +340,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -388,7 +394,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -400,7 +406,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -412,7 +418,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -424,7 +430,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -502,7 +508,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -510,7 +516,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -522,7 +528,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -530,7 +536,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -557,7 +563,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -565,7 +571,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -573,15 +579,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -598,7 +604,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -613,7 +621,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -689,11 +697,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -717,7 +725,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -758,63 +766,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -826,39 +834,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -890,15 +898,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -914,7 +922,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -931,7 +939,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -978,15 +986,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -998,6 +1006,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1124,7 +1138,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1332,7 +1346,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1458,7 +1472,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1594,7 +1608,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1614,13 +1630,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1759,11 +1775,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1827,7 +1843,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1852,13 +1868,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1892,7 +1908,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1904,7 +1920,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1912,11 +1928,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/pa.po b/po/pa.po +index 5e5ffc49..4f02ba2d 100644 +--- a/po/pa.po ++++ b/po/pa.po +@@ -10,7 +10,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2015-02-21 10:52+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/" +@@ -76,7 +76,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -235,6 +235,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -337,7 +341,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -389,7 +395,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -401,7 +407,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -413,7 +419,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -425,7 +431,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -503,7 +509,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -511,7 +517,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -523,7 +529,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -531,7 +537,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -558,7 +564,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -566,7 +572,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -574,15 +580,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -599,7 +605,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -614,7 +622,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -690,11 +698,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -718,7 +726,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -759,63 +767,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -827,39 +835,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -891,15 +899,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -915,7 +923,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -932,7 +940,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -979,15 +987,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -999,6 +1007,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1125,7 +1139,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1335,7 +1349,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1461,7 +1475,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1597,7 +1611,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1617,13 +1633,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1762,11 +1778,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1830,7 +1846,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1855,13 +1871,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1895,7 +1911,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1907,7 +1923,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1915,11 +1931,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/pl.po b/po/pl.po +index e6f6ab2e..33768e4f 100644 +--- a/po/pl.po ++++ b/po/pl.po +@@ -13,7 +13,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2022-07-29 13:49+0000\n" + "Last-Translator: Piotr Drąg \n" + "Language-Team: Polish = 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -395,7 +401,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -407,7 +413,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -419,7 +425,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "Kopiuje lokalne pliki lub katalogi do obrazu" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -431,7 +437,7 @@ msgstr "Tworzy katalog" + msgid "Create symbolic links" + msgstr "Tworzy dowiązania symboliczne" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -509,7 +515,7 @@ msgstr "" + msgid "FILENAME" + msgstr "NAZWA-PLIKU" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -517,7 +523,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "NAZWA-KOMPUTERA" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -529,7 +535,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -537,7 +543,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -564,7 +570,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -572,7 +578,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "Adres URI biblioteki libvirt" + +@@ -580,15 +586,15 @@ msgstr "Adres URI biblioteki libvirt" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -605,7 +611,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -620,7 +628,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -696,11 +704,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -724,7 +732,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -765,63 +773,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -833,39 +841,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -897,15 +905,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -921,7 +929,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -938,7 +946,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -985,15 +993,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -1005,6 +1013,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1131,7 +1145,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1339,7 +1353,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1465,7 +1479,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1601,7 +1615,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1621,13 +1637,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1766,11 +1782,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1834,7 +1850,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1859,14 +1875,14 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + msgstr[2] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1901,7 +1917,7 @@ msgstr "nieznana opcja --root: %s" + msgid "unknown -i option: %s" + msgstr "nieznana opcja -i: %s" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "nieznana opcja -o: %s" + +@@ -1913,7 +1929,7 @@ msgstr "nieznana opcja -oa: %s" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1921,11 +1937,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/si.po b/po/si.po +index a32848f0..b84ba845 100644 +--- a/po/si.po ++++ b/po/si.po +@@ -8,7 +8,7 @@ msgstr "" + "Project-Id-Version: virt-v2v 1.43.3\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: Automatically generated\n" + "Language-Team: none\n" +@@ -72,7 +72,7 @@ msgid "" + "%!" + msgstr "" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -231,6 +231,10 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "" + ++#: output/output_kubevirt.ml:56 ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -333,7 +337,9 @@ msgstr "" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "" + +@@ -385,7 +391,7 @@ msgstr "" + msgid "Attach to a subscription-manager pool" + msgstr "" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "" + +@@ -397,7 +403,7 @@ msgstr "" + msgid "Compatibility option doing nothing" + msgstr "" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "" + +@@ -409,7 +415,7 @@ msgstr "" + msgid "Copy local files or directories into image" + msgstr "" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "" + +@@ -421,7 +427,7 @@ msgstr "" + msgid "Create symbolic links" + msgstr "" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "" + +@@ -499,7 +505,7 @@ msgstr "" + msgid "FILENAME" + msgstr "" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "" + +@@ -507,7 +513,7 @@ msgstr "" + msgid "HOSTNAME" + msgstr "" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "" + +@@ -519,7 +525,7 @@ msgid "" + " %s -v -x [...]" + msgstr "" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "" + +@@ -527,7 +533,7 @@ msgstr "" + msgid "Inject a public key into the guest" + msgstr "" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "" + +@@ -554,7 +560,7 @@ msgid "" + "information on these settings.\n" + msgstr "" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "" + +@@ -562,7 +568,7 @@ msgstr "" + msgid "LOCALPATH:REMOTEDIR" + msgstr "" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "" + +@@ -570,15 +576,15 @@ msgstr "" + msgid "Make output machine readable" + msgstr "" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "" + +@@ -595,7 +601,9 @@ msgstr "" + msgid "No input options can be used in this mode.\n" + msgstr "" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "" + +@@ -610,7 +618,7 @@ msgid "" + "building rhsrvany (https://github.com/rwmjones/rhsrvany)" + msgstr "" + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "" + +@@ -686,11 +694,11 @@ msgstr "" + msgid "PKG,PKG.." + msgstr "" + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + +@@ -714,7 +722,7 @@ msgstr "" + msgid "Remove all the subscriptions" + msgstr "" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "" + +@@ -755,63 +763,63 @@ msgstr "" + msgid "SOURCE:DEST" + msgstr "" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "" + +@@ -823,39 +831,39 @@ msgstr "" + msgid "Scrub build log file" + msgstr "" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "" + +@@ -887,15 +895,15 @@ msgstr "" + msgid "Set user password" + msgstr "" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "" + +@@ -911,7 +919,7 @@ msgstr "" + msgid "TIMEZONE" + msgstr "" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "" +@@ -928,7 +936,7 @@ msgid "" + "v2v -- refer to virt-v2v(1) section \"BUGS\"." + msgstr "" + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -975,15 +983,15 @@ msgstr "" + msgid "Use ANSI colour sequences even if not tty" + msgstr "" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "" + +@@ -995,6 +1003,12 @@ msgstr "" + msgid "Write file" + msgstr "" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1121,7 +1135,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + +@@ -1329,7 +1343,7 @@ msgid "" + "block devices\"." + msgstr "" + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1455,7 +1469,7 @@ msgid "" + "you need to rerun virt-v2v as root." + msgstr "" + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + +@@ -1591,7 +1605,9 @@ msgstr "" + msgid "no -io (input options) are allowed here" + msgstr "" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "" + +@@ -1611,13 +1627,13 @@ msgstr "" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." + msgstr "" + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -1756,11 +1772,11 @@ msgstr "" + msgid "subprocess signalled or stopped by signal %d" + msgstr "" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "" + +@@ -1824,7 +1840,7 @@ msgstr "" + msgid "the value of the key ‘%s’ is not an object" + msgstr "" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -1849,13 +1865,13 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" + msgstr[1] "" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -1889,7 +1905,7 @@ msgstr "" + msgid "unknown -i option: %s" + msgstr "" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "" + +@@ -1901,7 +1917,7 @@ msgstr "" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "" + +@@ -1909,11 +1925,11 @@ msgstr "" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "" + +diff --git a/po/uk.po b/po/uk.po +index 095ea330..bf21a0ed 100644 +--- a/po/uk.po ++++ b/po/uk.po +@@ -12,9 +12,9 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug." +-"cgi?component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2022-12-10 12:01+0000\n" ++"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" ++"component=libguestfs&product=Virtualization+Tools\n" ++"POT-Creation-Date: 2023-01-10 14:53+0000\n" + "PO-Revision-Date: 2022-12-24 19:20+0000\n" + "Last-Translator: Yuri Chornoivan \n" + "Language-Team: Ukrainian =2 && " +-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" ++"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + "X-Generator: Weblate 4.15\n" + + #: input/input_ova.ml:134 common/mltools/tools_utils.ml:235 +@@ -95,7 +95,7 @@ msgstr "" + "%s: вихід за сигналом %s\n" + "%!" + +-#: v2v/v2v.ml:310 ++#: v2v/v2v.ml:311 + msgid "" + "%s: convert a guest to use KVM\n" + "\n" +@@ -315,6 +315,14 @@ msgstr "" + msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "-o disk: невідомий параметр виведення — «-oo %s»" + ++#: output/output_kubevirt.ml:56 ++#, fuzzy ++#| msgid "-o disk: output directory was not specified, use '-os /dir'" ++msgid "-o kubevirt: output directory was not specified, use '-os /dir'" ++msgstr "" ++"-o disk: не вказано каталогу для виведення даних, скористайтеся «-os /" ++"каталог»" ++ + #: output/output_libvirt.ml:115 + msgid "" + "-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See " +@@ -431,7 +439,9 @@ msgstr "-o vdsm: невідомий рівень vdsm-compat «%s»" + msgid "-oo compressed option requires nbdcopy >= 1.13.5" + msgstr "використання параметра -oo compressed потребує nbdcopy >= 1.13.5" + +-#: output/output_vdsm.ml:111 output/output_qemu.ml:74 output/output_disk.ml:68 ++#. output/output_kubevirt.ml:58 ++#. output/output_disk.ml:68 ++#: output/output_vdsm.ml:111 output/output_qemu.ml:74 + msgid "-os %s: output directory does not exist or is not a directory" + msgstr "-os %s: каталогу виведення даних не існує або вказано не каталог" + +@@ -488,7 +498,7 @@ msgstr "Дописати рядки до файла" + msgid "Attach to a subscription-manager pool" + msgstr "Долучити до буфера subscription-manager" + +-#: v2v/v2v.ml:273 ++#: v2v/v2v.ml:274 + msgid "Boot in qemu (-o qemu only)" + msgstr "Завантажитися у qemu (лише для -o qemu)" + +@@ -500,7 +510,7 @@ msgstr "Змінити права доступу до файла" + msgid "Compatibility option doing nothing" + msgstr "Параметр сумісності ні на що не впливає" + +-#: v2v/v2v.ml:231 ++#: v2v/v2v.ml:232 + msgid "Compress output file (-of qcow2 only)" + msgstr "Стиснути файл виведення (лише для -of qcow2)" + +@@ -512,7 +522,7 @@ msgstr "Копіювати файли на образ диска" + msgid "Copy local files or directories into image" + msgstr "Копіювати локальні файли або каталоги до образу" + +-#: v2v/v2v.ml:583 ++#: v2v/v2v.ml:586 + msgid "Copying disk %d/%d" + msgstr "Копіювання диска %d з %d" + +@@ -524,7 +534,7 @@ msgstr "Створити каталог" + msgid "Create symbolic links" + msgstr "Створювати символічні посилання" + +-#: v2v/v2v.ml:604 ++#: v2v/v2v.ml:607 + msgid "Creating output metadata" + msgstr "Створюємо метадані результатів" + +@@ -602,7 +612,7 @@ msgstr "ФАЙЛ:РЯДОК" + msgid "FILENAME" + msgstr "НАЗВА_ФАЙЛА" + +-#: v2v/v2v.ml:608 inspector/inspector.ml:358 in-place/in_place.ml:341 ++#: v2v/v2v.ml:611 inspector/inspector.ml:358 in-place/in_place.ml:341 + msgid "Finishing off" + msgstr "Завершуємо" + +@@ -610,7 +620,7 @@ msgstr "Завершуємо" + msgid "HOSTNAME" + msgstr "НАЗВА_ВУЗЛА" + +-#: v2v/v2v.ml:275 inspector/inspector.ml:178 in-place/in_place.ml:174 ++#: v2v/v2v.ml:276 inspector/inspector.ml:178 in-place/in_place.ml:174 + msgid "How to choose root filesystem" + msgstr "Як вибрати кореневу файлову систему" + +@@ -626,7 +636,7 @@ msgstr "" + "\n" + " %s -v -x [...]" + +-#: v2v/v2v.ml:305 v2v/v2v.ml:251 ++#: v2v/v2v.ml:306 v2v/v2v.ml:252 + msgid "Ignored for backwards compatibility" + msgstr "Ігноровано, для зворотної сумісності" + +@@ -634,7 +644,7 @@ msgstr "Ігноровано, для зворотної сумісності" + msgid "Inject a public key into the guest" + msgstr "Вставити відкритий ключ до гостьової системи" + +-#: v2v/v2v.ml:237 inspector/inspector.ml:166 in-place/in_place.ml:162 ++#: v2v/v2v.ml:238 inspector/inspector.ml:166 in-place/in_place.ml:162 + msgid "Input format" + msgstr "Формат вхідних даних" + +@@ -682,7 +692,7 @@ msgstr "" + "більше\n" + "про ці параметри.\n" + +-#: v2v/v2v.ml:243 inspector/inspector.ml:172 ++#: v2v/v2v.ml:244 inspector/inspector.ml:172 + msgid "Input transport" + msgstr "Вхідне передавання" + +@@ -690,7 +700,7 @@ msgstr "Вхідне передавання" + msgid "LOCALPATH:REMOTEDIR" + msgstr "ЛОКАЛЬНИЙШЛЯХ:ВІДДАЛЕНИЙКАТАЛОГ" + +-#: v2v/v2v.ml:235 inspector/inspector.ml:164 in-place/in_place.ml:160 ++#: v2v/v2v.ml:236 inspector/inspector.ml:164 in-place/in_place.ml:160 + msgid "Libvirt URI" + msgstr "Адреса libvirt" + +@@ -698,16 +708,16 @@ msgstr "Адреса libvirt" + msgid "Make output machine readable" + msgstr "Зробити машину виведення придатною до читання" + +-#: v2v/v2v.ml:247 inspector/inspector.ml:174 in-place/in_place.ml:168 ++#: v2v/v2v.ml:248 inspector/inspector.ml:174 in-place/in_place.ml:168 + msgid "Map NIC to network or bridge or assign static IP" + msgstr "" + "Пов'язати NIC із мережею або містком чи пов'язати із ним статичну IP-адресу" + +-#: v2v/v2v.ml:229 inspector/inspector.ml:160 in-place/in_place.ml:156 ++#: v2v/v2v.ml:230 inspector/inspector.ml:160 in-place/in_place.ml:156 + msgid "Map bridge ‘in’ to ‘out’" + msgstr "Відобразити місток «in» на «out»" + +-#: v2v/v2v.ml:249 inspector/inspector.ml:176 in-place/in_place.ml:170 ++#: v2v/v2v.ml:250 inspector/inspector.ml:176 in-place/in_place.ml:170 + msgid "Map network ‘in’ to ‘out’" + msgstr "Пов'язати мережу «in» із мережею «out»" + +@@ -724,7 +734,9 @@ msgstr "Пересунути файли на образ диска" + msgid "No input options can be used in this mode.\n" + msgstr "У цьому режимі не можна використовувати параметри вхідних даних.\n" + +-#: output/output_rhv.ml:40 output/output_null.ml:38 output/output_glance.ml:40 ++#. output/output_glance.ml:40 ++#: output/output_rhv.ml:40 output/output_null.ml:38 ++#: output/output_kubevirt.ml:44 + msgid "No output options can be used in this mode.\n" + msgstr "У цьому режимі не можна використовувати параметри виведення.\n" + +@@ -743,7 +755,7 @@ msgstr "" + "Windows. Отримати цей файл можна зібравши rhsrvany (https://github.com/" + "rwmjones/rhsrvany)." + +-#: v2v/v2v.ml:257 ++#: v2v/v2v.ml:258 + msgid "Output hypervisor connection" + msgstr "Вивести з'єднання гіпервізора" + +@@ -863,11 +875,11 @@ msgstr "ПРАВА_ДОСТУПУ:ФАЙЛ" + msgid "PKG,PKG.." + msgstr "ПАКУНОК,ПАКУНОК.." + +-#: v2v/v2v.ml:271 in-place/in_place.ml:172 ++#: v2v/v2v.ml:272 in-place/in_place.ml:172 + msgid "Print source and stop" + msgstr "Вивести джерело і припинити обробку" + +-#: lib/create_ovf.ml:865 lib/create_ovf.ml:509 ++#: lib/create_ovf.ml:874 lib/create_ovf.ml:518 + msgid "RHV does not support the output format ‘%s’, only raw or qcow2" + msgstr "" + "У RHV не передбачено формату виведення даних «‘%s», лише формати raw та qcow2" +@@ -892,7 +904,7 @@ msgstr "Зареєструвати за допомогою subscription-manager" + msgid "Remove all the subscriptions" + msgstr "Вилучити усі підписки" + +-#: v2v/v2v.ml:261 ++#: v2v/v2v.ml:262 + msgid "Rename guest when converting" + msgstr "Перейменувати гостьову систему під час перетворення" + +@@ -933,63 +945,63 @@ msgstr "СЕЛЕКТОР" + msgid "SOURCE:DEST" + msgstr "ДЖЕРЕЛО:ПРИЗНАЧЕННЯ" + +-#: v2v/v2v.ml:277 ++#: v2v/v2v.ml:278 + msgid "Same as ‘-io vddk-config=filename’" + msgstr "Те саме, що і «-io vddk-config=назва_файла»" + +-#: v2v/v2v.ml:279 ++#: v2v/v2v.ml:280 + msgid "Same as ‘-io vddk-cookie=filename’" + msgstr "Те саме, що і «-io vddk-cookie=назва_файла»" + +-#: v2v/v2v.ml:281 ++#: v2v/v2v.ml:282 + msgid "Same as ‘-io vddk-libdir=libdir’" + msgstr "Те саме, що і «-io vddk-libdir=каталог_бібліотек»" + +-#: v2v/v2v.ml:283 ++#: v2v/v2v.ml:284 + msgid "Same as ‘-io vddk-nfchostport=nfchostport’" + msgstr "Те саме, що і «-io vddk-nfchostport=nfchostport»" + +-#: v2v/v2v.ml:285 ++#: v2v/v2v.ml:286 + msgid "Same as ‘-io vddk-port=port’" + msgstr "Те саме, що і «-io vddk-port=порт»" + +-#: v2v/v2v.ml:287 ++#: v2v/v2v.ml:288 + msgid "Same as ‘-io vddk-snapshot=snapshot-moref’" + msgstr "Те саме, що і «-io vddk-snapshot=snapshot-moref»" + +-#: v2v/v2v.ml:289 ++#: v2v/v2v.ml:290 + msgid "Same as ‘-io vddk-thumbprint=thumbprint’" + msgstr "Те саме, що і «-io vddk-thumbprint=відбиток»" + +-#: v2v/v2v.ml:291 ++#: v2v/v2v.ml:292 + msgid "Same as ‘-io vddk-transports=transports’" + msgstr "Те саме, що і «-io vddk-transports=способи_передавання»" + +-#: v2v/v2v.ml:269 ++#: v2v/v2v.ml:270 + msgid "Same as ‘-ip filename’" + msgstr "Те саме, що і «-ip назва_файла»" + +-#: v2v/v2v.ml:293 ++#: v2v/v2v.ml:294 + msgid "Same as ‘-oo vdsm-compat=0.10|1.1’" + msgstr "Те саме, що і «-oo vdsm-compat=0.10|1.1»" + +-#: v2v/v2v.ml:295 ++#: v2v/v2v.ml:296 + msgid "Same as ‘-oo vdsm-image-uuid=uuid’" + msgstr "Те саме, що і «-oo vdsm-image-uuid=uuid»" + +-#: v2v/v2v.ml:303 ++#: v2v/v2v.ml:304 + msgid "Same as ‘-oo vdsm-ovf-flavour=flavour’" + msgstr "Те саме, що і «-oo vdsm-ovf-flavour=варіант»" + +-#: v2v/v2v.ml:301 ++#: v2v/v2v.ml:302 + msgid "Same as ‘-oo vdsm-ovf-output=dir’" + msgstr "Те саме, що і «-oo vdsm-ovf-output=каталог»" + +-#: v2v/v2v.ml:299 ++#: v2v/v2v.ml:300 + msgid "Same as ‘-oo vdsm-vm-uuid=uuid’" + msgstr "Те саме, що і «-oo vdsm-vm-uuid=uuid»" + +-#: v2v/v2v.ml:297 ++#: v2v/v2v.ml:298 + msgid "Same as ‘-oo vdsm-vol-uuid=uuid’" + msgstr "Те саме, що і «-oo vdsm-vol-uuid=uuid»" + +@@ -1001,39 +1013,39 @@ msgstr "Витерти файл" + msgid "Scrub build log file" + msgstr "Витерти файл журналу збирання" + +-#: v2v/v2v.ml:227 ++#: v2v/v2v.ml:228 + msgid "Set bandwidth dynamically from file" + msgstr "Встановити ширину каналу динамічно з файла" + +-#: v2v/v2v.ml:225 ++#: v2v/v2v.ml:226 + msgid "Set bandwidth to bits per sec" + msgstr "Встановити ширину каналу у бітах за секунду" + +-#: v2v/v2v.ml:233 inspector/inspector.ml:162 in-place/in_place.ml:158 ++#: v2v/v2v.ml:234 inspector/inspector.ml:162 in-place/in_place.ml:158 + msgid "Set input mode (default: libvirt)" + msgstr "Встановити режим введення даних (типовий: libvirt)" + +-#: v2v/v2v.ml:239 inspector/inspector.ml:168 in-place/in_place.ml:164 ++#: v2v/v2v.ml:240 inspector/inspector.ml:168 in-place/in_place.ml:164 + msgid "Set option for input mode" + msgstr "Встановити варіант для режиму вхідних даних" + +-#: v2v/v2v.ml:263 ++#: v2v/v2v.ml:264 + msgid "Set option for output mode" + msgstr "Встановити варіант для режиму виведення" + +-#: v2v/v2v.ml:255 ++#: v2v/v2v.ml:256 + msgid "Set output allocation mode" + msgstr "Встановити режим отримання пам’яті для виведення даних" + +-#: v2v/v2v.ml:259 ++#: v2v/v2v.ml:260 + msgid "Set output format" + msgstr "встановити формат виведення даних" + +-#: v2v/v2v.ml:253 ++#: v2v/v2v.ml:254 + msgid "Set output mode (default: libvirt)" + msgstr "Встановити режим виведення (типовий: libvirt)" + +-#: v2v/v2v.ml:267 ++#: v2v/v2v.ml:268 + msgid "Set output storage location" + msgstr "Встановити розташування сховища виведених даних" + +@@ -1065,15 +1077,15 @@ msgstr "Встановити назву файла результатів" + msgid "Set user password" + msgstr "Встановити пароль користувача" + +-#: v2v/v2v.ml:555 ++#: v2v/v2v.ml:558 + msgid "Setting up the destination: %s" + msgstr "Налаштовуємо призначення: %s" + +-#: v2v/v2v.ml:531 inspector/inspector.ml:334 in-place/in_place.ml:307 ++#: v2v/v2v.ml:534 inspector/inspector.ml:334 in-place/in_place.ml:307 + msgid "Setting up the source: %s" + msgstr "Налаштовуємо джерело: %s" + +-#: v2v/v2v.ml:537 in-place/in_place.ml:313 ++#: v2v/v2v.ml:540 in-place/in_place.ml:313 + msgid "Source guest information (--print-source option):\n" + msgstr "Дані щодо гостьової системи джерела (параметр --print-source):\n" + +@@ -1089,7 +1101,7 @@ msgstr "ПРИЗНАЧЕННЯ:ПОСИЛАННЯ[:ПОСИЛАННЯ..]" + msgid "TIMEZONE" + msgstr "ЧАСОВИЙ_ПОЯС" + +-#: v2v/v2v.ml:219 ++#: v2v/v2v.ml:220 + msgid "" + "The --in-place option has been replaced by the ‘virt-v2v-in-place’ program" + msgstr "Параметр --in-place замінено на програму «virt-v2v-in-place»" +@@ -1112,7 +1124,7 @@ msgstr "" + "про ваду у virt-v2v — скористайтеся розділом «BUGS» сторінки підручника virt-" + "v2v(1)." + +-#: lib/create_ovf.ml:776 ++#: lib/create_ovf.ml:785 + msgid "" + "This guest required a password for connection to its display, but this is " + "not supported by RHV. Therefore the converted guest’s display will not " +@@ -1167,15 +1179,15 @@ msgstr "Вивантажити локальний файл у систему п + msgid "Use ANSI colour sequences even if not tty" + msgstr "Використовувати послідовності ANSI для кольорів, навіть якщо це не tty" + +-#: v2v/v2v.ml:241 inspector/inspector.ml:170 in-place/in_place.ml:166 ++#: v2v/v2v.ml:242 inspector/inspector.ml:170 in-place/in_place.ml:166 + msgid "Use password from file to connect to input hypervisor" + msgstr "Скористатися паролем з файла для з'єднання із вхідним гіпервізором" + +-#: v2v/v2v.ml:265 ++#: v2v/v2v.ml:266 + msgid "Use password from file to connect to output hypervisor" + msgstr "Скористатися паролем з файла для з'єднання із вихідним гіпервізором" + +-#: v2v/v2v.ml:245 ++#: v2v/v2v.ml:246 + msgid "Use virt-v2v-in-place instead" + msgstr "Скористайтеся краще virt-v2v-in-place" + +@@ -1187,6 +1199,12 @@ msgstr "Переносити рядки повідомлень журналу, + msgid "Write file" + msgstr "Записати файл" + ++#: lib/YAML.ml:162 ++msgid "" ++"YAML block contains newline character. This should not happen, please " ++"report a bug against virt-v2v." ++msgstr "" ++ + #: input/input_vddk.ml:98 + msgid "" + "You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of " +@@ -1365,7 +1383,7 @@ msgstr "" + #. input/input_vddk.ml:122 + #. input/input_vcenter_https.ml:91 + #. in-place/in_place.ml:257 +-#: v2v/v2v.ml:421 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 ++#: v2v/v2v.ml:423 inspector/inspector.ml:263 input/input_xen_ssh.ml:69 + msgid "could not parse '-ic %s'. Original error message was: %s" + msgstr "" + "не вдалося обробити параметр «-ic %s». Початкове повідомлення щодо помилки: " +@@ -1609,7 +1627,7 @@ msgstr "" + "дисків, які зберігаються на віддалених блокових пристроях. Див. підручник з " + "virt-v2v-input-xen(1), розділ «Xen or ssh conversions from block devices»." + +-#: v2v/v2v.ml:627 inspector/inspector.ml:377 in-place/in_place.ml:360 ++#: v2v/v2v.ml:630 inspector/inspector.ml:377 in-place/in_place.ml:360 + msgid "" + "insufficient free space in the conversion server temporary directory %s " + "(%s).\n" +@@ -1754,7 +1772,7 @@ msgstr "" + "того, можливо, вам слід повторно запустити virt-v2v від імені користувача " + "root." + +-#: v2v/v2v.ml:660 ++#: v2v/v2v.ml:663 + msgid "nbdcopy command failed, see earlier error messages" + msgstr "" + "помилка під час спроби виконати nbdcopy, див. попередні повідомлення щодо " +@@ -1935,7 +1953,9 @@ msgstr "nbdkit: неочікувана версія у --dump-config: %s" + msgid "no -io (input options) are allowed here" + msgstr "тут не можна використовувати -io (вхідні параметри)" + +-#: output/output_rhv.ml:44 output/output_null.ml:42 output/output_glance.ml:44 ++#. output/output_glance.ml:44 ++#: output/output_rhv.ml:44 output/output_null.ml:42 ++#: output/output_kubevirt.ml:48 + msgid "no -oo (output options) are allowed here" + msgstr "тут не можна використовувати -oo (параметри виведення)" + +@@ -1955,7 +1975,7 @@ msgstr "немає href у ovf:File (id=%s)" + msgid "no python binary called ‘%s’ can be found on the $PATH" + msgstr "не знайдено виконуваного файла python із назвою «%s» у $PATH" + +-#: v2v/v2v.ml:451 inspector/inspector.ml:293 ++#: v2v/v2v.ml:453 inspector/inspector.ml:293 + msgid "" + "no support for remote libvirt connections to '-ic %s'. The conversion may " + "fail when it tries to read the source disks." +@@ -1963,7 +1983,7 @@ msgstr "" + "немає підтримки віддалених з’єднань libvirt з «-ic %s». Перетворення може " + "призвести до помилок під час спроб прочитати диски джерел даних." + +-#: lib/create_ovf.ml:1015 ++#: lib/create_ovf.ml:1024 + msgid "" + "oVirt cannot emulate ‘%s’ sound cards. This sound card will be dropped from " + "the output." +@@ -2141,12 +2161,12 @@ msgstr "підпроцес завершив роботу з ненульовим + msgid "subprocess signalled or stopped by signal %d" + msgstr "підпроцес надіслав сигнал або зупинив роботу внаслідок сигналу %d" + +-#: v2v/v2v.ml:211 ++#: v2v/v2v.ml:212 + msgid "the --no-trim option has been removed and now does nothing" + msgstr "" + "параметр --no-trim вилучено зі списку параметрів, тепер він не потрібен" + +-#: v2v/v2v.ml:214 ++#: v2v/v2v.ml:215 + msgid "the --vmtype option has been removed and now does nothing" + msgstr "параметр --vmtype вилучено зі списку параметрів, тепер він не потрібен" + +@@ -2219,7 +2239,7 @@ msgstr "значення не є об’єктом" + msgid "the value of the key ‘%s’ is not an object" + msgstr "значенням ключа «%s» не є об’єкт" + +-#: lib/create_ovf.ml:515 ++#: lib/create_ovf.ml:524 + msgid "" + "the virtual size of the input disk %d is not an exact multiple of 512 " + "bytes. The virtual size is: %Ld.\n" +@@ -2252,7 +2272,7 @@ msgstr "" + msgid "there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?" + msgstr "у %s (%s) немає UUID. Це справді OVirt чи RHV-M %s?" + +-#: input/parse_libvirt_xml.ml:483 ++#: input/parse_libvirt_xml.ml:494 + msgid "this guest has a direct network interface which will be ignored" + msgid_plural "this guest has direct network interfaces which will be ignored" + msgstr[0] "" +@@ -2265,7 +2285,7 @@ msgstr[2] "" + "ця гостьова система має безпосередні інтерфейси мережі, які буде " + "проігноровано" + +-#: input/parse_libvirt_xml.ml:465 ++#: input/parse_libvirt_xml.ml:476 + msgid "this guest has a passthrough host device which will be ignored" + msgid_plural "this guest has passthrough host devices which will be ignored" + msgstr[0] "" +@@ -2307,7 +2327,7 @@ msgstr "невідомий параметр --root: %s" + msgid "unknown -i option: %s" + msgstr "невідомий параметр -i: %s" + +-#: v2v/v2v.ml:206 ++#: v2v/v2v.ml:207 + msgid "unknown -o option: %s" + msgstr "невідомий параметр -o: %s" + +@@ -2319,7 +2339,7 @@ msgstr "невідомий параметр -oa: %s" + msgid "unknown Config:firmware value %s (expected \"bios\" or \"efi\")" + msgstr "невідоме значення Config:firmware %s (мало бути «bios» або «efi»)" + +-#: lib/create_ovf.ml:246 ++#: lib/create_ovf.ml:452 lib/create_ovf.ml:246 + msgid "unknown Windows 10 variant: %s (%s)" + msgstr "невідомий варіант Windows 10: %s (%s)" + +@@ -2327,11 +2347,11 @@ msgstr "невідомий варіант Windows 10: %s (%s)" + msgid "unknown firmware value '%s', assuming BIOS" + msgstr "невідоме значення мікропрограми, «%s», припускаємо BIOS" + +-#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:451 lib/create_ovf.ml:254 ++#: output/create_libvirt_xml.ml:143 lib/create_ovf.ml:460 lib/create_ovf.ml:254 + msgid "unknown guest operating system: %s %s %d.%d %s (%s)" + msgstr "невідома гостьова операційна система: %s %s %d.%d %s (%s)" + +-#: v2v/v2v.ml:358 inspector/inspector.ml:222 ++#: v2v/v2v.ml:359 inspector/inspector.ml:222 + msgid "unknown input transport ‘-it %s’" + msgstr "невідомий вхідний канал передавання «-it %s»" + diff --git a/SOURCES/0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch b/SOURCES/0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch deleted file mode 100644 index 95dfe7c..0000000 --- a/SOURCES/0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 8ee8aec8739c6c0a4024ad187be56f525e8089c0 Mon Sep 17 00:00:00 2001 -From: Pino Toscano -Date: Wed, 8 Mar 2017 11:03:40 +0100 -Subject: [PATCH] RHEL: v2v: do not mention SUSE Xen hosts (RHBZ#1430203) - -They are not supported in RHEL. ---- - docs/virt-v2v-input-xen.pod | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod -index 8080ebea..ad5772de 100644 ---- a/docs/virt-v2v-input-xen.pod -+++ b/docs/virt-v2v-input-xen.pod -@@ -11,7 +11,7 @@ virt-v2v-input-xen - Using virt-v2v to convert guests from Xen - =head1 DESCRIPTION - - This page documents how to use L to convert guests from --RHEL 5 Xen, or SLES and OpenSUSE Xen hosts. -+RHEL 5 Xen hosts. - - =head1 INPUT FROM XEN - diff --git a/SOURCES/0006-Translated-using-Weblate-Ukrainian.patch b/SOURCES/0006-Translated-using-Weblate-Ukrainian.patch new file mode 100644 index 0000000..db0181a --- /dev/null +++ b/SOURCES/0006-Translated-using-Weblate-Ukrainian.patch @@ -0,0 +1,66 @@ +From e8c61da73b62b6acf13543e9421db0b0e2a43a1a Mon Sep 17 00:00:00 2001 +From: Yuri Chornoivan +Date: Sat, 14 Jan 2023 22:20:05 +0100 +Subject: [PATCH] Translated using Weblate (Ukrainian) + +Currently translated at 100.0% (441 of 441 strings) + +Translation: libguestfs/virt-v2v-master +Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/virt-v2v-master/uk/ +--- + po/uk.po | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/po/uk.po b/po/uk.po +index bf21a0ed..f524482a 100644 +--- a/po/uk.po ++++ b/po/uk.po +@@ -12,10 +12,10 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug." ++"cgi?component=libguestfs&product=Virtualization+Tools\n" + "POT-Creation-Date: 2023-01-10 14:53+0000\n" +-"PO-Revision-Date: 2022-12-24 19:20+0000\n" ++"PO-Revision-Date: 2023-01-14 21:20+0000\n" + "Last-Translator: Yuri Chornoivan \n" + "Language-Team: Ukrainian \n" +@@ -23,8 +23,8 @@ msgstr "" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" ++"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " ++"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + "X-Generator: Weblate 4.15\n" + + #: input/input_ova.ml:134 common/mltools/tools_utils.ml:235 +@@ -316,12 +316,10 @@ msgid "-o disk: unknown output option ‘-oo %s’" + msgstr "-o disk: невідомий параметр виведення — «-oo %s»" + + #: output/output_kubevirt.ml:56 +-#, fuzzy +-#| msgid "-o disk: output directory was not specified, use '-os /dir'" + msgid "-o kubevirt: output directory was not specified, use '-os /dir'" + msgstr "" +-"-o disk: не вказано каталогу для виведення даних, скористайтеся «-os /" +-"каталог»" ++"-o kubevirt: не вказано каталогу для виведення даних, скористайтеся «-os " ++"/каталог»" + + #: output/output_libvirt.ml:115 + msgid "" +@@ -1204,6 +1202,8 @@ msgid "" + "YAML block contains newline character. This should not happen, please " + "report a bug against virt-v2v." + msgstr "" ++"Блок YAML містить символ розриву рядка. Такого не мало трапитися. Будь " ++"ласка, повідомте про цю ваду у virt-v2v." + + #: input/input_vddk.ml:98 + msgid "" diff --git a/SOURCES/0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch b/SOURCES/0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch deleted file mode 100644 index 922f52f..0000000 --- a/SOURCES/0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch +++ /dev/null @@ -1,124 +0,0 @@ -From fd0c34d843bb5ba9e1b33e0dfd1250943c760a70 Mon Sep 17 00:00:00 2001 -From: Pino Toscano -Date: Tue, 26 Mar 2019 09:42:25 +0100 -Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests - ---- - docs/virt-v2v-support.pod | 104 ++------------------------------------ - 1 file changed, 4 insertions(+), 100 deletions(-) - -diff --git a/docs/virt-v2v-support.pod b/docs/virt-v2v-support.pod -index 9815f51f..1ffc0f9d 100644 ---- a/docs/virt-v2v-support.pod -+++ b/docs/virt-v2v-support.pod -@@ -8,106 +8,10 @@ systems and guests in virt-v2v - This page documents which foreign hypervisors, virtualization - management systems and guest types that L can support. - --Note this page applies to upstream virt-v2v from --L and in downstream distributions of virt-v2v --sometimes features are intentionally removed, or are present but not --supported. -- --=head2 Hypervisors (Input) -- --=over 4 -- --=item VMware ESXi -- --Must be managed by VMware vCenter E 5.0 unless VDDK is available. -- --=item OVA exported from VMware -- --OVAs from other hypervisors will not work. -- --=item VMX from VMware -- --VMX files generated by other hypervisors will not work. -- --=item RHEL 5 Xen -- --=item SUSE Xen -- --=item Citrix Xen -- --Citrix Xen has not been recently tested. -- --=item Hyper-V -- --Not recently tested. Requires that you export the disk or use --L on Hyper-V. -- --=item Direct from disk images -- --Only disk images exported from supported hypervisors, and using --container formats supported by qemu. -- --=item Physical machines -- --Using the L tool. -- --=back -- --=head2 Hypervisors (Output) -- --QEMU and KVM only. -- --=head2 Virtualization management systems (Output) -- --=over 4 -- --=item OpenStack -- --=item Red Hat Virtualization (RHV) 4.1 and up -- --=item Local libvirt -- --And hence L, L, and similar tools. -- --=item Local disk -- --=back -- --=head2 Guests -- --=over 4 -- --=item Red Hat Enterprise Linux 3, 4, 5, 6, 7 -- --=item CentOS 3, 4, 5, 6, 7 -- --=item Scientific Linux 3, 4, 5, 6, 7 -- --=item Oracle Linux -- --=item Fedora -- --=item SLES 10 and up -- --=item OpenSUSE 10 and up -- --=item ALT Linux 9 and up -- --=item Debian 6 and up -- --=item Ubuntu 10.04, 12.04, 14.04, 16.04, and up -- --=item Windows XP to Windows 10 / Windows Server 2016 -- --We use Windows internal version numbers, see --L -- --Currently NT 5.2 to NT 6.3 are supported. -- --See L below for additional notes on converting Windows --guests. -- --=back -+For more information on supported hypervisors, and guest types in -+RHEL, please consult the following Knowledgebase article on these -+Red Hat Customer Portal: -+L. - - =head2 Guest firmware - diff --git a/SOURCES/0007-convert-windows-Remove-extraneous-blank-lines-in-sou.patch b/SOURCES/0007-convert-windows-Remove-extraneous-blank-lines-in-sou.patch new file mode 100644 index 0000000..942f015 --- /dev/null +++ b/SOURCES/0007-convert-windows-Remove-extraneous-blank-lines-in-sou.patch @@ -0,0 +1,34 @@ +From fd9694a3a2ea2911335cd3a85558a92b14d946fc Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 16 Jan 2023 12:19:29 +0000 +Subject: [PATCH] convert: windows: Remove extraneous blank lines in source + +--- + convert/convert_windows.ml | 1 - + convert/windows_virtio.ml | 1 - + 2 files changed, 2 deletions(-) + +diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml +index 57a7ff03..b0436fe4 100644 +--- a/convert/convert_windows.ml ++++ b/convert/convert_windows.ml +@@ -476,7 +476,6 @@ let convert (g : G.guestfs) _ inspect _ static_ips = + (sprintf "install-%s.ps1" msi_path) !psh_script; + ) files + +- + and unconfigure_xenpv () = + match xenpv_uninst with + | None -> () (* nothing to be uninstalled *) +diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml +index d9fda13f..2ce92ece 100644 +--- a/convert/windows_virtio.ml ++++ b/convert/windows_virtio.ml +@@ -215,7 +215,6 @@ and copy_qemu_ga g inspect = + (fun () -> + error (f_"root directory ‘/’ is missing from the virtio-win directory or ISO.\n\nThis should not happen and may indicate that virtio-win or virt-v2v is broken in some way. Please report this as a bug with a full debug log.")) + +- + (* Copy all files from virtio_win directory/ISO located in [srcdir] + * subdirectory and all its subdirectories to the [destdir]. The directory + * hierarchy is not preserved, meaning all files will be directly in [destdir]. diff --git a/SOURCES/0008-RHEL-Disable-o-glance.patch b/SOURCES/0008-RHEL-Disable-o-glance.patch deleted file mode 100644 index cbb09e1..0000000 --- a/SOURCES/0008-RHEL-Disable-o-glance.patch +++ /dev/null @@ -1,216 +0,0 @@ -From 14507902a675fd2e0356c0faf67524eb04e974d2 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Wed, 30 Jun 2021 11:15:52 +0100 -Subject: [PATCH] RHEL: Disable -o glance - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1977539 ---- - docs/virt-v2v-output-openstack.pod | 56 ++---------------------------- - docs/virt-v2v.pod | 20 ----------- - output/output_glance.mli | 2 +- - tests/test-v2v-o-glance.sh | 3 ++ - v2v/v2v.ml | 7 +--- - 5 files changed, 7 insertions(+), 81 deletions(-) - -diff --git a/docs/virt-v2v-output-openstack.pod b/docs/virt-v2v-output-openstack.pod -index f5a3abad..1ab356e8 100644 ---- a/docs/virt-v2v-output-openstack.pod -+++ b/docs/virt-v2v-output-openstack.pod -@@ -10,13 +10,10 @@ virt-v2v-output-openstack - Using virt-v2v to convert guests to OpenStack - [-oo verify-server-certificate=false] - [-oo os-username=admin] [-oo os-*=*] - -- virt-v2v [-i* options] -o glance -- - =head1 DESCRIPTION - - This page documents how to use L to convert guests to run --on OpenStack. There are two output modes you can select, but only --I<-o openstack> should be used normally. -+on OpenStack. - - =over 4 - -@@ -27,15 +24,6 @@ Full description: L - This is the modern method for uploading to OpenStack via the REST API. - Guests can be directly converted into Cinder volumes. - --=item B<-o glance> -- --Full description: L -- --This is the old method for uploading to Glance. Unfortunately Glance --is not well suited to storing converted guests (since virt-v2v deals --with "pets" not templated "cattle"), so this method is not recommended --unless you really know what you are doing. -- - =back - - =head1 OUTPUT TO OPENSTACK -@@ -170,50 +158,10 @@ no Cinder volume type is used. - The following options are B supported with OpenStack: I<-oa>, - I<-of>. - --=head1 OUTPUT TO GLANCE -- --Note this is a legacy option. In most cases you should use --L instead. -- --To output to OpenStack Glance, use the I<-o glance> option. -- --This runs the L CLI program which must be installed on the --virt-v2v conversion host. For authentication to work, you will need --to set C environment variables. -- --Normally there is a file called C or C --which you can simply C to set everything up. -- --Virt-v2v adds metadata for the guest to Glance, describing such things --as the guest operating system and what drivers it requires. The --command C will display the metadata as "Property" --fields such as C and C. -- --=head2 Glance and sparseness -- --Glance image upload doesn't appear to correctly handle sparseness. --For this reason, using qcow2 will be faster and use less space on the --Glance server. Use the virt-v2v S> option. -- --=head2 Glance and multiple disks -- --If the guest has a single disk, then the name of the disk in Glance --will be the name of the guest. You can control this using the I<-on> --option. -- --Glance doesn't have a concept of associating multiple disks with a --single guest, and Nova doesn't allow you to boot a guest from multiple --Glance disks either. If the guest has multiple disks, then the first --(assumed to be the system disk) will have the name of the guest, and --the second and subsequent data disks will be called --C-disk2>, C-disk3> etc. It may be best to --leave the system disk in Glance, and import the data disks to Cinder. -- - =head1 SEE ALSO - - L, --L, --L. -+L. - - =head1 AUTHOR - -diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 7d0bafff..84e049cc 100644 ---- a/docs/virt-v2v.pod -+++ b/docs/virt-v2v.pod -@@ -416,14 +416,6 @@ See L below. - - This is the same as I<-o local>. - --=item B<-o> B -- --This is a legacy option. You should probably use I<-o openstack> --instead. -- --Set the output method to OpenStack Glance. In this mode the converted --guest is uploaded to Glance. See L. -- - =item B<-o> B - - This option is deprecated and will be removed in S. -@@ -1148,11 +1140,6 @@ and output methods may use disk space, as outlined in the table below. - This temporarily places a full copy of the uncompressed source disks - in C<$VIRT_V2V_TMPDIR> (or F). - --=item I<-o glance> -- --This temporarily places a full copy of the output disks in --C<$VIRT_V2V_TMPDIR> (or F). -- - =item I<-o local> - - =item I<-o qemu> -@@ -1336,13 +1323,6 @@ instance. - Because of how Cinder volumes are presented as F block devices, - using I<-o openstack> normally requires that virt-v2v is run as root. - --=item Writing to Glance -- --This does I need root (in fact it probably won’t work), but may --require either a special user and/or for you to source a script that --sets authentication environment variables. Consult the Glance --documentation. -- - =item Writing to block devices - - This normally requires root. See the next section. -diff --git a/output/output_glance.mli b/output/output_glance.mli -index 972320a2..9befc461 100644 ---- a/output/output_glance.mli -+++ b/output/output_glance.mli -@@ -18,4 +18,4 @@ - - (** [-o glance] output mode. *) - --module Glance : Output.OUTPUT -+(*module Glance : Output.OUTPUT*) -diff --git a/tests/test-v2v-o-glance.sh b/tests/test-v2v-o-glance.sh -index c0db9115..074b5e16 100755 ---- a/tests/test-v2v-o-glance.sh -+++ b/tests/test-v2v-o-glance.sh -@@ -20,6 +20,9 @@ - - set -e - -+# Feature is disabled in RHEL 9. -+exit 77 -+ - source ./functions.sh - set -e - set -x -diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 97b4e4ec..41e020cb 100644 ---- a/v2v/v2v.ml -+++ b/v2v/v2v.ml -@@ -192,7 +192,6 @@ let rec main () = - if !output_mode <> `Not_set then - error (f_"%s option used more than once on the command line") "-o"; - match mode with -- | "glance" -> output_mode := `Glance - | "libvirt" -> output_mode := `Libvirt - | "disk" | "local" -> output_mode := `Disk - | "json" -> output_mode := `JSON -@@ -250,7 +249,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 ("glance|json|libvirt|local|null|openstack|qemu|rhv|rhv-upload|vdsm", set_output_mode), -+ [ S 'o' ], Getopt.String ("json|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"; -@@ -318,8 +317,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp - - virt-v2v -i disk disk.img -o local -os /var/tmp - --virt-v2v -i disk disk.img -o glance -- - There is a companion front-end called \"virt-p2v\" which comes as an - ISO or CD image that can be booted on physical machines. - -@@ -387,7 +384,6 @@ read the man page virt-v2v(1). - pr "input:libvirtxml\n"; - pr "input:ova\n"; - pr "input:vmx\n"; -- pr "output:glance\n"; - pr "output:json\n"; - pr "output:libvirt\n"; - pr "output:local\n"; -@@ -481,7 +477,6 @@ read the man page virt-v2v(1). - | `Disk -> (module Output_disk.Disk) - | `Null -> (module Output_null.Null) - | `QEmu -> (module Output_qemu.QEMU) -- | `Glance -> (module Output_glance.Glance) - | `Openstack -> (module Output_openstack.Openstack) - | `RHV_Upload -> (module Output_rhv_upload.RHVUpload) - | `RHV -> (module Output_rhv.RHV) diff --git a/SOURCES/0008-convert-windows-Document-what-copy_qemu_ga-function-.patch b/SOURCES/0008-convert-windows-Document-what-copy_qemu_ga-function-.patch new file mode 100644 index 0000000..84d87cd --- /dev/null +++ b/SOURCES/0008-convert-windows-Document-what-copy_qemu_ga-function-.patch @@ -0,0 +1,30 @@ +From 9a5c900fdb532d553a78339a6887417dd6de70e5 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 16 Jan 2023 12:22:17 +0000 +Subject: [PATCH] convert: windows: Document what copy_qemu_ga function returns + +Just updates the comment. + +(cherry picked from commit 7499ab10ea387b1dfd6fdd6feb2632b66545a257) +--- + convert/windows_virtio.mli | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/convert/windows_virtio.mli b/convert/windows_virtio.mli +index 73ec95c7..82aad69b 100644 +--- a/convert/windows_virtio.mli ++++ b/convert/windows_virtio.mli +@@ -39,8 +39,11 @@ val install_drivers + devices if we managed to install those, or legacy devices if we didn't. *) + + val copy_qemu_ga : Guestfs.guestfs -> Types.inspect -> string list +-(** copy MSIs (idealy just one) with QEMU Guest Agent to Windows guest. The +- MSIs are not installed by this function. *) ++(** copy MSIs (ideally just one) with QEMU Guest Agent to Windows guest. The ++ MSIs are not installed by this function. ++ ++ Returns a list of the copied [*.msi] files (empty list indicates no ++ qemu-ga installer(s) could be located). *) + + (**/**) + diff --git a/SOURCES/0009-RHEL-Remove-the-in-place-option.patch b/SOURCES/0009-RHEL-Remove-the-in-place-option.patch deleted file mode 100644 index b554409..0000000 --- a/SOURCES/0009-RHEL-Remove-the-in-place-option.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 1176553cf7a9a7f7961887372757234ffdfae2bd Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 2 Dec 2021 11:56:05 +0000 -Subject: [PATCH] RHEL: Remove the --in-place option - -This disables the virt-v2v --in-place option which we do not -wish to support in RHEL. ---- - docs/virt-v2v.pod | 8 -------- - tests/Makefile.am | 1 - - v2v/v2v.ml | 8 -------- - 3 files changed, 17 deletions(-) - -diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 84e049cc..7ad22f00 100644 ---- a/docs/virt-v2v.pod -+++ b/docs/virt-v2v.pod -@@ -21,9 +21,6 @@ There is also a companion front-end called L which comes - as an ISO, CD or PXE image that can be booted on physical machines to - virtualize those machines (physical to virtual, or p2v). - --For in-place conversion, there is a separate tool called --L. -- - =head2 Input and Output - - You normally run virt-v2v with several I<-i*> options controlling the -@@ -36,10 +33,6 @@ The input and output sides of virt-v2v are separate and unrelated. - Virt-v2v can read from any input and write to any output. Therefore - these sides of virt-v2v are documented separately in this manual. - --Virt-v2v normally copies from the input to the output, called "copying --mode". In this case the source guest is always left unchanged. --In-place conversions may be done using L. -- - =head2 Other virt-v2v topics - - L — Supported hypervisors, virtualization -@@ -1587,7 +1580,6 @@ L, --L, - L, - L, - L, -diff --git a/tests/Makefile.am b/tests/Makefile.am -index d36e230b..db32e42b 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -77,7 +77,6 @@ TESTS = \ - test-v2v-floppy.sh \ - test-v2v-i-disk.sh \ - test-v2v-i-ova.sh \ -- test-v2v-in-place.sh \ - test-v2v-mac.sh \ - test-v2v-machine-readable.sh \ - test-v2v-networks-and-bridges.sh \ -diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 41e020cb..e00f9814 100644 ---- a/v2v/v2v.ml -+++ b/v2v/v2v.ml -@@ -214,12 +214,6 @@ let rec main () = - warning (f_"the --vmtype option has been removed and now does nothing") - in - -- (* Options that are errors. *) -- let in_place_error _ = -- error (f_"The --in-place option has been replaced by the \ -- ‘virt-v2v-in-place’ program") -- in -- - let argspec = [ - [ L"bandwidth" ], Getopt.String ("bps", set_string_option_once "--bandwidth" bandwidth), - s_"Set bandwidth to bits per sec"; -@@ -241,8 +235,6 @@ let rec main () = - s_"Use password from file to connect to input hypervisor"; - [ M"it" ], Getopt.String ("transport", set_string_option_once "-it" input_transport), - s_"Input transport"; -- [ L"in-place" ], Getopt.Unit in_place_error, -- s_"Use virt-v2v-in-place instead"; - [ L"mac" ], Getopt.String ("mac:network|bridge|ip:out", add_mac), - s_"Map NIC to network or bridge or assign static IP"; - [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), diff --git a/SOURCES/0009-convert-windows-Remove-unused-open-Utils.patch b/SOURCES/0009-convert-windows-Remove-unused-open-Utils.patch new file mode 100644 index 0000000..788c8c6 --- /dev/null +++ b/SOURCES/0009-convert-windows-Remove-unused-open-Utils.patch @@ -0,0 +1,25 @@ +From 48f15935cff53836eae4c1c9afb0be8ab4f13bea Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 16 Jan 2023 15:12:16 +0000 +Subject: [PATCH] convert: windows: Remove unused 'open Utils' + +No function from Utils was being used by Windows_virtio, so remove the +unnecessary line. + +(cherry picked from commit 26b9cd1f87f06c31cdf3020e003078737a417889) +--- + convert/windows_virtio.ml | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml +index 2ce92ece..6b642d21 100644 +--- a/convert/windows_virtio.ml ++++ b/convert/windows_virtio.ml +@@ -25,7 +25,6 @@ open Common_gettext.Gettext + open Regedit + + open Types +-open Utils + + module G = Guestfs + diff --git a/SOURCES/0010-o-kubevirt-Fix-mistake-in-error-message.patch b/SOURCES/0010-o-kubevirt-Fix-mistake-in-error-message.patch new file mode 100644 index 0000000..32af1f9 --- /dev/null +++ b/SOURCES/0010-o-kubevirt-Fix-mistake-in-error-message.patch @@ -0,0 +1,28 @@ +From 4623b2aab891fdbeda0486ad00f1fa2a7f5533fe Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 19 Jan 2023 08:51:30 +0000 +Subject: [PATCH] -o kubevirt: Fix mistake in error message + +The error message was copied from output_local.ml: + +virt-v2v: error: -o local: -op option cannot be used in this output mode + +Reported-by: Xiaodai Wang +(cherry picked from commit be322ed49b1131e30a0b70f16d31fd29fca32b81) +--- + output/output_kubevirt.ml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml +index 63ee8197..0a74dbbe 100644 +--- a/output/output_kubevirt.ml ++++ b/output/output_kubevirt.ml +@@ -47,7 +47,7 @@ module Kubevirt = struct + if options.output_options <> [] then + error (f_"no -oo (output options) are allowed here"); + if options.output_password <> None then +- error_option_cannot_be_used_in_output_mode "local" "-op"; ++ error_option_cannot_be_used_in_output_mode "kubevirt" "-op"; + + (* -os must be set to a directory. *) + let output_storage = diff --git a/SOURCES/0010-output-Remove-o-json-mode.patch b/SOURCES/0010-output-Remove-o-json-mode.patch deleted file mode 100644 index 355af01..0000000 --- a/SOURCES/0010-output-Remove-o-json-mode.patch +++ /dev/null @@ -1,1125 +0,0 @@ -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; diff --git a/SOURCES/0011-o-kubevirt-Move-cpu-element-under-domain.patch b/SOURCES/0011-o-kubevirt-Move-cpu-element-under-domain.patch new file mode 100644 index 0000000..a92a32c --- /dev/null +++ b/SOURCES/0011-o-kubevirt-Move-cpu-element-under-domain.patch @@ -0,0 +1,46 @@ +From 6b7ef3efe748a72edad0faa508e91b340038a586 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 20 Jan 2023 09:11:52 +0000 +Subject: [PATCH] -o kubevirt: Move "cpu" element under "domain" + +Apparently this element doesn't go in the obvious place (under +"resources", next to memory), but in a whole new section under "cpu", +which makes no logical sense but here we are. Also verified this +against Kubevirt examples/vm-template-fedora.yaml + +Reported-by: Ming Xie +Fixes: commit bfa62b4683d312fc2fa9bb3c08963fc4846831b9 +(cherry picked from commit 8db50a85f0363d90918edd1af4fc20ddc245b421) +--- + output/create_kubevirt_yaml.ml | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/output/create_kubevirt_yaml.ml b/output/create_kubevirt_yaml.ml +index 205e9be3..689555e4 100644 +--- a/output/create_kubevirt_yaml.ml ++++ b/output/create_kubevirt_yaml.ml +@@ -65,13 +65,13 @@ let create_kubevirt_yaml source inspect + let memory_str = sprintf "%LdMi" (source.s_memory /^ 1024_L /^ 1024_L) in + List.push_back resources ("requests", Assoc ["memory", String memory_str]); + +- (* # vCPUs. XXX vendor, model, topology *) +- List.push_back resources ("cpu", Assoc ["cores", Int source.s_vcpu]); +- + (* Machine features. *) + let features = List.map (fun name -> name, List []) source.s_features in + List.push_back resources ("features", Assoc features); + ++ (* # vCPUs. XXX vendor, model, topology *) ++ let cpu = "cpu", Assoc ["cores", Int source.s_vcpu] in ++ + (* XXX firmware, display, sound *) + + (* XXX guestcaps: rng, balloon, vsock, virtio 1.0 *) +@@ -109,6 +109,7 @@ let create_kubevirt_yaml source inspect + if !devices <> [] then + List.push_back domain ("devices", Assoc !devices); + List.push_back domain ("resources", Assoc !resources); ++ List.push_back domain cpu; + + let spec = ref [] in + List.push_back spec ("domain", Assoc !domain); diff --git a/SOURCES/0011-output-Remove-unused-dummy.c.patch b/SOURCES/0011-output-Remove-unused-dummy.c.patch deleted file mode 100644 index 7c00d1a..0000000 --- a/SOURCES/0011-output-Remove-unused-dummy.c.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 42da4736c2078801c0a5ebbe3825086f9b8d25ea Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 12 Apr 2022 11:53:45 +0100 -Subject: [PATCH] output: Remove unused dummy.c -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This was removed when I removed -o json support, but I did not delete -the file from git. “make maintainer-check-extra-dist” complained -about this. - -Fixes: commit 4e6b389b4e27c8d13e57fcaf777d96ad7e08650b -(cherry picked from commit 0a1286df1725560e2789134d12022fc52572f9b0) ---- - output/dummy.c | 2 -- - 1 file changed, 2 deletions(-) - delete mode 100644 output/dummy.c - -diff --git a/output/dummy.c b/output/dummy.c -deleted file mode 100644 -index ebab6198..00000000 ---- a/output/dummy.c -+++ /dev/null -@@ -1,2 +0,0 @@ --/* Dummy source, to be used for OCaml-based tools with no C sources. */ --enum { foo = 1 }; diff --git a/SOURCES/0012-adopt-inversion-of-SELinux-relabeling-in-virt-custom.patch b/SOURCES/0012-adopt-inversion-of-SELinux-relabeling-in-virt-custom.patch deleted file mode 100644 index dd89566..0000000 --- a/SOURCES/0012-adopt-inversion-of-SELinux-relabeling-in-virt-custom.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 7b22bc65e5df2bbe9f5ccf8ab05e67afb5a4cb8f Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Tue, 10 May 2022 12:53:07 +0200 -Subject: [PATCH] adopt inversion of SELinux relabeling in virt-customize - -Remove "--selinux-relabel" options. - -Do not add any "--no-selinux-relabel" options; rely on the internal check -for SELinux support instead ("is_selinux_guest" in -"common/mlcustomize/SELinux_relabel.ml"). - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1554735 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2075718 -Signed-off-by: Laszlo Ersek -Message-Id: <20220510105307.15402-1-lersek@redhat.com> -Acked-by: Richard W.M. Jones -[lersek@redhat.com: incorporate common submodule update] -(cherry picked from commit 0c24fc6015ce7719acff3bcead7eb227b6de3f21) ---- - common | 2 +- - tests/test-v2v-conversion-of.sh | 7 ------- - 2 files changed, 1 insertion(+), 8 deletions(-) - -Submodule common 201632e4..af6cb55b (rewind): -diff --git a/common/mlcustomize/guest_packages.ml b/common/mlcustomize/guest_packages.ml -index 7c29a2ab..4c3c34ed 100644 ---- a/common/mlcustomize/guest_packages.ml -+++ b/common/mlcustomize/guest_packages.ml -@@ -73,9 +73,9 @@ let install_command packages package_management = - | "zypper" -> sprintf "zypper -n in -l %s" quoted_args - - | "unknown" -> -- error_unknown_package_manager "--install" -+ error_unknown_package_manager (s_"--install") - | pm -> -- error_unimplemented_package_manager "--install" pm -+ error_unimplemented_package_manager (s_"--install") pm - - let update_command package_management = - match package_management with -@@ -103,9 +103,9 @@ let update_command package_management = - | "zypper" -> "zypper -n update -l" - - | "unknown" -> -- error_unknown_package_manager "--update" -+ error_unknown_package_manager (s_"--update") - | pm -> -- error_unimplemented_package_manager "--update" pm -+ error_unimplemented_package_manager (s_"--update") pm - - let uninstall_command packages package_management = - let quoted_args = String.concat " " (List.map quote packages) in -@@ -127,6 +127,6 @@ let uninstall_command packages package_management = - | "zypper" -> sprintf "zypper -n rm %s" quoted_args - - | "unknown" -> -- error_unknown_package_manager "--uninstall" -+ error_unknown_package_manager (s_"--uninstall") - | pm -> -- error_unimplemented_package_manager "--uninstall" pm -+ error_unimplemented_package_manager (s_"--uninstall") pm -diff --git a/tests/test-v2v-conversion-of.sh b/tests/test-v2v-conversion-of.sh -index 5a974d1b..5c5cae7c 100755 ---- a/tests/test-v2v-conversion-of.sh -+++ b/tests/test-v2v-conversion-of.sh -@@ -53,13 +53,6 @@ fi - # Some guests need special virt-builder parameters. - # See virt-builder --notes "$guestname" - declare -a extra --case "$guestname" in -- fedora*|rhel*|centos*) -- extra[${#extra[*]}]='--selinux-relabel' -- ;; -- *) -- ;; --esac - - # Don't try to update Windows versions. - case "$guestname" in diff --git a/SOURCES/0012-o-kubevirt-Error-on-invalid-output-guest-names.patch b/SOURCES/0012-o-kubevirt-Error-on-invalid-output-guest-names.patch new file mode 100644 index 0000000..71e3d8e --- /dev/null +++ b/SOURCES/0012-o-kubevirt-Error-on-invalid-output-guest-names.patch @@ -0,0 +1,51 @@ +From 8009825c396358137576af522acc0b6b20243bac Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 20 Jan 2023 09:49:04 +0000 +Subject: [PATCH] -o kubevirt: Error on invalid output guest names + +Kubevirt supports something like RFC 1123 names (without the length +restriction). Helpfully it prints the regexp that it uses the +validate the names, so just use the same regexp. + +Note that virt-v2v never renames guests (since that would add +unpredictability for automation). You must use the -on option to +rename the guest if the name is wrong. Hence this is an error, not a +warning or an attempt to rename the guest. + +Reported-by: Ming Xie +Fixes: commit bfa62b4683d312fc2fa9bb3c08963fc4846831b9 +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2162332 +(cherry picked from commit 8a9c914544a49bed13eb5baf42290f835bdee7b5) +--- + output/output_kubevirt.ml | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml +index 0a74dbbe..00e6a8a5 100644 +--- a/output/output_kubevirt.ml ++++ b/output/output_kubevirt.ml +@@ -29,6 +29,11 @@ open Utils + open Output + open Create_kubevirt_yaml + ++(* Valid output names for Kubevirt (RHBZ#2162332). *) ++let rfc1123_re = ++ PCRE.compile ~anchored:true ++ "[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" ++ + module Kubevirt = struct + type poptions = output_allocation * string * string * string + +@@ -60,6 +65,12 @@ module Kubevirt = struct + + let output_name = Option.default source.s_name options.output_name in + ++ if not (PCRE.matches rfc1123_re output_name) then ++ error (f_"-o kubevirt: the guest name must contain only lowercase \ ++ alphanumeric characters, '-' or '.', and must start and \ ++ end with an alphanumeric character. Rerun virt-v2v with \ ++ the '-on name' option to rename it."); ++ + options.output_alloc, options.output_format, output_name, output_storage + + let setup dir options source = diff --git a/SOURCES/0013-Split-long-lines-in-messages.patch b/SOURCES/0013-Split-long-lines-in-messages.patch new file mode 100644 index 0000000..1ace05b --- /dev/null +++ b/SOURCES/0013-Split-long-lines-in-messages.patch @@ -0,0 +1,1449 @@ +From bcd60820de1256ef4c36ced54efa1243902411f7 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 20 Jan 2023 09:58:10 +0000 +Subject: [PATCH] Split long lines in messages + +This commit splits up any long lines found in errors, warnings or +other messages. OCaml ignores whitespace following "\" within a +string, eg: + + "long string \ + more stuff" + +is parsed as: + + "long string more stuff" + +Thanks: Laszlo Ersek, for working out the OCaml syntax for this +(cherry picked from commit d2b01e487ff4ef56d139a5e0f22efd9b2ed9b64c) +--- + convert/convert.ml | 11 ++++++--- + convert/inspect_source.ml | 42 ++++++++++++++++++++++++++------ + convert/target_bus_assignment.ml | 8 +++++- + in-place/in_place.ml | 16 +++++++++--- + input/OVA.ml | 14 ++++++++--- + input/OVF.ml | 10 +++++--- + input/input_disk.ml | 6 +++-- + input/input_libvirt.ml | 9 ++++--- + input/input_ova.ml | 9 ++++--- + input/input_vcenter_https.ml | 15 ++++++++---- + input/input_vddk.ml | 16 +++++++++--- + input/input_xen_ssh.ml | 9 ++++--- + input/nbdkit_vddk.ml | 3 ++- + input/parse_domain_from_vmx.ml | 3 ++- + input/parse_libvirt_xml.ml | 28 ++++++++++++++------- + input/vCenter.ml | 7 ++++-- + inspector/inspector.ml | 26 ++++++++++++++------ + lib/create_ovf.ml | 16 +++++++++--- + lib/libvirt_utils.ml | 12 ++++++--- + lib/networks.ml | 15 ++++++++---- + lib/types.ml | 3 ++- + lib/utils.ml | 7 ++++-- + output/create_libvirt_xml.ml | 4 ++- + output/output.ml | 3 ++- + output/output_glance.ml | 5 +++- + output/output_kubevirt.ml | 6 +++-- + output/output_libvirt.ml | 20 ++++++++++++--- + output/output_null.ml | 3 ++- + output/output_openstack.ml | 24 ++++++++++++------ + output/output_qemu.ml | 3 ++- + output/output_rhv.ml | 36 +++++++++++++++++++++------ + output/output_rhv_upload.ml | 39 ++++++++++++++++++++--------- + output/output_vdsm.ml | 16 ++++++++---- + v2v/v2v.ml | 26 ++++++++++++++------ + 34 files changed, 343 insertions(+), 127 deletions(-) + +diff --git a/convert/convert.ml b/convert/convert.ml +index 8d62f6d4..d0d5b773 100644 +--- a/convert/convert.ml ++++ b/convert/convert.ml +@@ -181,12 +181,14 @@ and check_guest_free_space inspect mpstats = + let needed_bytes = Int64.of_int needed_megabytes *^ 1024L *^ 1024L in + if free_bytes < needed_bytes then ( + let mb i = Int64.to_float i /. 1024. /. 1024. in +- error (f_"not enough free space for conversion on filesystem ‘%s’. %.1f MB free < %d MB needed") ++ error (f_"not enough free space for conversion on filesystem ‘%s’. \ ++ %.1f MB free < %d MB needed") + mp_path (mb free_bytes) needed_megabytes + ); + (* Not all the filesystems have inode counts. *) + if files > 0L && ffree < needed_inodes then +- error (f_"not enough available inodes for conversion on filesystem ‘%s’. %Ld inodes available < %Ld inodes needed") ++ error (f_"not enough available inodes for conversion on \ ++ filesystem ‘%s’. %Ld inodes available < %Ld inodes needed") + mp_path ffree needed_inodes + ) mpstats + +@@ -210,7 +212,10 @@ and do_fstrim g inspect = + if mounted then ( + try g#fstrim "/" + with G.Error msg -> +- warning (f_"fstrim on guest filesystem %s failed. Usually you can ignore this message. To find out more read \"Trimming\" in virt-v2v(1).\n\nOriginal message: %s") dev msg ++ warning (f_"fstrim on guest filesystem %s failed. Usually you \ ++ can ignore this message. To find out more read \ ++ \"Trimming\" in virt-v2v(1).\n\n\ ++ Original message: %s") dev msg + ) + ) fses + +diff --git a/convert/inspect_source.ml b/convert/inspect_source.ml +index a0d9f148..9a6fdab7 100644 +--- a/convert/inspect_source.ml ++++ b/convert/inspect_source.ml +@@ -45,8 +45,13 @@ let rec inspect_source root_choice g = + (try g#mount dev mp + with G.Error msg -> + if mp = "/" then ( (* RHBZ#1145995 *) +- if String.find msg "Windows" >= 0 && String.find msg "NTFS partition is in an unsafe state" >= 0 then +- error (f_"unable to mount the disk image for writing. This has probably happened because Windows Hibernation or Fast Restart is being used in this guest. You have to disable this (in the guest) in order to use virt-v2v.\n\nOriginal error message: %s") msg ++ if String.find msg "Windows" >= 0 && ++ String.find msg "NTFS partition is in an unsafe state" >= 0 then ++ error (f_"unable to mount the disk image for writing. This has \ ++ probably happened because Windows Hibernation or \ ++ Fast Restart is being used in this guest. You have \ ++ to disable this (in the guest) in order to use \ ++ virt-v2v.\n\nOriginal error message: %s") msg + else + error "%s" msg + ) +@@ -63,7 +68,12 @@ let rec inspect_source root_choice g = + (try g#touch file + with G.Error msg -> + if g#last_errno () = G.Errno.errno_EROFS then +- error (f_"filesystem was mounted read-only, even though we asked for it to be mounted read-write. This usually means that the filesystem was not cleanly unmounted. Possible causes include trying to convert a guest which is running, or using Windows Hibernation or Fast Restart.\n\nOriginal error message: %s") msg ++ error (f_"filesystem was mounted read-only, even though we \ ++ asked for it to be mounted read-write. This usually \ ++ means that the filesystem was not cleanly unmounted. \ ++ Possible causes include trying to convert a guest \ ++ which is running, or using Windows Hibernation or \ ++ Fast Restart.\n\nOriginal error message: %s") msg + else + error (f_"could not write to the guest filesystem: %s") msg + ); +@@ -128,7 +138,12 @@ let rec inspect_source root_choice g = + + and choose_root root_choice g = function + | [] -> +- error (f_"inspection could not detect the source guest (or physical machine).\n\nAssuming that you are running virt-v2v/virt-p2v on a source which is supported (and not, for example, a blank disk), then this should not happen.\n\nNo root device found in this operating system image."); ++ error (f_"inspection could not detect the source guest \ ++ (or physical machine).\n\nAssuming that you are \ ++ running virt-v2v/virt-p2v on a source which is \ ++ supported (and not, for example, a blank disk), \ ++ then this should not happen.\n\nNo root device \ ++ found in this operating system image."); + | [root] -> root (* only one root, so return it *) + | roots -> + (* If there are multiple roots, use the [--root] option supplied +@@ -138,7 +153,9 @@ and choose_root root_choice g = function + | AskRoot -> + (* List out the roots and ask the user to choose. *) + printf "\n***\n"; +- printf (f_"Dual- or multi-boot operating system detected. Choose the root filesystem\nthat contains the main operating system from the list below:\n"); ++ printf (f_"Dual- or multi-boot operating system detected. \ ++ Choose the root filesystem\nthat contains the main \ ++ operating system from the list below:\n"); + printf "\n"; + List.iteri ( + fun i root -> +@@ -165,7 +182,9 @@ and choose_root root_choice g = function + List.nth roots (!i - 1) + + | SingleRoot -> +- error (f_"multi-boot operating systems are not supported by virt-v2v. Use the --root option to change how virt-v2v handles this.") ++ error (f_"multi-boot operating systems are not supported by \ ++ virt-v2v. Use the --root option to change how virt-v2v \ ++ handles this.") + + | FirstRoot -> + let root = List.hd roots in +@@ -185,7 +204,10 @@ and choose_root root_choice g = function + and reject_if_not_installed_image g root = + let fmt = g#inspect_get_format root in + if fmt <> "installed" then +- error (f_"libguestfs thinks this is not an installed operating system (it might be, for example, an installer disk or live CD). If this is wrong, it is probably a bug in libguestfs. root=%s fmt=%s") root fmt ++ error (f_"libguestfs thinks this is not an installed operating \ ++ system (it might be, for example, an installer disk \ ++ or live CD). If this is wrong, it is probably a bug \ ++ in libguestfs. root=%s fmt=%s") root fmt + + (* Wrapper around g#inspect_list_applications2 which, for RPM + * guests, on failure tries to rebuild the RPM database before +@@ -275,5 +297,9 @@ and sanity_check_inspection inspect = + + and error_if_unknown fieldname value = + if value = "unknown" then +- error (f_"inspection could not detect the source guest (or physical machine).\n\nAssuming that you are running virt-v2v/virt-p2v on a source which is supported (and not, for example, a blank disk), then this should not happen.\n\nInspection field ‘%s’ was ‘unknown’.") ++ error (f_"inspection could not detect the source guest (or \ ++ physical machine).\n\nAssuming that you are running \ ++ virt-v2v/virt-p2v on a source which is supported (and \ ++ not, for example, a blank disk), then this should not \ ++ happen.\n\nInspection field ‘%s’ was ‘unknown’.") + fieldname +diff --git a/convert/target_bus_assignment.ml b/convert/target_bus_assignment.ml +index f8675cf2..54c9516b 100644 +--- a/convert/target_bus_assignment.ml ++++ b/convert/target_bus_assignment.ml +@@ -81,7 +81,13 @@ let rec target_bus_assignment source_disks source_removables guestcaps = + ignore (insert_after bus 0 t) + | Some desired_slot_nr -> + if not (insert_after bus desired_slot_nr t) then +- warning (f_"removable %s device in slot %d clashes with another disk, so it has been moved to a higher numbered slot on the same bus. This may mean that this removable device has a different name inside the guest (for example a CD-ROM originally called /dev/hdc might move to /dev/hdd, or from D: to E: on a Windows guest).") ++ warning (f_"removable %s device in slot %d clashes with another \ ++ disk, so it has been moved to a higher numbered slot \ ++ on the same bus. This may mean that this removable \ ++ device has a different name inside the guest (for \ ++ example a CD-ROM originally called /dev/hdc might \ ++ move to /dev/hdd, or from D: to E: on a Windows \ ++ guest).") + (match r.s_removable_type with + | CDROM -> s_"CD-ROM" + | Floppy -> s_"floppy disk") +diff --git a/in-place/in_place.ml b/in-place/in_place.ml +index 7e531bc4..55541814 100644 +--- a/in-place/in_place.ml ++++ b/in-place/in_place.ml +@@ -104,7 +104,8 @@ let rec main () = + *) + let rec error_unless_ip_addr what addr = + if not (PCRE.matches mac_ip_re addr) then +- error (f_"cannot parse --mac ip %s: doesn’t look like “%s” is an IP address") what addr ++ error (f_"cannot parse --mac ip %s: doesn’t look like “%s” is \ ++ an IP address") what addr + in + error_unless_ip_addr "ipaddr" if_ip_address; + Option.may (error_unless_ip_addr "gw") if_default_gateway; +@@ -115,7 +116,8 @@ let rec main () = + | Some len -> + let len = + try int_of_string len with +- | Failure _ -> error (f_"cannot parse --mac ip prefix length field as an integer: %s") len in ++ | Failure _ -> error (f_"cannot parse --mac ip prefix length \ ++ field as an integer: %s") len in + if len < 0 || len > 128 then + error (f_"--mac ip prefix length field is out of range"); + Some len in +@@ -254,7 +256,8 @@ read the man page virt-v2v-in-place(1). + let { Xml.uri_server = server; uri_scheme = scheme } = + try Xml.parse_uri orig_uri + with Invalid_argument msg -> +- error (f_"could not parse '-ic %s'. Original error message was: %s") ++ error (f_"could not parse '-ic %s'. Original error \ ++ message was: %s") + orig_uri msg in + + match server, scheme with +@@ -357,7 +360,12 @@ and check_host_free_space () = + debug "check_host_free_space: large_tmpdir=%s free_space=%Ld" + large_tmpdir free_space; + if free_space < 1_073_741_824L then +- error (f_"insufficient free space in the conversion server temporary directory %s (%s).\n\nEither free up space in that directory, or set the LIBGUESTFS_CACHEDIR environment variable to point to another directory with more than 1GB of free space.\n\nSee also the virt-v2v(1) manual, section \"Minimum free space check in the host\".") ++ error (f_"insufficient free space in the conversion server temporary \ ++ directory %s (%s).\n\nEither free up space in that directory, \ ++ or set the LIBGUESTFS_CACHEDIR environment variable to point \ ++ to another directory with more than 1GB of free space.\n\n\ ++ See also the virt-v2v(1) manual, section \"Minimum free \ ++ space check in the host\".") + large_tmpdir (human_size free_space) + + let () = run_main_and_handle_errors main +diff --git a/input/OVA.ml b/input/OVA.ml +index 09ceee98..e26059bf 100644 +--- a/input/OVA.ml ++++ b/input/OVA.ml +@@ -118,11 +118,15 @@ let rec parse_ova ova = + untar ~format ova tmpdir; + tmpdir, Directory + | `Zip | `GZip | `XZ | `Unknown -> +- error (f_"%s: unsupported file format\n\nFormats which we currently understand for '-i ova' are: tar (uncompressed, compress with gzip or xz), zip") ova ++ error (f_"%s: unsupported file format\n\nFormats which we \ ++ currently understand for '-i ova' are: tar \ ++ (uncompressed, compress with gzip or xz), zip") ova + ) + + | `Unknown -> +- error (f_"%s: unsupported file format\n\nFormats which we currently understand for '-i ova' are: tar (uncompressed, compress with gzip or xz), zip") ova ++ error (f_"%s: unsupported file format\n\nFormats which we \ ++ currently understand for '-i ova' are: tar (uncompressed, \ ++ compress with gzip or xz), zip") ova + ) in + + (* Exploded path must be absolute (RHBZ#1155121). *) +@@ -140,7 +144,8 @@ let rec parse_ova ova = + * so it is readable by qemu.qemu. This is libvirt bug RHBZ#890291. + *) + if Unix.geteuid () = 0 && backend_is_libvirt () then ( +- warning (f_"making OVA directory public readable to work around libvirt bug https://bugzilla.redhat.com/1045069"); ++ warning (f_"making OVA directory public readable to work around \ ++ libvirt bug https://bugzilla.redhat.com/1045069"); + let what = + match ova_type with + | Directory -> [ top_dir ] +@@ -348,7 +353,8 @@ let resolve_href ({ top_dir; ova_type } as t) href = + (try + let filename = Realpath.realpath filename in + if not (String.is_prefix filename real_top_dir) then +- error (f_"-i ova: invalid OVA file: path ‘%s’ references a file outside the archive") href; ++ error (f_"-i ova: invalid OVA file: path ‘%s’ references a file \ ++ outside the archive") href; + Some (LocalFile filename) + with + Unix_error (ENOENT, "realpath", _) -> None +diff --git a/input/OVF.ml b/input/OVF.ml +index 16c0b09c..48d5a684 100644 +--- a/input/OVF.ml ++++ b/input/OVF.ml +@@ -99,7 +99,8 @@ let rec parse_ovf_from_ova ovf_filename = + | "bios" -> BIOS + | "efi" -> UEFI + | s -> +- error (f_"unknown Config:firmware value %s (expected \"bios\" or \"efi\")") s in ++ error (f_"unknown Config:firmware value %s (expected \"bios\" \ ++ or \"efi\")") s in + + name, memory, vcpu, cpu_topology, firmware, + parse_disks xpathctx, parse_removables xpathctx, parse_nics xpathctx +@@ -254,10 +255,13 @@ and parent_controller xpathctx id = + | Some 6 -> Some Source_SCSI + | Some 20 -> Some Source_SATA + | None -> +- warning (f_"ova disk has no parent controller, please report this as a bug supplying the *.ovf file extracted from the ova"); ++ warning (f_"ova disk has no parent controller, please report this as \ ++ a bug supplying the *.ovf file extracted from the ova"); + None + | Some controller -> +- warning (f_"ova disk has an unknown VMware controller type (%d), please report this as a bug supplying the *.ovf file extracted from the ova") ++ warning (f_"ova disk has an unknown VMware controller type (%d), please \ ++ report this as a bug supplying the *.ovf file extracted \ ++ from the ova") + controller; + None + +diff --git a/input/input_disk.ml b/input/input_disk.ml +index 508adf9d..279250fe 100644 +--- a/input/input_disk.ml ++++ b/input/input_disk.ml +@@ -40,7 +40,8 @@ module Disk = struct + error (f_"no -io (input options) are allowed here"); + + if args = [] then +- error (f_"-i disk: expecting a disk image (filename) on the command line"); ++ error (f_"-i disk: expecting a disk image (filename) \ ++ on the command line"); + + (* Check the input files exist and are readable. *) + List.iter (fun disk -> access disk [R_OK]) args; +@@ -88,7 +89,8 @@ module Disk = struct + + (* Check nbdkit is installed. *) + if not (Nbdkit.is_installed ()) then +- error (f_"nbdkit is not installed or not working. It is required to use ‘-i disk’."); ++ error (f_"nbdkit is not installed or not working. It is required to \ ++ use ‘-i disk’."); + + if not (Nbdkit.probe_plugin "file") then + error (f_"nbdkit-file-plugin is not installed or not working"); +diff --git a/input/input_libvirt.ml b/input/input_libvirt.ml +index 9311e89a..9e40fab5 100644 +--- a/input/input_libvirt.ml ++++ b/input/input_libvirt.ml +@@ -38,7 +38,8 @@ let rec get_source_from_libvirt options args = + match args with + | [arg] -> arg + | _ -> +- error (f_"-i libvirt: expecting a libvirt guest name on the command line") in ++ error (f_"-i libvirt: expecting a libvirt guest name \ ++ on the command line") in + + (* Connect to the hypervisor. *) + let conn = +@@ -55,7 +56,8 @@ and get_source_from_libvirt_xml _ args = + match args with + | [arg] -> arg + | _ -> +- error (f_"-i libvirtxml: expecting a libvirt XML filename on the command line") in ++ error (f_"-i libvirtxml: expecting a libvirt XML filename \ ++ on the command line") in + let xml = read_whole_file xmlfile in + let source, disks = parse_libvirt_xml xml in + source, disks +@@ -63,7 +65,8 @@ and get_source_from_libvirt_xml _ args = + and setup_servers options dir disks = + (* Check nbdkit is installed. *) + if not (Nbdkit.is_installed ()) then +- error (f_"nbdkit is not installed or not working. It is required to use ‘-i libvirt|libvirtxml’."); ++ error (f_"nbdkit is not installed or not working. It is required to \ ++ use ‘-i libvirt|libvirtxml’."); + + if not (Nbdkit.probe_plugin "file") then + error (f_"nbdkit-file-plugin is not installed or not working"); +diff --git a/input/input_ova.ml b/input/input_ova.ml +index 8ec1f802..7404acc3 100644 +--- a/input/input_ova.ml ++++ b/input/input_ova.ml +@@ -76,14 +76,16 @@ module OVA = struct + match r with + | Checksums.Good_checksum -> () + | Checksums.Mismatched_checksum (_, actual) -> +- error (f_"-i ova: corrupt OVA: checksum of disk %s does not match manifest (actual = %s, expected = %s)") ++ error (f_"-i ova: corrupt OVA: checksum of disk %s does not match \ ++ manifest (actual = %s, expected = %s)") + filename actual (Checksums.string_of_csum_t csum) + | Checksums.Missing_file -> + (* RHBZ#1570407: Some OVA files generated by VMware + * reference non-existent components in the *.mf file. + * Generate a warning and ignore it. + *) +- warning (f_"manifest has a checksum for non-existent file %s (ignored)") ++ warning (f_"manifest has a checksum for non-existent file %s \ ++ (ignored)") + filename + ) manifest; + +@@ -234,5 +236,6 @@ module OVA = struct + else None + + and error_missing_href href = +- error (f_"-i ova: OVF references file ‘%s’ which was not found in the OVA archive") href ++ error (f_"-i ova: OVF references file ‘%s’ which was not found \ ++ in the OVA archive") href + end +diff --git a/input/input_vcenter_https.ml b/input/input_vcenter_https.ml +index 863f3a00..7c505296 100644 +--- a/input/input_vcenter_https.ml ++++ b/input/input_vcenter_https.ml +@@ -67,14 +67,16 @@ module VCenterHTTPS = struct + match args with + | [arg] -> arg + | _ -> +- error (f_"-i libvirt: expecting a libvirt guest name on the command line") in ++ error (f_"-i libvirt: expecting a libvirt guest name \ ++ on the command line") in + + (* -ip is required in this mode, see RHBZ#1960087 *) + let password_file = + match options.input_password with + | Some file -> file + | None -> +- error (f_"-i libvirt: expecting -ip passwordfile parameter for vCenter connection") in ++ error (f_"-i libvirt: expecting -ip passwordfile parameter for \ ++ vCenter connection") in + + (* -ic must be set and it must contain a server. This is + * enforced by virt-v2v. +@@ -83,7 +85,8 @@ module VCenterHTTPS = struct + match options.input_conn with + | Some ic -> ic + | None -> +- error (f_"-i libvirt: expecting -ic parameter for vcenter connection") in ++ error (f_"-i libvirt: expecting -ic parameter for \ ++ vcenter connection") in + + let uri = + try Xml.parse_uri input_conn +@@ -95,7 +98,8 @@ module VCenterHTTPS = struct + match uri with + | { Xml.uri_server = Some server } -> server + | { Xml.uri_server = None } -> +- error (f_"-i libvirt: expecting -ic parameter to contain vcenter server name") in ++ error (f_"-i libvirt: expecting -ic parameter to contain \ ++ vcenter server name") in + + (* Connect to the hypervisor. *) + let conn = +@@ -116,7 +120,8 @@ module VCenterHTTPS = struct + match xpath_string xpathctx "/domain/vmware:datacenterpath" with + | Some dcPath -> dcPath + | None -> +- error (f_"vcenter: was not found in the XML. You need to upgrade to libvirt ≥ 1.2.20.") in ++ error (f_"vcenter: was not found in the XML. \ ++ You need to upgrade to libvirt ≥ 1.2.20.") in + + List.iteri ( + fun i { d_format = format; d_type } -> +diff --git a/input/input_vddk.ml b/input/input_vddk.ml +index e48495d3..6444ce18 100644 +--- a/input/input_vddk.ml ++++ b/input/input_vddk.ml +@@ -95,14 +95,18 @@ information on these settings. + + (* thumbprint is mandatory. *) + if not (List.mem_assoc "thumbprint" io_options) then +- error (f_"You must pass the ‘-io vddk-thumbprint’ option with the SSL thumbprint of the VMware server. To find the thumbprint, see the nbdkit-vddk-plugin(1) manual. See also the virt-v2v-input-vmware(1) manual."); ++ error (f_"You must pass the ‘-io vddk-thumbprint’ option with the \ ++ SSL thumbprint of the VMware server. To find the thumbprint, \ ++ see the nbdkit-vddk-plugin(1) manual. See also the \ ++ virt-v2v-input-vmware(1) manual."); + + (* Get the guest name. *) + let guest = + match args with + | [arg] -> arg + | _ -> +- error (f_"-i libvirt: expecting a libvirt guest name on the command line") in ++ error (f_"-i libvirt: expecting a libvirt guest name \ ++ on the command line") in + + (* -ic must be set and it must contain a server. This is + * enforced by virt-v2v. +@@ -111,7 +115,8 @@ information on these settings. + match options.input_conn with + | Some ic -> ic + | None -> +- error (f_"-i libvirt: expecting -ic parameter for vcenter connection") in ++ error (f_"-i libvirt: expecting -ic parameter \ ++ for vcenter connection") in + + if not options.read_only then + error (f_"in-place mode does not work with VDDK source"); +@@ -143,7 +148,10 @@ information on these settings. + match xpath_string "/domain/vmware:moref" with + | Some moref -> moref + | None -> +- error (f_" was not found in the output of ‘virsh dumpxml \"%s\"’. The most likely reason is that libvirt is too old, try upgrading libvirt to ≥ 3.7.") guest in ++ error (f_" was not found in the output of \ ++ ‘virsh dumpxml \"%s\"’. The most likely reason is that \ ++ libvirt is too old, try upgrading \ ++ libvirt to ≥ 3.7.") guest in + + (* It probably never happens that the server name can be missing + * from the libvirt URI, but we need a server name to pass to +diff --git a/input/input_xen_ssh.ml b/input/input_xen_ssh.ml +index 0aad36a8..b583bd55 100644 +--- a/input/input_xen_ssh.ml ++++ b/input/input_xen_ssh.ml +@@ -54,14 +54,16 @@ module XenSSH = struct + match args with + | [arg] -> arg + | _ -> +- error (f_"-i libvirt: expecting a libvirt guest name on the command line") in ++ error (f_"-i libvirt: expecting a libvirt guest name \ ++ on the command line") in + + (* -ic must be set. *) + let input_conn = + match options.input_conn with + | Some ic -> ic + | None -> +- error (f_"-i libvirt: expecting -ic parameter for Xen over SSH connection") in ++ error (f_"-i libvirt: expecting -ic parameter for \ ++ Xen over SSH connection") in + + let uri = + try Xml.parse_uri input_conn +@@ -82,7 +84,8 @@ module XenSSH = struct + match uri.Xml.uri_server with + | Some server -> server + | None -> +- error (f_"‘-ic %s’ URL does not contain a host name field") input_conn in ++ error (f_"‘-ic %s’ URL does not contain a host name field") ++ input_conn in + + let port = + match uri.uri_port with +diff --git a/input/nbdkit_vddk.ml b/input/nbdkit_vddk.ml +index 9609c442..86d9b1a9 100644 +--- a/input/nbdkit_vddk.ml ++++ b/input/nbdkit_vddk.ml +@@ -70,7 +70,8 @@ let create_vddk ?bandwidth ?config ?cookie ?cor ?libdir ~moref + | None -> () + | Some libdir -> + if not (is_directory libdir) then +- error (f_"‘-io vddk-libdir=%s’ does not point to a directory. See the virt-v2v-input-vmware(1) manual.") libdir ++ error (f_"‘-io vddk-libdir=%s’ does not point to a directory. \ ++ See the virt-v2v-input-vmware(1) manual.") libdir + in + + (* Check that the VDDK plugin is installed and working. We also +diff --git a/input/parse_domain_from_vmx.ml b/input/parse_domain_from_vmx.ml +index 7aca2c24..15ee093f 100644 +--- a/input/parse_domain_from_vmx.ml ++++ b/input/parse_domain_from_vmx.ml +@@ -82,7 +82,8 @@ let scp_from_remote_to_temporary uri tmpdir filename = + if verbose () then + eprintf "%s\n%!" cmd; + if Sys.command cmd <> 0 then +- error (f_"could not copy the VMX file from the remote server, see earlier error messages"); ++ error (f_"could not copy the VMX file from the remote server, \ ++ see earlier error messages"); + localfile + + (* Test if [path] exists on the remote server. *) +diff --git a/input/parse_libvirt_xml.ml b/input/parse_libvirt_xml.ml +index 65693c98..123d09f4 100644 +--- a/input/parse_libvirt_xml.ml ++++ b/input/parse_libvirt_xml.ml +@@ -44,7 +44,8 @@ let get_drive_slot str offset = + let name = String.sub str offset (String.length str - offset) in + try Some (drive_index name) + with Invalid_argument _ -> +- warning (f_"could not parse device name ‘%s’ from the source libvirt XML") str; ++ warning (f_"could not parse device name ‘%s’ \ ++ from the source libvirt XML") str; + None + + let parse_libvirt_xml ?conn xml = +@@ -70,7 +71,8 @@ let parse_libvirt_xml ?conn xml = + let hypervisor = + match xpath_string "/domain/@type" with + | None | Some "" -> +- error (f_"in the libvirt XML metadata, is missing or empty") ++ error (f_"in the libvirt XML metadata, \ ++ is missing or empty") + | Some s -> source_hypervisor_of_string s in + let name = + match xpath_string "/domain/name/text()" with +@@ -155,7 +157,8 @@ let parse_libvirt_xml ?conn xml = + | Some "none" -> + LNone + | Some t -> +- warning (f_" in the input libvirt XML was ignored") t; ++ warning (f_" in the input libvirt XML \ ++ was ignored") t; + LNoListen + ) in + let port = +@@ -176,10 +179,13 @@ let parse_libvirt_xml ?conn xml = + s_keymap = keymap; s_password = password; s_listen = listen; + s_port = port } + | Some ("sdl"|"desktop" as t) -> +- warning (f_"virt-v2v does not support local displays, so in the input libvirt XML was ignored") t; ++ warning (f_"virt-v2v does not support local displays, so \ ++ in the input libvirt XML was ignored") ++ t; + None + | Some t -> +- warning (f_"display in the input libvirt XML was ignored") t; ++ warning (f_"display in the input \ ++ libvirt XML was ignored") t; + None + ) in + +@@ -297,7 +303,8 @@ let parse_libvirt_xml ?conn xml = + sprintf "%s://%s%s%s" driver host port (uri_quote path) in + add_disk format controller (HTTP url) + | Some protocol, _, _ -> +- warning (f_" with was ignored") ++ warning (f_" with \ ++ was ignored") + protocol + ) + | Some "volume" -> +@@ -323,7 +330,8 @@ let parse_libvirt_xml ?conn xml = + | None -> () + ); + | Some vol_type -> +- warning (f_" with was ignored") vol_type ++ warning (f_" with \ ++ was ignored") vol_type + ) + ) + | Some disk_type -> +@@ -364,13 +372,15 @@ let parse_libvirt_xml ?conn xml = + let name = String.sub dev 2 (String.length dev - 2) in + (try Some (int_of_string name) + with Failure _ -> +- warning (f_"could not parse device name ‘%s’ from the source libvirt XML") dev; ++ warning (f_"could not parse device name ‘%s’ \ ++ from the source libvirt XML") dev; + None + ) + | Some dev -> + let rec loop = function + | [] -> +- warning (f_" was ignored because the device name could not be recognized") dev; ++ warning (f_" was ignored because \ ++ the device name could not be recognized") dev; + None + | prefix :: rest -> + if String.is_prefix dev prefix then ( +diff --git a/input/vCenter.ml b/input/vCenter.ml +index 8a1a5655..f3bc80e2 100644 +--- a/input/vCenter.ml ++++ b/input/vCenter.ml +@@ -69,7 +69,9 @@ let rec start_nbdkit_for_path ?bandwidth ?cor ?password_file + if uri.uri_user <> None then + error (f_"vcenter: incorrect username or password") + else +- error (f_"vcenter: incorrect username or password. You might need to specify the username in the URI like this: [vpx|esx|..]://USERNAME@[etc]") ++ error (f_"vcenter: incorrect username or password. You might need \ ++ to specify the username in the URI like this: \ ++ [vpx|esx|..]://USERNAME@[etc]") + ); + + if status = "404" then ( +@@ -150,7 +152,8 @@ and fetch_headers_from_url password_file uri sslverify https_url = + (match uri.uri_user, password_file with + | None, None -> () + | None, Some _ -> +- warning (f_"-ip PASSWORD_FILE parameter ignored because 'user@' was not given in the URL") ++ warning (f_"-ip PASSWORD_FILE parameter ignored because \ ++ 'user@' was not given in the URL") + | Some user, None -> + List.push_back curl_args ("user", Some user) + | Some user, Some password_file -> +diff --git a/inspector/inspector.ml b/inspector/inspector.ml +index 222371d5..13d58df3 100644 +--- a/inspector/inspector.ml ++++ b/inspector/inspector.ml +@@ -111,7 +111,8 @@ let rec main () = + *) + let rec error_unless_ip_addr what addr = + if not (PCRE.matches mac_ip_re addr) then +- error (f_"cannot parse --mac ip %s: doesn’t look like “%s” is an IP address") what addr ++ error (f_"cannot parse --mac ip %s: doesn’t look like “%s” \ ++ is an IP address") what addr + in + error_unless_ip_addr "ipaddr" if_ip_address; + Option.may (error_unless_ip_addr "gw") if_default_gateway; +@@ -122,7 +123,8 @@ let rec main () = + | Some len -> + let len = + try int_of_string len with +- | Failure _ -> error (f_"cannot parse --mac ip prefix length field as an integer: %s") len in ++ | Failure _ -> error (f_"cannot parse --mac ip prefix \ ++ length field as an integer: %s") len in + if len < 0 || len > 128 then + error (f_"--mac ip prefix length field is out of range"); + Some len in +@@ -191,7 +193,8 @@ A short summary of the options is given below. For detailed help please + read the man page virt-v2v-inspector(1). + ") + prog in +- let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in ++ let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ++ ~machine_readable:true usage_msg in + Getopt.parse opthandle.getopt; + + (* Print the version, easier than asking users to tell us. *) +@@ -260,7 +263,8 @@ read the man page virt-v2v-inspector(1). + let { Xml.uri_server = server; uri_scheme = scheme } = + try Xml.parse_uri orig_uri + with Invalid_argument msg -> +- error (f_"could not parse '-ic %s'. Original error message was: %s") ++ error (f_"could not parse '-ic %s'. \ ++ Original error message was: %s") + orig_uri msg in + + match server, scheme, input_transport with +@@ -290,7 +294,9 @@ read the man page virt-v2v-inspector(1). + + (* Unknown remote scheme. *) + | Some _, Some _, _ -> +- warning (f_"no support for remote libvirt connections to '-ic %s'. The conversion may fail when it tries to read the source disks.") orig_uri; ++ warning (f_"no support for remote libvirt connections \ ++ to '-ic %s'. The conversion may fail when it \ ++ tries to read the source disks.") orig_uri; + (module Input_libvirt.Libvirt_) in + + let input_options = { +@@ -374,8 +380,14 @@ and check_host_free_space () = + debug "check_host_free_space: large_tmpdir=%s free_space=%Ld" + large_tmpdir free_space; + if free_space < 1_073_741_824L then +- error (f_"insufficient free space in the conversion server temporary directory %s (%s).\n\nEither free up space in that directory, or set the LIBGUESTFS_CACHEDIR environment variable to point to another directory with more than 1GB of free space.\n\nSee also the virt-v2v(1) manual, section \"Minimum free space check in the host\".") +- large_tmpdir (human_size free_space) ++ error (f_"insufficient free space in the conversion server \ ++ temporary directory %s (%s).\n\nEither free up space \ ++ in that directory, or set the LIBGUESTFS_CACHEDIR \ ++ environment variable to point to another directory \ ++ with more than 1GB of free space.\n\nSee also the \ ++ virt-v2v(1) manual, section \ ++ \"Minimum free space check in the host\".") ++ large_tmpdir (human_size free_space) + + (* This is a copy of {!Output.get_disks}. *) + and get_disks dir = +diff --git a/lib/create_ovf.ml b/lib/create_ovf.ml +index 79b32857..5e444868 100644 +--- a/lib/create_ovf.ml ++++ b/lib/create_ovf.ml +@@ -515,13 +515,17 @@ let create_meta_files output_alloc output_format sd_uuid image_uuids sizes = + | "raw" -> "RAW" + | "qcow2" -> "COW" + | _ -> +- error (f_"RHV does not support the output format ‘%s’, only raw or qcow2") output_format in ++ error (f_"RHV does not support the output format ‘%s’, \ ++ only raw or qcow2") output_format in + + List.mapi ( + fun i (virtual_size, image_uuid) -> + let size_in_sectors = + if virtual_size &^ 511L <> 0L then +- error (f_"the virtual size of the input disk %d is not an exact multiple of 512 bytes. The virtual size is: %Ld.\n\nThis probably means something unexpected is going on, so please file a bug about this issue.") ++ error (f_"the virtual size of the input disk %d is not an \ ++ exact multiple of 512 bytes. The virtual size is: \ ++ %Ld.\n\nThis probably means something unexpected is \ ++ going on, so please file a bug about this issue.") + i virtual_size; + virtual_size /^ 512L in + +@@ -782,7 +786,10 @@ let rec create_ovf source inspect + *) + (match source with + | { s_display = Some { s_password = Some _ } } -> +- warning (f_"This guest required a password for connection to its display, but this is not supported by RHV. Therefore the converted guest’s display will not require a separate password to connect."); ++ warning (f_"This guest required a password for connection to its display, \ ++ but this is not supported by RHV. Therefore the converted \ ++ guest’s display will not require a separate password \ ++ to connect."); + | _ -> ()); + + if verbose () then ( +@@ -871,7 +878,8 @@ and add_disks sizes guestcaps output_alloc output_format + | "raw" -> "RAW" + | "qcow2" -> "COW" + | _ -> +- error (f_"RHV does not support the output format ‘%s’, only raw or qcow2") output_format in ++ error (f_"RHV does not support the output format ‘%s’, \ ++ only raw or qcow2") output_format in + + (* Note: Upper case in the .meta, mixed case in the OVF. *) + let output_alloc_for_rhv = +diff --git a/lib/libvirt_utils.ml b/lib/libvirt_utils.ml +index 1a24b049..da5cbd5e 100644 +--- a/lib/libvirt_utils.ml ++++ b/lib/libvirt_utils.ml +@@ -28,7 +28,8 @@ let auth_for_password_file ?password_file () = + let auth_fn creds = + List.map ( + function +- | { Libvirt.Connect.typ = Libvirt.Connect.CredentialPassphrase } -> password ++ | { Libvirt.Connect.typ = Libvirt.Connect.CredentialPassphrase } -> ++ password + | _ -> None + ) creds + in +@@ -65,7 +66,8 @@ let get_domain conn name = + if not (String.is_prefix uri "test:") then ( + (match (Libvirt.Domain.get_info dom).Libvirt.Domain.state with + | InfoRunning | InfoBlocked | InfoPaused -> +- error (f_"libvirt domain ‘%s’ is running or paused. It must be shut down in order to perform virt-v2v conversion") ++ error (f_"libvirt domain ‘%s’ is running or paused. It must be \ ++ shut down in order to perform virt-v2v conversion") + (Libvirt.Domain.get_name dom) + | InfoNoState | InfoShutdown | InfoShutoff | InfoCrashed | InfoPMSuspended -> + () +@@ -84,7 +86,11 @@ let get_pool conn name = + (try + Libvirt.Pool.lookup_by_name conn name + with Libvirt.Virterror { code = VIR_ERR_NO_STORAGE_POOL; message } -> +- error (f_"cannot find libvirt pool ‘%s’: %s\n\nUse ‘virsh pool-list --all’ to list all available pools, and ‘virsh pool-dumpxml ’ to display details about a particular pool.\n\nTo set the pool which virt-v2v uses, add the ‘-os ’ option.") ++ error (f_"cannot find libvirt pool ‘%s’: %s\n\nUse \ ++ ‘virsh pool-list --all’ to list all available pools, \ ++ and ‘virsh pool-dumpxml ’ to display details \ ++ about a particular pool.\n\nTo set the pool which \ ++ virt-v2v uses, add the ‘-os ’ option.") + name (Option.default "" message) + ) + +diff --git a/lib/networks.ml b/lib/networks.ml +index 93250fe4..c079814d 100644 +--- a/lib/networks.ml ++++ b/lib/networks.ml +@@ -81,25 +81,30 @@ let create () = { + let add_mac t mac vnet_type vnet = + let mac = String.lowercase_ascii mac in + if StringMap.mem mac t.macs then +- error (f_"duplicate --mac parameter. Duplicate mappings specified for MAC address %s.") mac; ++ error (f_"duplicate --mac parameter. Duplicate mappings specified \ ++ for MAC address %s.") mac; + t.macs <- StringMap.add mac (vnet_type, vnet) t.macs + + let add_network t i o = + if StringMap.mem i t.network_map then +- error (f_"duplicate -n/--network parameter. Duplicate mappings specified for network %s.") i; ++ error (f_"duplicate -n/--network parameter. Duplicate mappings \ ++ specified for network %s.") i; + t.network_map <- StringMap.add i o t.network_map + + let add_default_network t o = + if t.default_network <> None then +- error (f_"duplicate -n/--network parameter. Only one default mapping is allowed."); ++ error (f_"duplicate -n/--network parameter. Only one \ ++ default mapping is allowed."); + t.default_network <- Some o + + let add_bridge t i o = + if StringMap.mem i t.bridge_map then +- error (f_"duplicate -b/--bridge parameter. Duplicate mappings specified for bridge %s.") i; ++ error (f_"duplicate -b/--bridge parameter. Duplicate mappings \ ++ specified for bridge %s.") i; + t.bridge_map <- StringMap.add i o t.bridge_map + + let add_default_bridge t o = + if t.default_bridge <> None then +- error (f_"duplicate -b/--bridge parameter. Only one default mapping is allowed."); ++ error (f_"duplicate -b/--bridge parameter. Only one default mapping \ ++ is allowed."); + t.default_bridge <- Some o +diff --git a/lib/types.ml b/lib/types.ml +index 7ffb868b..f21c30bd 100644 +--- a/lib/types.ml ++++ b/lib/types.ml +@@ -248,7 +248,8 @@ and string_of_source_display { s_display_type = typ; + | LAddress a -> sprintf " listening on address %s" a + | LNetwork n -> sprintf " listening on network %s" n + | LSocket (Some s) -> sprintf " listening on Unix domain socket %s" s +- | LSocket None -> sprintf " listening on automatically created Unix domain socket" ++ | LSocket None -> ++ sprintf " listening on automatically created Unix domain socket" + | LNone -> " listening on private fd" + ) + +diff --git a/lib/utils.ml b/lib/utils.ml +index 26e7e259..281868b5 100644 +--- a/lib/utils.ml ++++ b/lib/utils.ml +@@ -80,7 +80,8 @@ let find_uefi_firmware guest_arch = + guest_arch in + let rec loop = function + | [] -> +- error (f_"cannot find firmware for UEFI guests.\n\nYou probably need to install OVMF (x86-64), or AAVMF (aarch64)") ++ error (f_"cannot find firmware for UEFI guests.\n\nYou probably \ ++ need to install OVMF (x86-64), or AAVMF (aarch64)") + | ({ Uefi.code; vars = vars_template } as ret) :: rest -> + if Sys.file_exists code && Sys.file_exists vars_template then ret + else loop rest +@@ -197,7 +198,9 @@ and libvirt_qemu_user = + let error_if_no_ssh_agent () = + try ignore (Sys.getenv "SSH_AUTH_SOCK") + with Not_found -> +- error (f_"ssh-agent authentication has not been set up ($SSH_AUTH_SOCK is not set). This is required by qemu to do passwordless ssh access. See the virt-v2v(1) man page for more information.") ++ error (f_"ssh-agent authentication has not been set up ($SSH_AUTH_SOCK \ ++ is not set). This is required by qemu to do passwordless \ ++ ssh access. See the virt-v2v(1) man page for more information.") + + (* Create the directory containing inX and outX sockets. *) + let create_v2v_directory () = +diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml +index bd01304d..e1c1f616 100644 +--- a/output/create_libvirt_xml.ml ++++ b/output/create_libvirt_xml.ml +@@ -392,7 +392,9 @@ let create_libvirt_xml ?pool source inspect + * so target_ide_bus must be empty, otherwise we give a warning. + *) + if Array.length target_buses.target_ide_bus > 0 then +- warning "machine type virt does not support IDE and SATA legacy devices, some legacy devices of this guest have been dropped from the libvirt output"; ++ warning "machine type virt does not support IDE and SATA legacy \ ++ devices, some legacy devices of this guest have been \ ++ dropped from the libvirt output"; + [] in + List.push_back_list devices ide_disks; + List.push_back_list devices +diff --git a/output/output.ml b/output/output.ml +index 6065e592..e419c13d 100644 +--- a/output/output.ml ++++ b/output/output.ml +@@ -76,7 +76,8 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) + output_alloc output_format filename size socket = + (* Check nbdkit is installed and has the required plugin. *) + if not (Nbdkit.is_installed ()) then +- error (f_"nbdkit is not installed or not working. It is required to use ‘-o disk’."); ++ error (f_"nbdkit is not installed or not working. It is required \ ++ to use ‘-o disk’."); + if not (Nbdkit.probe_plugin "file") then + error (f_"nbdkit-file-plugin is not installed or not working"); + let nbdkit_config = Nbdkit.config () in +diff --git a/output/output_glance.ml b/output/output_glance.ml +index e6a7f789..08c0c935 100644 +--- a/output/output_glance.ml ++++ b/output/output_glance.ml +@@ -63,7 +63,10 @@ module Glance = struct + * program exits early. + *) + if shell_command "glance image-list > /dev/null" <> 0 then +- error (f_"glance: glance client is not installed or set up correctly. You may need to set environment variables or source a script to enable authentication. See preceding messages for details."); ++ error (f_"glance: glance client is not installed or set up correctly. \ ++ You may need to set environment variables or source a script \ ++ to enable authentication. \ ++ See preceding messages for details."); + + (* When debugging, query the glance client for its version. *) + if verbose () then ( +diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml +index 00e6a8a5..d41b5d8e 100644 +--- a/output/output_kubevirt.ml ++++ b/output/output_kubevirt.ml +@@ -58,9 +58,11 @@ module Kubevirt = struct + let output_storage = + match options.output_storage with + | None -> +- error (f_"-o kubevirt: output directory was not specified, use '-os /dir'") ++ error (f_"-o kubevirt: 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 ++ 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 +diff --git a/output/output_libvirt.ml b/output/output_libvirt.ml +index 04b4c5f8..19171a53 100644 +--- a/output/output_libvirt.ml ++++ b/output/output_libvirt.ml +@@ -94,7 +94,13 @@ module Libvirt_ = struct + + (* Does the domain already exist on the target? (RHBZ#889082) *) + if Libvirt_utils.domain_exists conn output_name then +- error (f_"a libvirt domain called ‘%s’ already exists on the target.\n\nIf using virt-v2v directly, use the ‘-on’ option to select a different name. Or delete the existing domain on the target using the ‘virsh undefine’ command.\n\nIf using virt-p2v, select a different ‘Name’ in the ‘Target properties’. Or delete the existing domain on the target using the ‘virsh undefine’ command.") ++ error (f_"a libvirt domain called ‘%s’ already exists on the \ ++ target.\n\nIf using virt-v2v directly, use the ‘-on’ \ ++ option to select a different name. Or delete the \ ++ existing domain on the target using the ‘virsh undefine’ \ ++ command.\n\nIf using virt-p2v, select a different ‘Name’ \ ++ in the ‘Target properties’. Or delete the existing domain \ ++ on the target using the ‘virsh undefine’ command.") + output_name; + + (* Connect to output libvirt instance and check that the pool exists +@@ -112,9 +118,13 @@ module Libvirt_ = struct + let target_path = + match xpath_string "/pool/target/path/text()" with + | None -> +- error (f_"-o libvirt: output pool ‘%s’ does not have /pool/target/path element. See virt-v2v-output-local(1)") output_pool ++ error (f_"-o libvirt: output pool ‘%s’ does not have \ ++ /pool/target/path element. See \ ++ virt-v2v-output-local(1)") output_pool + | Some dir when not (is_directory dir) -> +- error (f_"-o libvirt: output pool ‘%s’ has type='dir' but the /pool/target/path element is not a local directory. See virt-v2v-output-local(1)") output_pool ++ error (f_"-o libvirt: output pool ‘%s’ has type='dir' but the \ ++ /pool/target/path element is not a local directory. \ ++ See virt-v2v-output-local(1)") output_pool + | Some dir -> dir in + + (* Get the name of the pool, since we have to use that +@@ -194,7 +204,9 @@ module Libvirt_ = struct + (try Unix.unlink tmpfile with _ -> ()) + with + Libvirt.Virterror { message } -> +- warning (f_"could not define libvirt domain: %s.\nThe libvirt XML is still available in ‘%s’. Try running ‘virsh -c %s define %s’ yourself instead.") ++ warning (f_"could not define libvirt domain: %s.\nThe libvirt XML \ ++ is still available in ‘%s’. Try running \ ++ ‘virsh -c %s define %s’ yourself instead.") + (Option.default "" message) tmpfile + (Libvirt.Connect.get_uri conn) tmpfile + ) +diff --git a/output/output_null.ml b/output/output_null.ml +index c8e27c0b..e42b07ee 100644 +--- a/output/output_null.ml ++++ b/output/output_null.ml +@@ -56,7 +56,8 @@ module Null = struct + + (* Check nbdkit is installed and has the required plugin. *) + if not (Nbdkit.is_installed ()) then +- error (f_"nbdkit is not installed or not working. It is required to use ‘-o null’."); ++ error (f_"nbdkit is not installed or not working. \ ++ It is required to use ‘-o null’."); + if not (Nbdkit.probe_plugin "null") then + error (f_"nbdkit-null-plugin is not installed or not working"); + +diff --git a/output/output_openstack.ml b/output/output_openstack.ml +index aa01d5a6..09776e73 100644 +--- a/output/output_openstack.ml ++++ b/output/output_openstack.ml +@@ -141,7 +141,8 @@ The os-* parameters and environment variables are optional. + let error_unless_openstack_command_exists () = + try ignore (which openstack_binary) + with Executable_not_found _ -> +- error (f_"the ‘%s’ program is not available. It is needed to communicate with OpenStack.") ++ error (f_"the ‘%s’ program is not available. \ ++ It is needed to communicate with OpenStack.") + openstack_binary + in + error_unless_openstack_command_exists (); +@@ -195,7 +196,8 @@ The os-* parameters and environment variables are optional. + *) + let args = [ "token"; "issue" ] in + if run_openstack_command args <> 0 then +- error (f_"openstack: precheck failed, there may be a problem with authentication, see earlier error messages"); ++ error (f_"openstack: precheck failed, there may be a problem with \ ++ authentication, see earlier error messages"); + + let output_name = Option.default source.s_name options.output_name in + +@@ -286,7 +288,8 @@ The os-* parameters and environment variables are optional. + let json = + match run_openstack_command_capture_json !args with + | None -> +- error (f_"openstack: failed to create a cinder volume, see earlier error messages") ++ error (f_"openstack: failed to create a cinder volume, \ ++ see earlier error messages") + | Some json -> json in + let id = JSON_parser.object_get_string "id" json in + +@@ -298,13 +301,15 @@ The os-* parameters and environment variables are optional. + (fun () -> + match run_openstack_command_capture_json args with + | None -> +- error (f_"openstack: failed to query cinder volume status, see earlier error messages") ++ error (f_"openstack: failed to query cinder volume status, \ ++ see earlier error messages") + | Some json -> + match JSON_parser.object_get_string "status" json with + | "creating" -> None + | "available" -> Some () (* done *) + | status -> +- error (f_"openstack: unknown volume status \"%s\": expected \"creating\" or \"available\"") status ++ error (f_"openstack: unknown volume status \"%s\": \ ++ expected \"creating\" or \"available\"") status + ); + + id +@@ -330,7 +335,8 @@ The os-* parameters and environment variables are optional. + let attach_volume id = + let args = [ "server"; "add"; "volume"; server_id; id ] in + if run_openstack_command args <> 0 then +- error (f_"openstack: failed to attach cinder volume to VM, see earlier error messages"); ++ error (f_"openstack: failed to attach cinder volume to VM, \ ++ see earlier error messages"); + + (* We expect the disk to appear under /dev/disk/by-id. + * +@@ -351,7 +357,8 @@ The os-* parameters and environment variables are optional. + else id in + + with_timeout ~sleep:5 +- (sprintf (f_"waiting for cinder volume %s to attach to the conversion appliance") id) ++ (sprintf (f_"waiting for cinder volume %s to attach to the \ ++ conversion appliance") id) + attach_timeout + (fun () -> + let entries = +@@ -428,7 +435,8 @@ The os-* parameters and environment variables are optional. + List.push_back args id; + + if run_openstack_command !args <> 0 then +- error (f_"openstack: failed to set image properties on cinder volume, see earlier error messages") ++ error (f_"openstack: failed to set image properties on cinder volume, \ ++ see earlier error messages") + in + + (* Image properties are only set on the first disk. +diff --git a/output/output_qemu.ml b/output/output_qemu.ml +index 5788fc42..b667e782 100644 +--- a/output/output_qemu.ml ++++ b/output/output_qemu.ml +@@ -71,7 +71,8 @@ module QEMU = struct + | None -> + error (f_"-o qemu: 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 ++ 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 +diff --git a/output/output_rhv.ml b/output/output_rhv.ml +index 45f831e3..08ef651b 100644 +--- a/output/output_rhv.ml ++++ b/output/output_rhv.ml +@@ -88,9 +88,17 @@ module RHV = struct + debug "RHV: actual UID:GID of new files is %d:%d" actual_uid actual_gid; + if uid <> actual_uid || gid <> actual_gid then ( + if running_as_root then +- warning (f_"cannot write files to the NFS server as %d:%d, even though we appear to be running as root. This probably means the NFS client or idmapd is not configured properly.\n\nYou will have to chown the files that virt-v2v creates after the run, otherwise RHV-M will not be able to import the VM.") uid gid ++ warning (f_"cannot write files to the NFS server as %d:%d, \ ++ even though we appear to be running as root. This \ ++ probably means the NFS client or idmapd is not \ ++ configured properly.\n\nYou will have to chown \ ++ the files that virt-v2v creates after the run, \ ++ otherwise RHV-M will not be able to import the VM.") ++ uid gid + else +- warning (f_"cannot write files to the NFS server as %d:%d. You might want to stop virt-v2v (^C) and rerun it as root.") uid gid ++ warning (f_"cannot write files to the NFS server as %d:%d. \ ++ You might want to stop virt-v2v (^C) and rerun it \ ++ as root.") uid gid + ) in + + (* Create unique UUIDs for everything *) +@@ -209,7 +217,9 @@ module RHV = struct + (* Try mounting it. *) + let cmd = [ "mount"; sprintf "%s:%s" server export; mp ] in + if run_command cmd <> 0 then +- error (f_"mount command failed, see earlier errors.\n\nThis probably means you didn't specify the right %s path [-os %s], or else you need to rerun virt-v2v as root.") domain_class os; ++ error (f_"mount command failed, see earlier errors.\n\nThis probably \ ++ means you didn't specify the right %s path [-os %s], or \ ++ else you need to rerun virt-v2v as root.") domain_class os; + + (* Make sure it is unmounted at exit, as late as possible (prio=9999) *) + On_exit.f ~prio:9999 ( +@@ -232,7 +242,10 @@ module RHV = struct + let entries = + try Sys.readdir mp + with Sys_error msg -> +- error (f_"could not read the %s specified by the '-os %s' parameter on the command line. Is it really an OVirt or RHV-M %s? The original error is: %s") domain_class os domain_class msg in ++ error (f_"could not read the %s specified by the '-os %s' \ ++ parameter on the command line. Is it really an \ ++ OVirt or RHV-M %s? The original error is: %s") ++ domain_class os domain_class msg in + let entries = Array.to_list entries in + let uuids = List.filter ( + fun entry -> +@@ -244,9 +257,12 @@ module RHV = struct + match uuids with + | [uuid] -> uuid + | [] -> +- error (f_"there are no UUIDs in the %s (%s). Is it really an OVirt or RHV-M %s?") domain_class os domain_class ++ error (f_"there are no UUIDs in the %s (%s). Is it really an \ ++ OVirt or RHV-M %s?") domain_class os domain_class + | _::_ -> +- error (f_"there are multiple UUIDs in the %s (%s). This is unexpected, and may be a bug in virt-v2v or OVirt.") domain_class os in ++ error (f_"there are multiple UUIDs in the %s (%s). This is \ ++ unexpected, and may be a bug in virt-v2v or OVirt.") ++ domain_class os in + + (* Check that the domain has been attached to a Data Center by + * checking that the master/vms directory exists. +@@ -254,7 +270,13 @@ module RHV = struct + let () = + let master_vms_dir = mp // uuid // "master" // "vms" in + if not (is_directory master_vms_dir) then +- error (f_"%s does not exist or is not a directory.\n\nMost likely cause: Either the %s (%s) has not been attached to any Data Center, or the path %s is not an %s at all.\n\nYou have to attach the %s to a Data Center using the RHV-M / OVirt user interface first.\n\nIf you don’t know what the %s mount point should be then you can also find this out through the RHV-M user interface.") ++ error (f_"%s does not exist or is not a directory.\n\nMost likely \ ++ cause: Either the %s (%s) has not been attached to any \ ++ Data Center, or the path %s is not an %s at all.\n\n\ ++ You have to attach the %s to a Data Center using the \ ++ RHV-M / OVirt user interface first.\n\nIf you don’t \ ++ know what the %s mount point should be then you can \ ++ also find this out through the RHV-M user interface.") + master_vms_dir domain_class os os + domain_class domain_class domain_class in + +diff --git a/output/output_rhv_upload.ml b/output/output_rhv_upload.ml +index f2ced4f4..c84ce7a6 100644 +--- a/output/output_rhv_upload.ml ++++ b/output/output_rhv_upload.ml +@@ -65,13 +65,17 @@ after their uploads (if you do, you must supply one for each disk): + let output_conn = + match options.output_conn with + | None -> +- error (f_"-o rhv-upload: use ‘-oc’ to point to the oVirt or RHV server REST API URL, which is usually https://servername/ovirt-engine/api") ++ error (f_"-o rhv-upload: use ‘-oc’ to point to the oVirt \ ++ or RHV server REST API URL, which is usually \ ++ https://servername/ovirt-engine/api") + | Some oc -> oc in + (* In theory we could make the password optional in future. *) + let output_password = + match options.output_password with + | None -> +- error (f_"-o rhv-upload: output password file was not specified, use ‘-op’ to point to a file which contains the password used to connect to the oVirt or RHV server") ++ error (f_"-o rhv-upload: output password file was not specified, \ ++ use ‘-op’ to point to a file which contains the password \ ++ used to connect to the oVirt or RHV server") + | Some op -> op in + let output_storage = + match options.output_storage with +@@ -126,7 +130,8 @@ after their uploads (if you do, you must supply one for each disk): + let nil_uuid = "00000000-0000-0000-0000-000000000000" in + let rex_uuid = lazy ( + let hex = "[a-fA-F0-9]" in +- let str = sprintf "^%s{8}-%s{4}-%s{4}-%s{4}-%s{12}$" hex hex hex hex hex in ++ let str = sprintf "^%s{8}-%s{4}-%s{4}-%s{4}-%s{12}$" ++ hex hex hex hex hex in + PCRE.compile str + ) in + if uuid = nil_uuid then false +@@ -151,13 +156,16 @@ after their uploads (if you do, you must supply one for each disk): + let res = run_command [ Python_script.python; "-c"; + "import ovirtsdk4" ] in + if res <> 0 then +- error (f_"the Python module ‘ovirtsdk4’ could not be loaded, is it installed? See previous messages for problems.") ++ error (f_"the Python module ‘ovirtsdk4’ could not be loaded, \ ++ is it installed? See previous messages for problems.") + in + + (* Check that nbdkit is available and new enough. *) + let error_unless_nbdkit_working () = + if not (Nbdkit.is_installed ()) then +- error (f_"nbdkit is not installed or not working. It is required to use ‘-o rhv-upload’. See the virt-v2v-output-rhv(1) manual.") ++ error (f_"nbdkit is not installed or not working. It is required \ ++ to use ‘-o rhv-upload’. See the virt-v2v-output-rhv(1) \ ++ manual.") + in + + let error_unless_nbdkit_min_version config = +@@ -175,7 +183,8 @@ after their uploads (if you do, you must supply one for each disk): + (quote (Python_script.path plugin_script)) in + debug "%s" cmd; + if Sys.command cmd <> 0 then +- error (f_"nbdkit python plugin is not installed or not working. It is required if you want to use ‘-o rhv-upload’. ++ error (f_"nbdkit python plugin is not installed or not working. \ ++ It is required if you want to use ‘-o rhv-upload’. + + See also the virt-v2v-output-rhv(1) manual."); + in +@@ -187,7 +196,10 @@ See also the virt-v2v-output-rhv(1) manual."); + if have_selinux then ( + let selinux = try List.assoc "selinux" config with Not_found -> "no" in + if selinux = "no" then +- error (f_"nbdkit was compiled without SELinux support. You will have to recompile nbdkit with libselinux-devel installed, or else set SELinux to Permissive mode while doing the conversion.") ++ error (f_"nbdkit was compiled without SELinux support. You will \ ++ have to recompile nbdkit with libselinux-devel installed, \ ++ or else set SELinux to Permissive mode while doing the \ ++ conversion.") + ) + in + +@@ -280,8 +292,9 @@ See also the virt-v2v-output-rhv(1) manual."); + | Some uuids -> + let nr_disks = List.length disks in + if List.length uuids <> nr_disks then +- error (f_"the number of ‘-oo rhv-disk-uuid’ parameters passed on th +-e command line has to match the number of guest disk images (for this guest: %d)") nr_disks; ++ error (f_"the number of ‘-oo rhv-disk-uuid’ parameters passed on \ ++ the command line has to match the number of guest \ ++ disk images (for this guest: %d)") nr_disks; + uuids + | None -> List.map (fun _ -> uuidgen ()) disks in + +@@ -357,7 +370,10 @@ e command line has to match the number of guest disk images (for this guest: %d) + | "raw" as fmt -> fmt + | "qcow2" as fmt -> fmt + | _ -> +- error (f_"rhv-upload: -of %s: Only output format ‘raw’ or ‘qcow2’ is supported. If the input is in a different format then force one of these output formats by adding either ‘-of raw’ or ‘-of qcow2’ on the command line.") ++ error (f_"rhv-upload: -of %s: Only output format ‘raw’ or ‘qcow2’ \ ++ is supported. If the input is in a different format \ ++ then force one of these output formats by adding \ ++ either ‘-of raw’ or ‘-of qcow2’ on the command line.") + output_format in + let json_params = + ("disk_format", JSON.String disk_format) :: json_params in +@@ -433,7 +449,8 @@ e command line has to match the number of guest disk images (for this guest: %d) + | None -> assert false + | Some arch -> + if arch <> target_meta.guestcaps.gcaps_arch then +- error (f_"the cluster ‘%s’ does not support the architecture %s but %s") ++ error (f_"the cluster ‘%s’ does not support the architecture %s \ ++ but %s") + rhv_cluster_name target_meta.guestcaps.gcaps_arch arch + ); + +diff --git a/output/output_vdsm.ml b/output/output_vdsm.ml +index 23d1b9cd..132b0cf0 100644 +--- a/output/output_vdsm.ml ++++ b/output/output_vdsm.ml +@@ -94,7 +94,8 @@ For each disk you must supply one of each of these options: + let image_uuids = List.rev !image_uuids in + let vol_uuids = List.rev !vol_uuids in + if image_uuids = [] || vol_uuids = [] then +- error (f_"-o vdsm: either -oo vdsm-vol-uuid or -oo vdsm-vm-uuid was not specified"); ++ error (f_"-o vdsm: either -oo vdsm-vol-uuid or \ ++ -oo vdsm-vm-uuid was not specified"); + let vm_uuid = + match !vm_uuid with + | None -> +@@ -108,7 +109,8 @@ For each disk you must supply one of each of these options: + match options.output_storage with + | None -> error (f_"-o vdsm: -os option was not specified") + | Some d when not (is_directory d) -> +- error (f_"-os %s: output directory does not exist or is not a 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 +@@ -128,7 +130,9 @@ For each disk you must supply one of each of these options: + + if List.length image_uuids <> List.length disks || + List.length vol_uuids <> List.length disks then +- error (f_"the number of ‘-oo vdsm-image-uuid’ and ‘-oo vdsm-vol-uuid’ parameters passed on the command line has to match the number of guest disk images (for this guest: %d)") ++ error (f_"the number of ‘-oo vdsm-image-uuid’ and ‘-oo vdsm-vol-uuid’ \ ++ parameters passed on the command line has to match the \ ++ number of guest disk images (for this guest: %d)") + (List.length disks); + + let dd_mp, dd_uuid = +@@ -141,7 +145,8 @@ For each disk you must supply one of each of these options: + let mp = String.concat "/" (List.rev rest) in + mp, uuid + | _ -> +- error (f_"vdsm: invalid -os parameter does not contain a valid UUID: %s") ++ error (f_"vdsm: invalid -os parameter \ ++ does not contain a valid UUID: %s") + output_storage in + + debug "VDSM: DD mountpoint: %s\nVDSM: DD UUID: %s" dd_mp dd_uuid; +@@ -158,7 +163,8 @@ For each disk you must supply one of each of these options: + + (* Note that VDSM has to create this directory too. *) + if not (is_directory ovf_output) then +- error (f_"OVF (metadata) directory (%s) does not exist or is not a directory") ++ error (f_"OVF (metadata) directory (%s) does not exist or \ ++ is not a directory") + ovf_output; + + debug "VDSM: OVF (metadata) directory: %s" ovf_output; +diff --git a/v2v/v2v.ml b/v2v/v2v.ml +index fcf5e2d4..1e8d03ef 100644 +--- a/v2v/v2v.ml ++++ b/v2v/v2v.ml +@@ -123,7 +123,8 @@ let rec main () = + *) + let rec error_unless_ip_addr what addr = + if not (PCRE.matches mac_ip_re addr) then +- error (f_"cannot parse --mac ip %s: doesn’t look like “%s” is an IP address") what addr ++ error (f_"cannot parse --mac ip %s: doesn’t look like “%s” \ ++ is an IP address") what addr + in + error_unless_ip_addr "ipaddr" if_ip_address; + Option.may (error_unless_ip_addr "gw") if_default_gateway; +@@ -134,7 +135,8 @@ let rec main () = + | Some len -> + let len = + try int_of_string len with +- | Failure _ -> error (f_"cannot parse --mac ip prefix length field as an integer: %s") len in ++ | Failure _ -> error (f_"cannot parse --mac ip prefix length field \ ++ as an integer: %s") len in + if len < 0 || len > 128 then + error (f_"--mac ip prefix length field is out of range"); + Some len in +@@ -329,7 +331,8 @@ A short summary of the options is given below. For detailed help please + read the man page virt-v2v(1). + ") + prog in +- let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in ++ let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ++ ~machine_readable:true usage_msg in + Getopt.parse opthandle.getopt; + + (* Print the version, easier than asking users to tell us. *) +@@ -420,7 +423,8 @@ read the man page virt-v2v(1). + let { Xml.uri_server = server; uri_scheme = scheme } = + try Xml.parse_uri orig_uri + with Invalid_argument msg -> +- error (f_"could not parse '-ic %s'. Original error message was: %s") ++ error (f_"could not parse '-ic %s'. \ ++ Original error message was: %s") + orig_uri msg in + + match server, scheme, input_transport with +@@ -450,7 +454,9 @@ read the man page virt-v2v(1). + + (* Unknown remote scheme. *) + | Some _, Some _, _ -> +- warning (f_"no support for remote libvirt connections to '-ic %s'. The conversion may fail when it tries to read the source disks.") orig_uri; ++ warning (f_"no support for remote libvirt connections to \ ++ '-ic %s'. The conversion may fail when it tries \ ++ to read the source disks.") orig_uri; + (module Input_libvirt.Libvirt_) in + + let input_options = { +@@ -627,8 +633,14 @@ and check_host_free_space () = + debug "check_host_free_space: large_tmpdir=%s free_space=%Ld" + large_tmpdir free_space; + if free_space < 1_073_741_824L then +- error (f_"insufficient free space in the conversion server temporary directory %s (%s).\n\nEither free up space in that directory, or set the LIBGUESTFS_CACHEDIR environment variable to point to another directory with more than 1GB of free space.\n\nSee also the virt-v2v(1) manual, section \"Minimum free space check in the host\".") +- large_tmpdir (human_size free_space) ++ error (f_"insufficient free space in the conversion server \ ++ temporary directory %s (%s).\n\nEither free up space \ ++ in that directory, or set the LIBGUESTFS_CACHEDIR \ ++ environment variable to point to another directory \ ++ with more than 1GB of free space.\n\nSee also the \ ++ virt-v2v(1) manual, section \ ++ \"Minimum free space check in the host\".") ++ large_tmpdir (human_size free_space) + + and nbdcopy ?request_size output_alloc input_uri output_uri = + (* XXX It's possible that some output modes know whether diff --git a/SOURCES/0013-output-create_libvirt_xml-wire-up-the-QEMU-guest-age.patch b/SOURCES/0013-output-create_libvirt_xml-wire-up-the-QEMU-guest-age.patch deleted file mode 100644 index 9fa3822..0000000 --- a/SOURCES/0013-output-create_libvirt_xml-wire-up-the-QEMU-guest-age.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 0699afed37343d73c6803cabec466e1c3ca229b0 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 13 Jun 2022 19:01:32 +0200 -Subject: [PATCH] output/create_libvirt_xml: wire up the QEMU guest agent - -The intent (even before RHBZ#2028764) has been to install the QEMU guest -agent in the converted domain unconditionally. Therefore, in order for the -GA to be actually accessible from the host side, augment the libvirt -output module with a "guest agent connection" also unconditionally. - -For starters, the domain needs a virtio-serial device. Then there must be -a port on the device that (in the guest) the GA identifies by name, and -that (on the host) is exposed as a listening socket (usually in the unix -address family). The adress of that port (usually a pathname, i.e., for a -unix domain socket) is then passed to whatever host-side application wants -to talk to the GA. - -The minimal domain XML fragment for that ("minimal" for our purposes) is - - - - - - -The "controller" element is needed because "controller/@model" is where we -regulate "virtio" vs. "virtio-transitional". - -Everything else is filled in by libvirt. Notably, libvirt (a) creates and -binds the unix domain socket itself (usually -"/var/lib/libvirt/qemu/channel/target/DOMAIN/org.qemu.guest_agent.0"), (b) -passes the file descriptor to QEMU, and (c) figures out the socket -pathname for commands such as - - virsh domfsinfo DOMAIN - virsh domhostname DOMAIN --source agent - virsh domifaddr DOMAIN --source agent - virsh guestinfo DOMAIN - -For QEMU, the corresponding options would be - - -chardev socket,id=agent,server=on,wait=off,path=/tmp/DOMAIN-agent \ - -device virtio-serial-pci,id=vioserial \ - -device virtserialport,bus=vioserial.0,nr=1,chardev=agent,name=org.qemu.guest_agent.0 \ - -Note the "path=/tmp/DOMAIN-agent" property of "-chardev"; virt-v2v would -have to generate that (in place of the "fd=nnnn" property that libvirt -passes to QEMU). - -Omit extending the QEMU output module for now, as the QGA protocol is -based on JSON, and one needs "virsh" or "virt-manager" (or another -management application interface) anyway, for efficiently exchanging -messages with QGA. I don't know of end-user tools that directly connect to -"/tmp/DOMAIN-agent". - -Don't modify the RHV and OpenStack outputs either; both of these -management products likely configure the virtio-serial device -automatically, for the agent access. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2028764 -Signed-off-by: Laszlo Ersek -Message-Id: <20220613170135.12557-2-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -Tested-by: Richard W.M. Jones -(cherry picked from commit 48c6ea27c5a7053e418622f7450e3f9ef05c923f) ---- - output/create_libvirt_xml.ml | 11 +++++++++++ - tests/test-v2v-i-ova.xml | 4 ++++ - 2 files changed, 15 insertions(+) - -diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml -index 68d0a909..531a4f75 100644 ---- a/output/create_libvirt_xml.ml -+++ b/output/create_libvirt_xml.ml -@@ -524,6 +524,17 @@ let create_libvirt_xml ?pool source inspect - e "console" ["type", "pty"] []; - ]; - -+ (* Given that we install the QEMU Guest Agent for both Linux and Windows -+ * guests unconditionally, create the virtio-serial device that's needed for -+ * communication between the host and the agent. -+ *) -+ List.push_back_list devices [ -+ e "controller" ["type", "virtio-serial"; "model", virtio_model] []; -+ e "channel" ["type", "unix"] [ -+ e "target" ["type", "virtio"; "name", "org.qemu.guest_agent.0"] [] -+ ] -+ ]; -+ - List.push_back_list body [ - e "devices" [] !devices; - ]; -diff --git a/tests/test-v2v-i-ova.xml b/tests/test-v2v-i-ova.xml -index 6b8cda62..da1db473 100644 ---- a/tests/test-v2v-i-ova.xml -+++ b/tests/test-v2v-i-ova.xml -@@ -49,5 +49,9 @@ - - - -+ -+ -+ -+ - - diff --git a/SOURCES/0014-convert_linux-extract-qemu-guest-agent-package-name.patch b/SOURCES/0014-convert_linux-extract-qemu-guest-agent-package-name.patch deleted file mode 100644 index a5d7e2f..0000000 --- a/SOURCES/0014-convert_linux-extract-qemu-guest-agent-package-name.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 82c7526e052d2aa64a6754ff0e1082937e3ee4bc Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 13 Jun 2022 19:01:34 +0200 -Subject: [PATCH] convert_linux: extract qemu-guest-agent package name - -In commit a30383e35d34 ("v2v: linux: do not install qemu-guest-agent if -already installed", 2019-09-20), the name of the package providing the -QEMU guest agent was hard-coded as "qemu-guest-agent", regardless of -distro family. Turns out this is actually correct (and may have been -intentional, only it was not specifically documented): in all OS families -currently recognized by our "family" function (`RHEL_family, `ALT_family, -`SUSE_family, `Debian_family), the *binary* package is indeed called -"qemu-guest-agent": - -- https://brewweb.engineering.redhat.com/brew/packageinfo?packageID=47646 -- http://rpmfind.net/linux/rpm2html/search.php?query=qemu-guest-agent&submit=Search+...&system=&arch= -- https://packages.altlinux.org/en/sisyphus/srpms/qemu/ -- https://packages.debian.org/search?keywords=qemu-guest-agent&searchon=names&suite=all§ion=all - -As a way of documenting this, extract the mapping to a new helper function -named "qga_pkg_of_family". - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2028764 -Signed-off-by: Laszlo Ersek -Reviewed-by: Richard W.M. Jones -Message-Id: <20220613170135.12557-4-lersek@redhat.com> -(cherry picked from commit f65e8e68fb4eb9b8d40ac0fe7bfc3122a13e5251) ---- - convert/convert_linux.ml | 33 +++++++++++++++++++++++++-------- - 1 file changed, 25 insertions(+), 8 deletions(-) - -diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml -index 79462aa1..2ddbc07a 100644 ---- a/convert/convert_linux.ml -+++ b/convert/convert_linux.ml -@@ -56,6 +56,16 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - | "debian" | "ubuntu" | "linuxmint" | "kalilinux" -> `Debian_family - | _ -> assert false in - -+ (* map the OS family name to the qemu-guest-agent package name *) -+ let qga_pkg_of_family = -+ function -+ | `RHEL_family -+ | `ALT_family -+ | `SUSE_family -+ | `Debian_family -> Some "qemu-guest-agent" -+ | _ -> None -+ in -+ - assert (inspect.i_package_format = "rpm" || inspect.i_package_format = "deb"); - - (* Fail early if i_apps is empty. Certain steps such as kernel -@@ -539,14 +549,21 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - - and install_linux_tools () = - (* It is not fatal if we fail to install the QEMU guest agent. *) -- let has_qemu_guest_agent = -- List.exists ( -- fun { G.app2_name = name } -> -- name = "qemu-guest-agent" -- ) inspect.i_apps in -- if not has_qemu_guest_agent then -- (* FIXME -- install qemu-guest-agent here *) -- () -+ match qga_pkg_of_family family with -+ | None -> warning (f_"The name of the package that provides the QEMU Guest \ -+ Agent for this guest OS is unknown. The guest agent \ -+ will not be installed. Please consider reporting a \ -+ bug according to the BUGS section of the virt-v2v(1) \ -+ manual.") -+ | Some qga_pkg -> -+ let has_qemu_guest_agent = -+ List.exists ( -+ fun { G.app2_name = name } -> -+ name = qga_pkg -+ ) inspect.i_apps in -+ if not has_qemu_guest_agent then -+ (* FIXME -- install qemu-guest-agent here *) -+ () - - and configure_kernel () = - (* Previously this function would try to install kernels, but we diff --git a/SOURCES/0014-o-kubevirt-Implement-oo-compressed-for-qcow2-files.patch b/SOURCES/0014-o-kubevirt-Implement-oo-compressed-for-qcow2-files.patch new file mode 100644 index 0000000..8238af4 --- /dev/null +++ b/SOURCES/0014-o-kubevirt-Implement-oo-compressed-for-qcow2-files.patch @@ -0,0 +1,83 @@ +From 64a86bb9ef0298496a992a3a76d190b3895ffeee Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 20 Jan 2023 10:35:55 +0000 +Subject: [PATCH] -o kubevirt: Implement -oo compressed for qcow2 files + +Reported-by: Xiaodai Wang +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2162444 +Updates: commit 53690a0c602a4286fdb9408fdf6a01cc352697ec +(cherry picked from commit ada18150543466955ff73a24a9b9a66ddfac270e) +--- + output/output_kubevirt.ml | 30 ++++++++++++++++++++++-------- + 1 file changed, 22 insertions(+), 8 deletions(-) + +diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml +index d41b5d8e..ee89fdbf 100644 +--- a/output/output_kubevirt.ml ++++ b/output/output_kubevirt.ml +@@ -35,7 +35,7 @@ let rfc1123_re = + "[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" + + module Kubevirt = struct +- type poptions = output_allocation * string * string * string ++ type poptions = bool * output_allocation * string * string * string + + type t = unit + +@@ -46,11 +46,22 @@ module Kubevirt = struct + | None -> "" + + let query_output_options () = +- printf (f_"No output options can be used in this mode.\n") ++ printf (f_"Output options that can be used with -o kubevirt: ++ ++ -oo compressed Compress the output file (used only with -of qcow2) ++") ++ + + let parse_options options source = +- if options.output_options <> [] then +- error (f_"no -oo (output options) are allowed here"); ++ let compressed = ref false in ++ List.iter ( ++ function ++ | "compressed", "" -> compressed := true ++ | "compressed", v -> compressed := bool_of_string v ++ | k, _ -> ++ error (f_"-o kubevirt: unknown output option ‘-oo %s’") k ++ ) options.output_options; ++ + if options.output_password <> None then + error_option_cannot_be_used_in_output_mode "kubevirt" "-op"; + +@@ -73,11 +84,13 @@ module Kubevirt = struct + end with an alphanumeric character. Rerun virt-v2v with \ + the '-on name' option to rename it."); + +- options.output_alloc, options.output_format, output_name, output_storage ++ !compressed, options.output_alloc, options.output_format, ++ output_name, output_storage + + let setup dir options source = + let disks = get_disks dir in +- let output_alloc, output_format, output_name, output_storage = options in ++ let compressed, output_alloc, output_format, output_name, output_storage = ++ options in + + List.iter ( + fun (i, size) -> +@@ -86,11 +99,12 @@ module Kubevirt = struct + + (* Create the actual output disk. *) + let outdisk = disk_path output_storage output_name i in +- output_to_local_file output_alloc output_format outdisk size socket ++ output_to_local_file ~compressed output_alloc output_format ++ outdisk size socket + ) disks + + let finalize dir options () source inspect target_meta = +- let output_alloc, output_format, output_name, output_storage = options in ++ let _, output_alloc, output_format, output_name, output_storage = options in + + let doc = create_kubevirt_yaml source inspect target_meta + (disk_path output_storage output_name) diff --git a/SOURCES/0015-convert_linux-install-the-QEMU-guest-agent-with-a-fi.patch b/SOURCES/0015-convert_linux-install-the-QEMU-guest-agent-with-a-fi.patch deleted file mode 100644 index 5a5c7cb..0000000 --- a/SOURCES/0015-convert_linux-install-the-QEMU-guest-agent-with-a-fi.patch +++ /dev/null @@ -1,119 +0,0 @@ -From e32a5ee7deb9a381ab285aba92c4de23e3c6ee2e Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 13 Jun 2022 19:01:35 +0200 -Subject: [PATCH] convert_linux: install the QEMU guest agent with a firstboot - script - -Register a firstboot script, for installing the guest agent with the -guest's own package manager -- that is, "Guest_packages.install_command". - -For installing the package, network connectivity is required. Check it -first with "nmcli" (also checking whether NetworkManager is running), then -with "systemd-networkd-wait-online" (dependent on systemd-networkd). Note -that NetworkManager and systemd-networkd are never supposed to be enabled -at the same time. - -The source domain's SELinux policy may not allow our firstboot service to -execute the package's installation scripts (if any). For that reason, -temporarily disable SELinux around package installation. - -After installation, register another script for launching the agent. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2028764 -Signed-off-by: Laszlo Ersek -Message-Id: <20220613170135.12557-5-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit e64356896377af1ac75a03d6a4c6a4208910bbf4) ---- - convert/convert_linux.ml | 78 ++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 76 insertions(+), 2 deletions(-) - -diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml -index 2ddbc07a..59d143bd 100644 ---- a/convert/convert_linux.ml -+++ b/convert/convert_linux.ml -@@ -562,8 +562,82 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - name = qga_pkg - ) inspect.i_apps in - if not has_qemu_guest_agent then -- (* FIXME -- install qemu-guest-agent here *) -- () -+ try -+ let inst_cmd = Guest_packages.install_command [qga_pkg] -+ inspect.i_package_management in -+ -+ (* Use only the portable filename character set in this. *) -+ let selinux_enforcing = "/root/virt-v2v-fb-selinux-enforcing" -+ and timeout = 30 in -+ let fbs = -+ Firstboot.add_firstboot_script g inspect.i_root -+ in -+ info (f_"The QEMU Guest Agent will be installed for this guest at \ -+ first boot."); -+ -+ (* Wait for the network to come online in the guest (best effort). -+ *) -+ fbs "wait online" -+ (sprintf "#!/bin/sh\n\ -+ if conn=$(nmcli networking connectivity); then\n\ -+ \ \ tries=0\n\ -+ \ \ while\n\ -+ \ \ \ \ test $tries -lt %d &&\n\ -+ \ \ \ \ test full != \"$conn\"\n\ -+ \ \ do\n\ -+ \ \ \ \ sleep 1\n\ -+ \ \ \ \ tries=$((tries + 1))\n\ -+ \ \ \ \ conn=$(nmcli networking connectivity)\n\ -+ \ \ done\n\ -+ elif systemctl -q is-active systemd-networkd; then\n\ -+ \ \ /usr/lib/systemd/systemd-networkd-wait-online \\\n\ -+ \ \ \ \ -q --timeout=%d\n\ -+ fi\n" timeout timeout); -+ -+ (* Disable SELinux temporarily around package installation. Refer to -+ * and -+ * . -+ *) -+ fbs "setenforce 0" -+ (sprintf "#!/bin/sh\n\ -+ rm -f %s\n\ -+ if command -v getenforce >/dev/null &&\n\ -+ \ \ test Enforcing = \"$(getenforce)\"\n\ -+ then\n\ -+ \ \ touch %s\n\ -+ \ \ setenforce 0\n\ -+ fi\n" selinux_enforcing selinux_enforcing); -+ fbs "install qga" inst_cmd; -+ fbs "setenforce restore" -+ (sprintf "#!/bin/sh\n\ -+ if test -f %s; then\n\ -+ \ \ setenforce 1\n\ -+ \ \ rm -f %s\n\ -+ fi\n" selinux_enforcing selinux_enforcing); -+ -+ (* Start the agent now and at subsequent boots. The following -+ * commands should work on both sysvinit distros / distro versions -+ * (regardless of "/etc/rc.d/" vs. "/etc/init.d/" being the scheme -+ * in use) and systemd distros (via redirection to systemctl). -+ * -+ * On distros where the chkconfig command is redirected to -+ * systemctl, the chkconfig command is likely superfluous. That's -+ * because on systemd distros, the QGA package comes with such -+ * runtime dependencies / triggers that the presence of the -+ * virtio-serial port named "org.qemu.guest_agent.0" automatically -+ * starts the agent during (second and later) boots. However, even -+ * on such distros, the chkconfig command should do no harm. -+ *) -+ fbs "start qga" -+ (sprintf "#!/bin/sh\n\ -+ service %s start\n\ -+ chkconfig %s on\n" qga_pkg qga_pkg) -+ with -+ | Guest_packages.Unknown_package_manager msg -+ | Guest_packages.Unimplemented_package_manager msg -> -+ warning (f_"The QEMU Guest Agent will not be installed. The \ -+ install command for package ‘%s’ could not be created: \ -+ %s.") qga_pkg msg - - and configure_kernel () = - (* Previously this function would try to install kernels, but we diff --git a/SOURCES/0015-v2v-Remove-use-of-anchored.patch b/SOURCES/0015-v2v-Remove-use-of-anchored.patch new file mode 100644 index 0000000..9a7053f --- /dev/null +++ b/SOURCES/0015-v2v-Remove-use-of-anchored.patch @@ -0,0 +1,62 @@ +From 8802e8b4135c913f206508c8f7650a9f99ee6667 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 30 Jan 2023 09:17:33 +0000 +Subject: [PATCH] v2v: Remove use of ~anchored + +In various places we used PCRE.compile ~anchored:true (PCRE2_ANCHORED) +thinking it means that the regular expression is anchored at both +ends. However this is not what it means (it only anchors the start). +Replace with ^...$ + +(cherry picked from commit 8c316ed125e26583edc72eb9e953499b0078dcbd) +--- + in-place/in_place.ml | 4 ++-- + inspector/inspector.ml | 4 ++-- + v2v/v2v.ml | 4 ++-- + 3 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/in-place/in_place.ml b/in-place/in_place.ml +index 55541814..f76651e6 100644 +--- a/in-place/in_place.ml ++++ b/in-place/in_place.ml +@@ -29,8 +29,8 @@ open Types + open Utils + + (* Matches --mac command line parameters. *) +-let mac_re = PCRE.compile ~anchored:true "([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)" +-let mac_ip_re = PCRE.compile ~anchored:true "([[:xdigit:]]|:|\\.)+" ++let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$" ++let mac_ip_re = PCRE.compile "^([[:xdigit:]]|:|\\.)+$" + + let rec main () = + let set_string_option_once optname optref arg = +diff --git a/inspector/inspector.ml b/inspector/inspector.ml +index 13d58df3..d12d85c2 100644 +--- a/inspector/inspector.ml ++++ b/inspector/inspector.ml +@@ -30,8 +30,8 @@ open Utils + open DOM + + (* Matches --mac command line parameters. *) +-let mac_re = PCRE.compile ~anchored:true "([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)" +-let mac_ip_re = PCRE.compile ~anchored:true "([[:xdigit:]]|:|\\.)+" ++let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$" ++let mac_ip_re = PCRE.compile "^([[:xdigit:]]|:|\\.)+$" + + let rec main () = + let set_string_option_once optname optref arg = +diff --git a/v2v/v2v.ml b/v2v/v2v.ml +index 1e8d03ef..7a01eab5 100644 +--- a/v2v/v2v.ml ++++ b/v2v/v2v.ml +@@ -34,8 +34,8 @@ open Types + open Utils + + (* Matches --mac command line parameters. *) +-let mac_re = PCRE.compile ~anchored:true "([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)" +-let mac_ip_re = PCRE.compile ~anchored:true "([[:xdigit:]]|:|\\.)+" ++let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$" ++let mac_ip_re = PCRE.compile "^([[:xdigit:]]|:|\\.)+$" + + let rec main () = + let set_string_option_once optname optref arg = diff --git a/SOURCES/0016-RHV-outputs-limit-copied-disk-count-to-23.patch b/SOURCES/0016-RHV-outputs-limit-copied-disk-count-to-23.patch deleted file mode 100644 index 411ecd7..0000000 --- a/SOURCES/0016-RHV-outputs-limit-copied-disk-count-to-23.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 50a74177b3577952159d87335cf40c0ad3e51b4d Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 17 Jun 2022 11:53:37 +0200 -Subject: [PATCH] RHV outputs: limit copied disk count to 23 - -We currently support virtio-blk (commonly) or IDE (unusually) for exposing -disks to the converted guest; refer to "guestcaps.gcaps_block_bus" in -"lib/create_ovf.ml". When using virtio-blk (i.e., in the common case), RHV -can deal with at most 23 disks, as it plugs each virtio-blk device in a -separate slot on the PCI(e) root bus; and the other slots are reserved for -various purposes. When a domain has too many disks, the problem only -becomes apparent once the copying finishes and an import is attempted. -Modify the RHV outputs to fail relatively early when a domain has more -than 23 disks that need to be copied. - -Notes: - -- With IDE, the theoretical limit may even be as low as 4. However, in the - "Output_module.setup" function, we don't have access to - "guestcaps.gcaps_block_bus", and in practice the IDE limitation has not - caused surprises. So for now stick with 23, assuming virtio-blk. - Modifying the "Output_module.setup" parameter list just for this seems - overkill. - -- We could move the new check to an even earlier step, namely - "Output_module.parse_options", due to the v2v directory deliberately - existing (and having been populated with input sockets) at that time. - However, even discounting the fact that "parse_options" is not a good - name for including this kind of step, "parse_options" does not have - access to the v2v directory name, and modifying the signature just for - this is (again) overkill. - -- By adding the check to "Output_module.setup", we waste *some* effort - (namely, the conversion occurs between "parse_options" and "setup"), - but: (a) the "rhv-disk-uuid" count check (against the disk count) is - already being done in the rhv-upload module's "setup" function, (b) in - practice the slowest step ought to be the copying, and placing the new - check in "setup" is early enough to prevent that. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2051564 -Signed-off-by: Laszlo Ersek -Message-Id: <20220617095337.9122-1-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit e186cc2bea99a077990f192953e1bf6c9ba70e79) ---- - output/output.ml | 5 +++++ - output/output.mli | 7 +++++++ - output/output_rhv.ml | 1 + - output/output_rhv_upload.ml | 1 + - output/output_vdsm.ml | 1 + - 5 files changed, 15 insertions(+) - -diff --git a/output/output.ml b/output/output.ml -index 10e685c4..5c6670b9 100644 ---- a/output/output.ml -+++ b/output/output.ml -@@ -64,6 +64,11 @@ let get_disks dir = - in - loop [] 0 - -+let error_if_disk_count_gt dir n = -+ let socket = sprintf "%s/in%d" dir n in -+ if Sys.file_exists socket then -+ error (f_"this output module doesn't support copying more than %d disks") n -+ - let output_to_local_file ?(changeuid = fun f -> f ()) - output_alloc output_format filename size socket = - (* Check nbdkit is installed and has the required plugin. *) -diff --git a/output/output.mli b/output/output.mli -index 533a0c51..8d3d6865 100644 ---- a/output/output.mli -+++ b/output/output.mli -@@ -76,6 +76,13 @@ val get_disks : string -> (int * int64) list - (** Examines the v2v directory and opens each input socket (in0 etc), - returning a list of input disk index and size. *) - -+val error_if_disk_count_gt : string -> int -> unit -+(** This function lets an output module enforce a maximum disk count. -+ [error_if_disk_count_gt dir n] checks whether the domain has more than [n] -+ disks that need to be copied, by examining the existence of input NBD socket -+ "in[n]" in the v2v directory [dir]. If the socket exists, [error] is -+ called. *) -+ - val output_to_local_file : ?changeuid:((unit -> unit) -> unit) -> - Types.output_allocation -> - string -> string -> int64 -> string -> -diff --git a/output/output_rhv.ml b/output/output_rhv.ml -index 119207fd..8571e07b 100644 ---- a/output/output_rhv.ml -+++ b/output/output_rhv.ml -@@ -56,6 +56,7 @@ module RHV = struct - (options.output_alloc, options.output_format, output_name, output_storage) - - let rec setup dir options source = -+ error_if_disk_count_gt dir 23; - let disks = get_disks dir in - let output_alloc, output_format, output_name, output_storage = options in - -diff --git a/output/output_rhv_upload.ml b/output/output_rhv_upload.ml -index 828996b3..f2ced4f4 100644 ---- a/output/output_rhv_upload.ml -+++ b/output/output_rhv_upload.ml -@@ -133,6 +133,7 @@ after their uploads (if you do, you must supply one for each disk): - else PCRE.matches (Lazy.force rex_uuid) uuid - - let rec setup dir options source = -+ error_if_disk_count_gt dir 23; - let disks = get_disks dir in - let output_conn, output_format, - output_password, output_name, output_storage, -diff --git a/output/output_vdsm.ml b/output/output_vdsm.ml -index a1e8c246..23d1b9cd 100644 ---- a/output/output_vdsm.ml -+++ b/output/output_vdsm.ml -@@ -119,6 +119,7 @@ For each disk you must supply one of each of these options: - compat, ovf_flavour) - - let setup dir options source = -+ error_if_disk_count_gt dir 23; - let disks = get_disks dir in - let output_alloc, output_format, - output_name, output_storage, diff --git a/SOURCES/0016-o-kubevirt-Replace-PCRE-anchored-with.patch b/SOURCES/0016-o-kubevirt-Replace-PCRE-anchored-with.patch new file mode 100644 index 0000000..d5a09b0 --- /dev/null +++ b/SOURCES/0016-o-kubevirt-Replace-PCRE-anchored-with.patch @@ -0,0 +1,34 @@ +From 628ee708464ee3d266609167c48e92f883849e4d Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 30 Jan 2023 09:01:38 +0000 +Subject: [PATCH] -o kubevirt: Replace PCRE ~anchored with ^...$ + +Because this regexp was not anchored at both ends it would still +report a match for incorrect names. + +Fixes: commit 8a9c914544a49bed13eb5baf42290f835bdee7b5 +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2162332 +Reported-by: Ming Xie + +Cherry picked from commit 050a0ba714ddf2a5d81515c886032016aa75342c. +I did not include the update to the common module since picking that +would pull in the large changes made to the virtio driver code. +--- + output/output_kubevirt.ml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml +index ee89fdbf..fdf0f279 100644 +--- a/output/output_kubevirt.ml ++++ b/output/output_kubevirt.ml +@@ -31,8 +31,8 @@ open Create_kubevirt_yaml + + (* Valid output names for Kubevirt (RHBZ#2162332). *) + let rfc1123_re = +- PCRE.compile ~anchored:true +- "[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" ++ PCRE.compile ++ "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$" + + module Kubevirt = struct + type poptions = bool * output_allocation * string * string * string diff --git a/SOURCES/0017-convert-document-networking-dependency-of-key-ID-cle.patch b/SOURCES/0017-convert-document-networking-dependency-of-key-ID-cle.patch deleted file mode 100644 index c244498..0000000 --- a/SOURCES/0017-convert-document-networking-dependency-of-key-ID-cle.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 81a201269e5451cd76348e0da6d0ef4c0fb4c0dd Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 1 Jul 2022 15:30:42 +0200 -Subject: [PATCH] convert: document networking dependency of "--key ID:clevis" - -Virt-v2v enables appliance networking already, for the sake of -"unconfigure_vmware". We now have a second use case for networking: "--key -ID:clevis". Update the comment in the code. - -(Short log for libguestfs-common commit range 35467027f657..af6cb55bc58a: - -Laszlo Ersek (12): - options: fix UUID comparison logic bug in get_keys() - mltools/tools_utils: remove unused function "key_store_to_cli" - mltools/tools_utils: allow multiple "--key" options for OCaml tools too - options: replace NULL-termination with number-of-elements in get_keys() - options: wrap each passphrase from get_keys() into a struct - options: add back-end for LUKS decryption with Clevis+Tang - options: introduce selector type "key_clevis" - options: generalize "--key" selector parsing for C-language utilities - mltools/tools_utils-c: handle internal type error with abort() - mltools/tools_utils: generalize "--key" selector parsing for OCaml utils - options, mltools/tools_utils: parse "--key ID:clevis" options - options, mltools/tools_utils: add helper for network dependency -). - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1809453 -Signed-off-by: Laszlo Ersek -Message-Id: <20220628115856.5820-1-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit 98fa5ab2685371c681282ce5de704877af27be74) ---- - convert/convert.ml | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/convert/convert.ml b/convert/convert.ml -index 5e0e6c2b..b678dc92 100644 ---- a/convert/convert.ml -+++ b/convert/convert.ml -@@ -57,7 +57,8 @@ let rec convert dir options source = - * sure this is not too large because each vCPU consumes guest RAM. - *) - g#set_smp (min 8 (Sysconf.nr_processors_online ())); -- (* The network is only used by the unconfigure_vmware () function. *) -+ (* The network is used by the unconfigure_vmware () function, and the "--key -+ * ID:clevis" command line options (if any). *) - g#set_network true; - List.iter ( - fun { s_disk_id = i } -> diff --git a/SOURCES/0017-o-libvirt-Add-correct-xmlns-libosinfo-for-Rocky-Linu.patch b/SOURCES/0017-o-libvirt-Add-correct-xmlns-libosinfo-for-Rocky-Linu.patch new file mode 100644 index 0000000..ba3b352 --- /dev/null +++ b/SOURCES/0017-o-libvirt-Add-correct-xmlns-libosinfo-for-Rocky-Linu.patch @@ -0,0 +1,48 @@ +From a9630d3981cbf7f6083e82f4e22cff981d11a8b3 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 2 Feb 2023 12:29:00 +0000 +Subject: [PATCH] -o libvirt: Add correct xmlns:libosinfo for Rocky Linux + +Also a small whitespace fix and improve the warning message. + +Updates: commit db831c167b7bf757aa79dbe3db5fa8c5fd8cfc99 +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2166618 +Reported-by: Ming Xie +(cherry picked from commit ebfdca56bca69284f289e3db8a6e6baf6bc617f0) +--- + output/create_libvirt_xml.ml | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml +index e1c1f616..388fae5b 100644 +--- a/output/create_libvirt_xml.ml ++++ b/output/create_libvirt_xml.ml +@@ -47,6 +47,10 @@ let get_osinfo_id = function + when major >= 8 -> + Some (sprintf "http://centos.org/centos/%d" major) + ++ | { i_type = "linux"; i_distro = "rocky"; ++ i_major_version = major; i_minor_version = minor } -> ++ Some (sprintf "http://rockylinux.org/rocky/%d.%d" major minor) ++ + | { i_type = "linux"; i_distro = "sles"; + i_major_version = major; i_minor_version = 0; + i_product_name = product } when String.find product "Desktop" >= 0 -> +@@ -140,7 +144,8 @@ let get_osinfo_id = function + | { i_type = typ; i_distro = distro; + i_major_version = major; i_minor_version = minor; i_arch = arch; + i_product_name = product } -> +- warning (f_"unknown guest operating system: %s %s %d.%d %s (%s)") ++ warning (f_"get_osinfo_id: unknown guest operating system: \ ++ %s %s %d.%d %s (%s)") + typ distro major minor arch product; + None + +@@ -160,7 +165,6 @@ let create_libvirt_xml ?pool source inspect + | Some genid -> List.push_back body (e "genid" [] [PCData genid]) + ); + +- + (match get_osinfo_id inspect with + | None -> () + | Some osinfo_id -> diff --git a/SOURCES/0018-convert-linux-Require-host-cpu-for-all-RHEL-alike-9.patch b/SOURCES/0018-convert-linux-Require-host-cpu-for-all-RHEL-alike-9.patch new file mode 100644 index 0000000..351cb73 --- /dev/null +++ b/SOURCES/0018-convert-linux-Require-host-cpu-for-all-RHEL-alike-9.patch @@ -0,0 +1,42 @@ +From 227313ca73d24eaaa0b82aca94de2278bca0f95b Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 6 Feb 2023 12:13:25 +0000 +Subject: [PATCH] convert: linux: Require host cpu for all RHEL-alike >= 9 + +RHEL >= 9 and compatible distros like Rocky >= 9 will not boot using +the default qemu CPU. You will see an error at boot: + + Fatal glibc error: CPU does not support x86-64-v2 + +Instead you need to use -cpu host. + +In commit f28757c6d1 ("convert_linux: set "gcaps_default_cpu = false" +for x86_64 RHEL-9.0+ guests") we fixed this specifically for RHEL >= 9. + +This commit extends the same fix to all RHEL family distros. + +Updates: commit f28757c6d100060c65212ea55cfa59d308dcb850 +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2166619 +Reported-by: Ming Xie +Thanks: Laszlo Ersek +(cherry picked from commit 9f12b95bbe7bc2850ce4ba134c46a3cc5fd1167d) +--- + convert/convert_linux.ml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml +index 41767e62..27bc4ae4 100644 +--- a/convert/convert_linux.ml ++++ b/convert/convert_linux.ml +@@ -202,9 +202,9 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = + + (* RHEL >= 9.0 on x86_64 requires the processor to support the "x86-64-v2" + * microarchitecture level, which the default QEMU VCPU model does not +- * satisfy. Refer to RHBZ#2076013. ++ * satisfy. Refer to RHBZ#2076013 RHBZ#2166619. + *) +- let default_cpu_suffices = inspect.i_distro <> "rhel" || ++ let default_cpu_suffices = family <> `RHEL_family || + inspect.i_arch <> "x86_64" || + inspect.i_major_version < 9 in + diff --git a/SOURCES/0018-qemu-nbd-Implement-output-compression-for-qcow2-file.patch b/SOURCES/0018-qemu-nbd-Implement-output-compression-for-qcow2-file.patch deleted file mode 100644 index 6f57e5c..0000000 --- a/SOURCES/0018-qemu-nbd-Implement-output-compression-for-qcow2-file.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 80831868395d161af8c47edf2f54234c63581d8d Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 28 Jan 2022 09:30:29 +0000 -Subject: [PATCH] qemu-nbd: Implement output compression for qcow2 files - -Reviewed-by: Laszlo Ersek -(cherry picked from commit 71c4301909cb307def02ebcd0e89beee4138e7f2) ---- - lib/qemuNBD.ml | 11 +++++++++-- - lib/qemuNBD.mli | 5 +++++ - output/output.ml | 39 ++++++++++++++++++++++++++++++++++++--- - output/output.mli | 1 + - 4 files changed, 51 insertions(+), 5 deletions(-) - -diff --git a/lib/qemuNBD.ml b/lib/qemuNBD.ml -index ae21b17c..bbb65f41 100644 ---- a/lib/qemuNBD.ml -+++ b/lib/qemuNBD.ml -@@ -55,14 +55,16 @@ type cmd = { - disk : string; - mutable snapshot : bool; - mutable format : string option; -+ mutable imgopts : bool; - } - --let create disk = { disk; snapshot = false; format = None } -+let create disk = { disk; snapshot = false; format = None; imgopts = false } - - let set_snapshot cmd snap = cmd.snapshot <- snap - let set_format cmd format = cmd.format <- format -+let set_image_opts cmd imgopts = cmd.imgopts <- imgopts - --let run_unix socket { disk; snapshot; format } = -+let run_unix socket { disk; snapshot; format; imgopts } = - assert (disk <> ""); - - (* Create a temporary directory where we place the PID file. *) -@@ -85,6 +87,11 @@ let run_unix socket { disk; snapshot; format } = - (* -s adds a protective overlay. *) - if snapshot then List.push_back args "-s"; - -+ (* --image-opts reinterprets the filename parameter as a set of -+ * image options. -+ *) -+ if imgopts then List.push_back args "--image-opts"; -+ - if have_selinux && qemu_nbd_has_selinux_label_option () then ( - List.push_back args "--selinux-label"; - List.push_back args "system_u:object_r:svirt_socket_t:s0" -diff --git a/lib/qemuNBD.mli b/lib/qemuNBD.mli -index e10d3106..afe9d944 100644 ---- a/lib/qemuNBD.mli -+++ b/lib/qemuNBD.mli -@@ -43,6 +43,11 @@ val set_snapshot : cmd -> bool -> unit - val set_format : cmd -> string option -> unit - (** Set the format [--format] parameter. *) - -+val set_image_opts : cmd -> bool -> unit -+(** Set whether the [--image-opts] parameter is used. This changes -+ the meaning of the [filename] parameter to a set of image options. -+ Consult the qemu-nbd man page for more details. *) -+ - val run_unix : string -> cmd -> string * int - (** Start qemu-nbd command listening on a Unix domain socket, - waiting for the process to start up. -diff --git a/output/output.ml b/output/output.ml -index 5c6670b9..23c3932d 100644 ---- a/output/output.ml -+++ b/output/output.ml -@@ -69,7 +69,7 @@ let error_if_disk_count_gt dir n = - if Sys.file_exists socket then - error (f_"this output module doesn't support copying more than %d disks") n - --let output_to_local_file ?(changeuid = fun f -> f ()) -+let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) - output_alloc output_format filename size socket = - (* Check nbdkit is installed and has the required plugin. *) - if not (Nbdkit.is_installed ()) then -@@ -78,6 +78,24 @@ let output_to_local_file ?(changeuid = fun f -> f ()) - error (f_"nbdkit-file-plugin is not installed or not working"); - let nbdkit_config = Nbdkit.config () in - -+ if compressed then ( -+ (* Only allow compressed with -of qcow2. *) -+ if output_format <> "qcow2" then -+ error (f_"‘-oo compressed’ is only allowed when the output format \ -+ is a local qcow2-format file, i.e. ‘-of qcow2’"); -+ -+ (* Check nbdcopy is new enough. This assumes that the version of -+ * libnbd is the same as the version of nbdcopy, but parsing this -+ * is easier. We can remove this check when we build-depend on -+ * libnbd >= 1.14. -+ *) -+ let version = -+ NBD.create () |> NBD.get_version |> -+ String.nsplit "." |> List.map int_of_string in -+ if version < [1; 13; 5] then -+ error (f_"-oo compressed option requires nbdcopy >= 1.13.5") -+ ); -+ - let g = open_guestfs () in - let preallocation = - match output_alloc with -@@ -103,9 +121,24 @@ let output_to_local_file ?(changeuid = fun f -> f ()) - On_exit.kill pid - - | "qcow2" -> -- let cmd = QemuNBD.create filename in -+ let cmd = -+ if compressed then ( -+ let qemu_quote str = String.replace str "," ",," in -+ let image_opts = [ "driver=compress"; -+ "file.driver=qcow2"; -+ "file.file.driver=file"; -+ "file.file.filename=" ^ qemu_quote filename ] in -+ let image_opts = String.concat "," image_opts in -+ let cmd = QemuNBD.create image_opts in -+ QemuNBD.set_image_opts cmd true; -+ cmd -+ ) -+ else (* not compressed *) ( -+ let cmd = QemuNBD.create filename in -+ QemuNBD.set_format cmd (Some "qcow2"); -+ cmd -+ ) in - QemuNBD.set_snapshot cmd false; -- QemuNBD.set_format cmd (Some "qcow2"); - let _, pid = QemuNBD.run_unix socket cmd in - On_exit.kill pid - -diff --git a/output/output.mli b/output/output.mli -index 8d3d6865..c1f0f53d 100644 ---- a/output/output.mli -+++ b/output/output.mli -@@ -84,6 +84,7 @@ val error_if_disk_count_gt : string -> int -> unit - called. *) - - val output_to_local_file : ?changeuid:((unit -> unit) -> unit) -> -+ ?compressed:bool -> - Types.output_allocation -> - string -> string -> int64 -> string -> - unit diff --git a/SOURCES/0019-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch b/SOURCES/0019-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch new file mode 100644 index 0000000..39e2a7b --- /dev/null +++ b/SOURCES/0019-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch @@ -0,0 +1,30 @@ +From 6633c5ca0fe4d37ff4b8ffc62902074fa3b060fb Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Sun, 28 Sep 2014 19:14:43 +0100 +Subject: [PATCH] RHEL: v2v: Select correct qemu binary for -o qemu mode + (RHBZ#1147313). + +RHEL does not have qemu-system-x86_64 (etc), and in addition the +qemu binary is located in /usr/libexec. Encode the path to this +binary directly in the script. + +Note that we don't support people running qemu directly like this. +It's just for quick testing of converted VMs, and to help us with +support cases. +--- + output/output_qemu.ml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/output/output_qemu.ml b/output/output_qemu.ml +index b667e782..3a57a009 100644 +--- a/output/output_qemu.ml ++++ b/output/output_qemu.ml +@@ -142,7 +142,7 @@ module QEMU = struct + * module deals with shell and qemu comma quoting. + *) + let cmd = Qemuopts.create () in +- Qemuopts.set_binary_by_arch cmd (Some guestcaps.gcaps_arch); ++ Qemuopts.set_binary cmd "/usr/libexec/qemu-kvm"; + + let flag = Qemuopts.flag cmd + and arg = Qemuopts.arg cmd diff --git a/SOURCES/0019-o-disk-o-libvirt-o-qemu-Implement-of-qcow2-oo-compre.patch b/SOURCES/0019-o-disk-o-libvirt-o-qemu-Implement-of-qcow2-oo-compre.patch deleted file mode 100644 index 6da1880..0000000 --- a/SOURCES/0019-o-disk-o-libvirt-o-qemu-Implement-of-qcow2-oo-compre.patch +++ /dev/null @@ -1,272 +0,0 @@ -From ca3643d06eed2de22cb81ad2eb13ba7f75c0487e Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 28 Jan 2022 09:30:58 +0000 -Subject: [PATCH] -o disk, -o libvirt, -o qemu: Implement -of qcow2 -oo - compressed - -For various output modes, implement -oo compressed which can be used -to generate compressed qcow2 files. This option was dropped when -modularizing virt-v2v, and required changes to nbdcopy which are -finally upstream in libnbd >= 1.13.5. - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2047660 -Fixes: commit 255722cbf39afc0b012e2ac00d16fa6ba2f8c21f -Reported-by: Xiaodai Wang -Reviewed-by: Laszlo Ersek -(cherry picked from commit 53690a0c602a4286fdb9408fdf6a01cc352697ec) ---- - TODO | 14 -------------- - output/output_disk.ml | 29 +++++++++++++++++++++-------- - output/output_libvirt.ml | 31 ++++++++++++++++++++++--------- - output/output_qemu.ml | 38 +++++++++++++++++++++----------------- - 4 files changed, 64 insertions(+), 48 deletions(-) - -diff --git a/TODO b/TODO -index f578d506..04b1dd20 100644 ---- a/TODO -+++ b/TODO -@@ -1,17 +1,3 @@ --virt-v2v -o disk|qemu -oo compressed -------------------------------------- -- --This was temporarily dropped when I modularized virt-v2v. It would --not be too difficult to add it back. The following is the qemu-nbd --command required (to be run as the output helper) which creates a --compressed qcow2 disk image: -- --$ qemu-nbd --image-opts driver=compress,file.driver=qcow2,file.file.driver=file,file.file.filename=new.qcow2 -- --Note this requires fixes in nbdcopy so it obeys the advertised block --alignment: --https://lists.gnu.org/archive/html/qemu-block/2022-01/threads.html#00729 -- - virt-v2v -o rhv-upload - ---------------------- - -diff --git a/output/output_disk.ml b/output/output_disk.ml -index bc5b4e1c..abcfcdc0 100644 ---- a/output/output_disk.ml -+++ b/output/output_disk.ml -@@ -30,7 +30,7 @@ open Create_libvirt_xml - open Output - - module Disk = struct -- type poptions = Types.output_allocation * string * string * string -+ type poptions = bool * Types.output_allocation * string * string * string - - type t = unit - -@@ -41,11 +41,21 @@ module Disk = struct - | None -> "" - - let query_output_options () = -- printf (f_"No output options can be used in this mode.\n") -+ printf (f_"Output options that can be used with -o disk: -+ -+ -oo compressed Compress the output file (used only with -of qcow2) -+") - - let parse_options options source = -- if options.output_options <> [] then -- error (f_"no -oo (output options) are allowed here"); -+ let compressed = ref false in -+ List.iter ( -+ function -+ | "compressed", "" -> compressed := true -+ | "compressed", v -> compressed := bool_of_string v -+ | k, _ -> -+ error (f_"-o disk: unknown output option ‘-oo %s’") k -+ ) options.output_options; -+ - if options.output_password <> None then - error_option_cannot_be_used_in_output_mode "local" "-op"; - -@@ -60,11 +70,13 @@ module Disk = struct - - let output_name = Option.default source.s_name options.output_name in - -- options.output_alloc, options.output_format, output_name, output_storage -+ !compressed, options.output_alloc, options.output_format, -+ output_name, output_storage - - let setup dir options source = - let disks = get_disks dir in -- let output_alloc, output_format, output_name, output_storage = options in -+ let compressed, output_alloc, output_format, output_name, output_storage = -+ options in - - List.iter ( - fun (i, size) -> -@@ -73,11 +85,12 @@ module Disk = struct - - (* Create the actual output disk. *) - let outdisk = disk_path output_storage output_name i in -- output_to_local_file output_alloc output_format outdisk size socket -+ output_to_local_file ~compressed output_alloc output_format -+ outdisk size socket - ) disks - - let finalize dir options () source inspect target_meta = -- let output_alloc, output_format, output_name, output_storage = options in -+ let _, output_alloc, output_format, output_name, output_storage = options in - - (* Convert metadata to libvirt XML. *) - (match target_meta.target_firmware with -diff --git a/output/output_libvirt.ml b/output/output_libvirt.ml -index e0d3432d..04b4c5f8 100644 ---- a/output/output_libvirt.ml -+++ b/output/output_libvirt.ml -@@ -32,7 +32,7 @@ open Create_libvirt_xml - open Output - - module Libvirt_ = struct -- type poptions = Libvirt.rw Libvirt.Connect.t Lazy.t * -+ type poptions = Libvirt.rw Libvirt.Connect.t Lazy.t * bool * - Types.output_allocation * string * string * string - - type t = string * string -@@ -44,11 +44,21 @@ module Libvirt_ = struct - | None -> "" - - let query_output_options () = -- printf (f_"No output options can be used in this mode.\n") -+ printf (f_"Output options that can be used with -o libvirt: -+ -+ -oo compressed Compress the output file (used only with -of qcow2) -+") - - let parse_options options source = -- if options.output_options <> [] then -- error (f_"no -oo (output options) are allowed here"); -+ let compressed = ref false in -+ List.iter ( -+ function -+ | "compressed", "" -> compressed := true -+ | "compressed", v -> compressed := bool_of_string v -+ | k, _ -> -+ error (f_"-o disk: unknown output option ‘-oo %s’") k -+ ) options.output_options; -+ - if options.output_password <> None then - error_option_cannot_be_used_in_output_mode "libvirt" "-op"; - -@@ -59,12 +69,13 @@ module Libvirt_ = struct - - let output_name = Option.default source.s_name options.output_name in - -- (conn, options.output_alloc, options.output_format, output_name, -- output_pool) -+ (conn, !compressed, options.output_alloc, options.output_format, -+ output_name, output_pool) - - let setup dir options source = - let disks = get_disks dir in -- let conn, output_alloc, output_format, output_name, output_pool = options in -+ let conn, compressed, output_alloc, output_format, -+ output_name, output_pool = options in - let conn = Lazy.force conn in - - (* Get the capabilities from libvirt. *) -@@ -119,13 +130,15 @@ module Libvirt_ = struct - - (* Create the actual output disk. *) - let outdisk = target_path // output_name ^ "-sd" ^ (drive_name i) in -- output_to_local_file output_alloc output_format outdisk size socket -+ output_to_local_file ~compressed output_alloc output_format -+ outdisk size socket - ) disks; - - (capabilities_xml, pool_name) - - let rec finalize dir options t source inspect target_meta = -- let conn, output_alloc, output_format, output_name, output_pool = options in -+ let conn, _, output_alloc, output_format, output_name, output_pool = -+ options in - let capabilities_xml, pool_name = t in - - (match target_meta.target_firmware with -diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index 527d3c5e..e7efbb73 100644 ---- a/output/output_qemu.ml -+++ b/output/output_qemu.ml -@@ -29,7 +29,8 @@ open Utils - open Output - - module QEMU = struct -- type poptions = bool * Types.output_allocation * string * string * string -+ type poptions = bool * bool * -+ Types.output_allocation * string * string * string - - type t = unit - -@@ -42,6 +43,7 @@ module QEMU = struct - let query_output_options () = - printf (f_"Output options (-oo) which can be used with -o qemu: - -+ -oo compressed Compress the output file (used only with -of qcow2) - -oo qemu-boot Boot the guest in qemu after conversion - ") - -@@ -49,19 +51,19 @@ module QEMU = struct - if options.output_password <> None then - error_option_cannot_be_used_in_output_mode "qemu" "-op"; - -- let qemu_boot = ref false in -+ let compressed = ref false -+ and qemu_boot = ref false in - List.iter ( -- fun (k, v) -> -- match k with -- | "qemu-boot" -> -- if v = "" || v = "true" then qemu_boot := true -- else if v = "false" then qemu_boot := false -- else -- error (f_"-o qemu: use -oo qemu-boot[=true|false]") -- | k -> -- error (f_"-o qemu: unknown output option ‘-oo %s’") k -- ) options.output_options; -- let qemu_boot = !qemu_boot in -+ function -+ | "compressed", "" -> compressed := true -+ | "compressed", v -> compressed := bool_of_string v -+ | "qemu-boot", "" -> qemu_boot := true -+ | "qemu-boot", v -> qemu_boot := bool_of_string v -+ | k, _ -> -+ error (f_"-o qemu: unknown output option ‘-oo %s’") k -+ ) options.output_options; -+ let compressed = !compressed -+ and qemu_boot = !qemu_boot in - - if qemu_boot then - error (f_"-o qemu: the -oo qemu-boot option cannot be used in RHEL"); -@@ -77,12 +79,13 @@ module QEMU = struct - - let output_name = Option.default source.s_name options.output_name in - -- (qemu_boot, options.output_alloc, options.output_format, -+ (compressed, qemu_boot, options.output_alloc, options.output_format, - output_name, output_storage) - - let setup dir options source = - let disks = get_disks dir in -- let _, output_alloc, output_format, output_name, output_storage = options in -+ let compressed, _, output_alloc, output_format, -+ output_name, output_storage = options in - - List.iter ( - fun (i, size) -> -@@ -91,11 +94,12 @@ module QEMU = struct - - (* Create the actual output disk. *) - let outdisk = disk_path output_storage output_name i in -- output_to_local_file output_alloc output_format outdisk size socket -+ output_to_local_file ~compressed output_alloc output_format -+ outdisk size socket - ) disks - - let finalize dir options () source inspect target_meta = -- let qemu_boot, output_alloc, output_format, -+ let _, qemu_boot, output_alloc, output_format, - output_name, output_storage = options in - - let { guestcaps; target_buses; target_firmware } = target_meta in diff --git a/SOURCES/0020-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch b/SOURCES/0020-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch new file mode 100644 index 0000000..d743b52 --- /dev/null +++ b/SOURCES/0020-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch @@ -0,0 +1,121 @@ +From cf636bf489fd5a58f451c9da045cbcb856330bd7 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 30 Sep 2014 10:50:27 +0100 +Subject: [PATCH] RHEL: v2v: Disable the --qemu-boot / -oo qemu-boot option + (RHBZ#1147313). + +This cannot work because there is no Gtk or SDL output mode +in RHEL's qemu-kvm. + +In addition you will have to edit the -display option in the +qemu script. +--- + docs/virt-v2v-output-local.pod | 6 ++---- + docs/virt-v2v.pod | 17 ----------------- + output/output_qemu.ml | 3 +++ + v2v/v2v.ml | 2 -- + 4 files changed, 5 insertions(+), 23 deletions(-) + +diff --git a/docs/virt-v2v-output-local.pod b/docs/virt-v2v-output-local.pod +index d2a1c270..0be37f5e 100644 +--- a/docs/virt-v2v-output-local.pod ++++ b/docs/virt-v2v-output-local.pod +@@ -9,7 +9,7 @@ or libvirt + + virt-v2v [-i* options] -o local -os DIRECTORY + +- virt-v2v [-i* options] -o qemu -os DIRECTORY [--qemu-boot] ++ virt-v2v [-i* options] -o qemu -os DIRECTORY + + virt-v2v [-i* options] -o null + +@@ -47,12 +47,10 @@ where C is the guest name. + + =item B<-o qemu -os> C + +-=item B<-o qemu -os> C B<--qemu-boot> +- + This converts the guest to files in C. Unlike I<-o local> + above, a shell script is created which contains the raw qemu command + you would need to boot the guest. However the shell script is not +-run, I you also add the I<--qemu-boot> option. ++run. + + =item B<-o null> + +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index b458607d..6cfe9e44 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -144,11 +144,6 @@ Since F contains the path(s) to the guest disk + image(s) you do not need to specify the name of the disk image on the + command line. + +-To convert a local disk image and immediately boot it in local +-qemu, do: +- +- virt-v2v -i disk disk.img -o qemu -os /var/tmp -oo qemu-boot +- + =head1 OPTIONS + + =over 4 +@@ -507,9 +502,6 @@ This is similar to I<-o local>, except that a shell script is written + which you can use to boot the guest in qemu. The converted disks and + shell script are written to the directory specified by I<-os>. + +-When using this output mode, you can also specify the I<-oo qemu-boot> +-option which boots the guest under qemu immediately. +- + =item B<-o> B + + This is the same as I<-o rhv>. +@@ -588,11 +580,6 @@ For I<-o openstack> (L) only, set a guest ID + which is saved on each Cinder volume in the C + volume property. + +-=item B<-oo qemu-boot> +- +-When using I<-o qemu> only, this boots the guest immediately after +-virt-v2v finishes. +- + =item B<-oo verify-server-certificate> + + =item B<-oo verify-server-certificate=>C +@@ -763,10 +750,6 @@ Print information about the source guest and stop. This option is + useful when you are setting up network and bridge maps. + See L. + +-=item B<--qemu-boot> +- +-This is the same as I<-oo qemu-boot>. +- + =item B<-q> + + =item B<--quiet> +diff --git a/output/output_qemu.ml b/output/output_qemu.ml +index 3a57a009..4be9b650 100644 +--- a/output/output_qemu.ml ++++ b/output/output_qemu.ml +@@ -65,6 +65,9 @@ module QEMU = struct + let compressed = !compressed + and qemu_boot = !qemu_boot in + ++ if qemu_boot then ++ error (f_"-o qemu: the -oo qemu-boot option cannot be used in RHEL"); ++ + (* -os must be set to a directory. *) + let output_storage = + match options.output_storage with +diff --git a/v2v/v2v.ml b/v2v/v2v.ml +index 7a01eab5..dc747804 100644 +--- a/v2v/v2v.ml ++++ b/v2v/v2v.ml +@@ -272,8 +272,6 @@ let rec main () = + s_"Same as ‘-ip filename’"; + [ L"print-source" ], Getopt.Set print_source, + s_"Print source and stop"; +- [ L"qemu-boot" ], Getopt.Unit (fun () -> set_output_option_compat "qemu-boot" ""), +- s_"Boot in qemu (-o qemu only)"; + [ L"root" ], Getopt.String ("ask|... ", set_root_choice), + s_"How to choose root filesystem"; + [ L"vddk-config" ], Getopt.String ("filename", set_input_option_compat "vddk-config"), diff --git a/SOURCES/0020-tests-Add-a-simple-test-of-o-local-of-qcow2-oo-compr.patch b/SOURCES/0020-tests-Add-a-simple-test-of-o-local-of-qcow2-oo-compr.patch deleted file mode 100644 index 7559e6c..0000000 --- a/SOURCES/0020-tests-Add-a-simple-test-of-o-local-of-qcow2-oo-compr.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 672b9795e85b48f337b3da2d6fa393e7788d79a1 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 1 Jul 2022 11:18:53 +0100 -Subject: [PATCH] tests: Add a simple test of -o local -of qcow2 -oo compressed - -This only tests that it doesn't completely fail, which it did before -we fixed nbdcopy. I checked the file sizes manually and with -compression the resulting file is about half the size. - -This test is a clone of tests/test-v2v-of-option.sh. In order to -compare the sizes across the two tests, and to keep the tests fairly -similar I added an ls -l command to the original test. - -Reviewed-by: Laszlo Ersek -(cherry picked from commit 7505750972b49e1a448c519a27998bd5f20be60a) ---- - tests/Makefile.am | 2 + - tests/test-v2v-o-local-qcow2-compressed.sh | 53 ++++++++++++++++++++++ - tests/test-v2v-of-option.sh | 2 + - 3 files changed, 57 insertions(+) - create mode 100755 tests/test-v2v-o-local-qcow2-compressed.sh - -diff --git a/tests/Makefile.am b/tests/Makefile.am -index e787a86c..a26ecf7a 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -82,6 +82,7 @@ TESTS = \ - test-v2v-networks-and-bridges.sh \ - test-v2v-o-glance.sh \ - test-v2v-o-libvirt.sh \ -+ test-v2v-o-local-qcow2-compressed.sh \ - test-v2v-o-null.sh \ - test-v2v-o-openstack.sh \ - test-v2v-o-qemu.sh \ -@@ -241,6 +242,7 @@ EXTRA_DIST += \ - test-v2v-networks-and-bridges-expected.xml \ - test-v2v-o-glance.sh \ - test-v2v-o-libvirt.sh \ -+ test-v2v-o-local-qcow2-compressed.sh \ - test-v2v-o-null.sh \ - test-v2v-o-openstack.sh \ - test-v2v-o-qemu.sh \ -diff --git a/tests/test-v2v-o-local-qcow2-compressed.sh b/tests/test-v2v-o-local-qcow2-compressed.sh -new file mode 100755 -index 00000000..32c9ebbe ---- /dev/null -+++ b/tests/test-v2v-o-local-qcow2-compressed.sh -@@ -0,0 +1,53 @@ -+#!/bin/bash - -+# libguestfs virt-v2v test script -+# Copyright (C) 2014-2022 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 local -of qcow2 -oo compressed. -+ -+set -e -+ -+source ./functions.sh -+set -e -+set -x -+ -+skip_if_skipped -+requires test -f ../test-data/phony-guests/windows.img -+ -+# This requires fixed nbdcopy >= 1.13.5. -+requires nbdcopy --version -+nbdcopy --version | { -+ IFS=' .' read name major minor release -+ requires test \( "$major" -gt 1 \) -o \ -+ \( "$major" -eq 1 -a "$minor" -gt 13 \) -o \ -+ \( "$major" -eq 1 -a "$minor" -eq 13 -a "$release" -ge 5 \) -+} -+ -+export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" -+ -+d=test-v2v-o-local-qcow2-compressed.d -+rm -rf $d -+cleanup_fn rm -rf $d -+mkdir $d -+ -+$VG virt-v2v --debug-gc \ -+ -i disk ../test-data/phony-guests/windows.img \ -+ -o local -of qcow2 -oo compressed -os $d -+ -+# Test the libvirt XML metadata and a disk was created. -+ls -l $d -+test -f $d/windows.xml -+test -f $d/windows-sda -diff --git a/tests/test-v2v-of-option.sh b/tests/test-v2v-of-option.sh -index bdfd3418..6c5f5938 100755 ---- a/tests/test-v2v-of-option.sh -+++ b/tests/test-v2v-of-option.sh -@@ -42,6 +42,8 @@ $VG virt-v2v --debug-gc \ - -i libvirt -ic "$libvirt_uri" windows \ - -o local -os $d -of qcow2 - -+ls -l $d -+ - # Test the disk is qcow2 format. - if [ "$(guestfish disk-format $d/windows-sda)" != qcow2 ]; then - echo "$0: test failed: output is not qcow2" diff --git a/SOURCES/0021-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch b/SOURCES/0021-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch deleted file mode 100644 index afc8660..0000000 --- a/SOURCES/0021-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch +++ /dev/null @@ -1,47 +0,0 @@ -From b61a03ad272bb08ff5ca757ade6a23bfef34fdc9 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 5 Jul 2022 11:56:54 +0100 -Subject: [PATCH] RHEL 9: -oo compressed: Remove nbdcopy version check and test - -In RHEL 9 nbdcopy 1.12.4-2 will be sufficient (vs nbdcopy 1.13.5 -upstream). We will enforce this through RPM dependencies and test it -separately. Thus remove the version check and test. ---- - output/output.ml | 11 ----------- - tests/Makefile.am | 1 - - 2 files changed, 12 deletions(-) - -diff --git a/output/output.ml b/output/output.ml -index 23c3932d..496c32b6 100644 ---- a/output/output.ml -+++ b/output/output.ml -@@ -83,17 +83,6 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) - if output_format <> "qcow2" then - error (f_"‘-oo compressed’ is only allowed when the output format \ - is a local qcow2-format file, i.e. ‘-of qcow2’"); -- -- (* Check nbdcopy is new enough. This assumes that the version of -- * libnbd is the same as the version of nbdcopy, but parsing this -- * is easier. We can remove this check when we build-depend on -- * libnbd >= 1.14. -- *) -- let version = -- NBD.create () |> NBD.get_version |> -- String.nsplit "." |> List.map int_of_string in -- if version < [1; 13; 5] then -- error (f_"-oo compressed option requires nbdcopy >= 1.13.5") - ); - - let g = open_guestfs () in -diff --git a/tests/Makefile.am b/tests/Makefile.am -index a26ecf7a..47e5f10d 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -82,7 +82,6 @@ TESTS = \ - test-v2v-networks-and-bridges.sh \ - test-v2v-o-glance.sh \ - test-v2v-o-libvirt.sh \ -- test-v2v-o-local-qcow2-compressed.sh \ - test-v2v-o-null.sh \ - test-v2v-o-openstack.sh \ - test-v2v-o-qemu.sh \ diff --git a/SOURCES/0021-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch b/SOURCES/0021-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch new file mode 100644 index 0000000..e0ab162 --- /dev/null +++ b/SOURCES/0021-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch @@ -0,0 +1,31 @@ +From a4ed97d92b38d2359475187c7ea3a42596cc4616 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 24 Apr 2015 09:45:41 -0400 +Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu + (RHBZ#1176493). + +--- + lib/utils.ml | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/lib/utils.ml b/lib/utils.ml +index 281868b5..e63ec7ce 100644 +--- a/lib/utils.ml ++++ b/lib/utils.ml +@@ -60,13 +60,14 @@ let kvm_arch = function + (* Does qemu support the given sound card? *) + let qemu_supports_sound_card = function + | Types.AC97 +- | Types.ES1370 + | Types.ICH6 + | Types.ICH9 + | Types.PCSpeaker ++ -> true ++ | Types.ES1370 + | Types.SB16 + | Types.USBAudio +- -> true ++ -> false + + (* Find the UEFI firmware. *) + let find_uefi_firmware guest_arch = diff --git a/SOURCES/0022-RHEL-9-tests-Remove-btrfs-test.patch b/SOURCES/0022-RHEL-9-tests-Remove-btrfs-test.patch deleted file mode 100644 index cf4fbc8..0000000 --- a/SOURCES/0022-RHEL-9-tests-Remove-btrfs-test.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 8a8ff53b7d438e82085d52199d21c980a54c733d Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 5 Jul 2022 11:58:09 +0100 -Subject: [PATCH] RHEL 9: tests: Remove btrfs test - -RHEL does not have btrfs so this test always fails. ---- - tests/Makefile.am | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/tests/Makefile.am b/tests/Makefile.am -index 47e5f10d..9560cc77 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -96,7 +96,6 @@ TESTS = \ - test-v2v-sound.sh \ - test-v2v-virtio-win-iso.sh \ - test-v2v-fedora-conversion.sh \ -- test-v2v-fedora-btrfs-conversion.sh \ - test-v2v-fedora-luks-on-lvm-conversion.sh \ - test-v2v-fedora-lvm-on-luks-conversion.sh \ - test-v2v-fedora-md-conversion.sh \ diff --git a/SOURCES/0022-RHEL-Fixes-for-libguestfs-winsupport.patch b/SOURCES/0022-RHEL-Fixes-for-libguestfs-winsupport.patch new file mode 100644 index 0000000..3671f6b --- /dev/null +++ b/SOURCES/0022-RHEL-Fixes-for-libguestfs-winsupport.patch @@ -0,0 +1,101 @@ +From ef9a020874b82945e07c61198149e3b566612a85 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Sun, 30 Aug 2015 03:21:57 -0400 +Subject: [PATCH] RHEL: Fixes for libguestfs-winsupport. + +In tests we cannot use guestfish for arbitrary Windows edits. +In virt-v2v helpers we must set the program name to virt-v2v. +--- + convert/convert.ml | 1 + + convert/windows_virtio.ml | 1 + + test-data/phony-guests/make-windows-img.sh | 1 + + tests/test-v2v-virtio-win-iso.sh | 8 +++++++- + tests/test-v2v-windows-conversion.sh | 8 +++++++- + 5 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/convert/convert.ml b/convert/convert.ml +index d0d5b773..c3dd4151 100644 +--- a/convert/convert.ml ++++ b/convert/convert.ml +@@ -51,6 +51,7 @@ let rec convert dir options source = + + message (f_"Opening the source"); + let g = open_guestfs ~identifier:"v2v" () in ++ g#set_program "virt-v2v"; + g#set_memsize (g#get_memsize () * 2); + (* Setting the number of vCPUs allows parallel mkinitrd, but make + * sure this is not too large because each vCPU consumes guest RAM. +diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml +index 6b642d21..2cef4234 100644 +--- a/convert/windows_virtio.ml ++++ b/convert/windows_virtio.ml +@@ -256,6 +256,7 @@ and copy_from_virtio_win g inspect srcdir destdir filter missing = + let g2 = + try + let g2 = open_guestfs ~identifier:"virtio_win" () in ++ g#set_program "virt-v2v"; + g2#add_drive_opts virtio_win ~readonly:true; + g2#launch (); + g2 +diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh +index 30908a91..73cf5144 100755 +--- a/test-data/phony-guests/make-windows-img.sh ++++ b/test-data/phony-guests/make-windows-img.sh +@@ -37,6 +37,7 @@ fi + + # Create a disk image. + guestfish < "$script" + :> "$expected" + ++cat >> "$script" < "$response" ++guestfish --ro -a "$d/windows-sda" < "$script" > "$response" + diff -u "$expected" "$response" +diff --git a/tests/test-v2v-windows-conversion.sh b/tests/test-v2v-windows-conversion.sh +index a4cf191d..1ff41f6a 100755 +--- a/tests/test-v2v-windows-conversion.sh ++++ b/tests/test-v2v-windows-conversion.sh +@@ -76,6 +76,12 @@ mktest () + :> "$script" + :> "$expected" + ++cat >> "$script" < "$response" ++guestfish --ro -a "$d/windows-sda" < "$script" > "$response" + diff -u "$expected" "$response" + + # We also update the Registry several times, for firstboot, and (ONLY diff --git a/SOURCES/0023-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/SOURCES/0023-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch new file mode 100644 index 0000000..bb6c77e --- /dev/null +++ b/SOURCES/0023-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch @@ -0,0 +1,23 @@ +From 5703bf73a706dfc6a65075ff2ed5f544efa2a180 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 2 Mar 2017 14:21:37 +0100 +Subject: [PATCH] RHEL: v2v: -i disk: force VNC as display (RHBZ#1372671) + +The SDL output mode is not supported in RHEL's qemu-kvm. +--- + input/input_disk.ml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/input/input_disk.ml b/input/input_disk.ml +index 279250fe..c6b819c0 100644 +--- a/input/input_disk.ml ++++ b/input/input_disk.ml +@@ -77,7 +77,7 @@ module Disk = struct + s_features = [ "acpi"; "apic"; "pae" ]; + s_firmware = UnknownFirmware; (* causes virt-v2v to autodetect *) + s_display = +- Some { s_display_type = Window; s_keymap = None; s_password = None; ++ Some { s_display_type = VNC; s_keymap = None; s_password = None; + s_listen = LNoListen; s_port = None }; + s_sound = None; + s_disks = s_disks; diff --git a/SOURCES/0023-convert-convert_linux-complete-the-remapping-of-NVMe.patch b/SOURCES/0023-convert-convert_linux-complete-the-remapping-of-NVMe.patch deleted file mode 100644 index 08a653f..0000000 --- a/SOURCES/0023-convert-convert_linux-complete-the-remapping-of-NVMe.patch +++ /dev/null @@ -1,80 +0,0 @@ -From ba2963bc57c8c8a3d6f7cc2fd274c9ebd4ddb7d8 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 6 Jul 2022 12:32:15 +0200 -Subject: [PATCH] convert/convert_linux: complete the remapping of NVMe devices - -In commit 75872bf282d7 ("input: -i vmx: Add support for NVMe devices", -2022-04-08), we missed that pathnames such as - - /dev/nvme0n1[p1] - -would not match our "rex_device_cciss" and "rex_device" regular -expressions. - -As a consequence, we don't remap such pathnames now in the boot config -files with Augeas. - -Add a new regex and associated mapping logic for this kind of pathname. - -Notes: - -(1) "rex_device_cciss" could be extended internally with an alternative -pattern: - - ^/dev/(cciss/c\\d+d\\d+|nvme\\d+n1)(?:p(\\d+))?$ - ^^^^^^^^^^^ - -but Rich suggested we should add a separate, complete regexp for -maintainability. - -(2) Even with a separate regexp, we could reuse the existent CCISS pattern -handler: - - if PCRE.matches rex_device_cciss value || - PCRE.matches rex_device_nvme value then ( - let device = PCRE.sub 1 - and part = try PCRE.sub 2 with Not_found -> "" in - "/dev/" ^ replace device ^ part - ) - -Namely, although "PCRE.matches" creates/updates global state, and -"PCRE.sub" reads that state, the "||" operator in OCaml has short-circuit -behavior, and both regexps have the same structure. - -But, using the same maintainability argument, let's keep the handler logic -for NVMe detached. - -Fixes: 75872bf282d7f2322110caca70963717b43806b1 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2101665 -Signed-off-by: Laszlo Ersek -Message-Id: <20220706103215.5607-1-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit 4368b94ee1724c16aa35c0ee42ce4c51ce037b5a) ---- - convert/convert_linux.ml | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml -index 59d143bd..a66ff1e4 100644 ---- a/convert/convert_linux.ml -+++ b/convert/convert_linux.ml -@@ -1199,6 +1199,7 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - (* Map device names for each entry. *) - let rex_resume = PCRE.compile "^resume=(/dev/[-a-z\\d/_]+)(.*)$" - and rex_device_cciss = PCRE.compile "^/dev/(cciss/c\\d+d\\d+)(?:p(\\d+))?$" -+ and rex_device_nvme = PCRE.compile "^/dev/(nvme\\d+n1)(?:p(\\d+))?$" - and rex_device = PCRE.compile "^/dev/([a-z]+)(\\d*)?$" in - - let rec replace_if_device path value = -@@ -1221,6 +1222,11 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - and part = try PCRE.sub 2 with Not_found -> "" in - "/dev/" ^ replace device ^ part - ) -+ else if PCRE.matches rex_device_nvme value then ( -+ let device = PCRE.sub 1 -+ and part = try PCRE.sub 2 with Not_found -> "" in -+ "/dev/" ^ replace device ^ part -+ ) - else if PCRE.matches rex_device value then ( - let device = PCRE.sub 1 - and part = try PCRE.sub 2 with Not_found -> "" in diff --git a/SOURCES/0024-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch b/SOURCES/0024-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch new file mode 100644 index 0000000..9552dbc --- /dev/null +++ b/SOURCES/0024-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch @@ -0,0 +1,23 @@ +From 4cc16f9bdf58f1036bd6ad67d6af2c0925e32a13 Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Wed, 8 Mar 2017 11:03:40 +0100 +Subject: [PATCH] RHEL: v2v: do not mention SUSE Xen hosts (RHBZ#1430203) + +They are not supported in RHEL. +--- + docs/virt-v2v-input-xen.pod | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod +index 4a0544f8..9c3981e1 100644 +--- a/docs/virt-v2v-input-xen.pod ++++ b/docs/virt-v2v-input-xen.pod +@@ -11,7 +11,7 @@ virt-v2v-input-xen - Using virt-v2v to convert guests from Xen + =head1 DESCRIPTION + + This page documents how to use L to convert guests from +-RHEL 5 Xen, or SLES and OpenSUSE Xen hosts. ++RHEL 5 Xen hosts. + + =head1 INPUT FROM XEN + diff --git a/SOURCES/0024-input-xen-sync-ip-limitations-language-from-input-vm.patch b/SOURCES/0024-input-xen-sync-ip-limitations-language-from-input-vm.patch deleted file mode 100644 index 9637e0b..0000000 --- a/SOURCES/0024-input-xen-sync-ip-limitations-language-from-input-vm.patch +++ /dev/null @@ -1,49 +0,0 @@ -From c34fe9a52abdde05cb31c5bd2c99237652e1b0dc Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 11 Jul 2022 09:01:56 +0200 -Subject: [PATCH] input-xen: sync "-ip" limitations language from input-vmware - manual - -My analysis in -was partially wrong; I had missed that for the xen+ssh transport, the -client-side libvirt library launches a naked "ssh" utility, underneath -"Libvirt.Connect.connect_auth": - - setup [input/input_xen_ssh.ml] - Libvirt.Connect.connect_auth - no effect of "-ip" - Nbdkit_ssh.create_ssh [input/nbdkit_ssh.ml] - starts nbdkit with the ssh - plugin honoring "-ip" - -Which requires a password just the same, and ignores "-ip" just the same. - -Recommend the ssh agent in the docs. - -Fixes: 46298c6514710013c59828b4933f0b3b1a354566 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1854275 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2062360 -Signed-off-by: Laszlo Ersek -Message-Id: <20220711070157.5399-2-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit ae067a9ce0eb5631940a8cc5dcc5ee056903276b) ---- - docs/virt-v2v-input-xen.pod | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod -index ad5772de..80ad94f7 100644 ---- a/docs/virt-v2v-input-xen.pod -+++ b/docs/virt-v2v-input-xen.pod -@@ -32,6 +32,11 @@ server to the Xen host. For example: - $ ssh root@xen.example.com - [ logs straight into the shell, no password is requested ] - -+Note that support for non-interactive authentication via the I<-ip> -+option is incomplete. Some operations remain that still require the -+user to enter the password manually. Therefore ssh-agent is recommended -+over the I<-ip> option. See L. -+ - With some modern ssh implementations, legacy crypto policies required - to interoperate with RHEL 5 sshd are disabled. To enable them you may - need to run this command on the conversion server (ie. ssh client), diff --git a/SOURCES/0025-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch b/SOURCES/0025-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch new file mode 100644 index 0000000..bc5f510 --- /dev/null +++ b/SOURCES/0025-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch @@ -0,0 +1,124 @@ +From f00e06aecd8e2040de6447e05fb721cb1f14720e Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Tue, 26 Mar 2019 09:42:25 +0100 +Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests + +--- + docs/virt-v2v-support.pod | 104 ++------------------------------------ + 1 file changed, 4 insertions(+), 100 deletions(-) + +diff --git a/docs/virt-v2v-support.pod b/docs/virt-v2v-support.pod +index 9815f51f..1ffc0f9d 100644 +--- a/docs/virt-v2v-support.pod ++++ b/docs/virt-v2v-support.pod +@@ -8,106 +8,10 @@ systems and guests in virt-v2v + This page documents which foreign hypervisors, virtualization + management systems and guest types that L can support. + +-Note this page applies to upstream virt-v2v from +-L and in downstream distributions of virt-v2v +-sometimes features are intentionally removed, or are present but not +-supported. +- +-=head2 Hypervisors (Input) +- +-=over 4 +- +-=item VMware ESXi +- +-Must be managed by VMware vCenter E 5.0 unless VDDK is available. +- +-=item OVA exported from VMware +- +-OVAs from other hypervisors will not work. +- +-=item VMX from VMware +- +-VMX files generated by other hypervisors will not work. +- +-=item RHEL 5 Xen +- +-=item SUSE Xen +- +-=item Citrix Xen +- +-Citrix Xen has not been recently tested. +- +-=item Hyper-V +- +-Not recently tested. Requires that you export the disk or use +-L on Hyper-V. +- +-=item Direct from disk images +- +-Only disk images exported from supported hypervisors, and using +-container formats supported by qemu. +- +-=item Physical machines +- +-Using the L tool. +- +-=back +- +-=head2 Hypervisors (Output) +- +-QEMU and KVM only. +- +-=head2 Virtualization management systems (Output) +- +-=over 4 +- +-=item OpenStack +- +-=item Red Hat Virtualization (RHV) 4.1 and up +- +-=item Local libvirt +- +-And hence L, L, and similar tools. +- +-=item Local disk +- +-=back +- +-=head2 Guests +- +-=over 4 +- +-=item Red Hat Enterprise Linux 3, 4, 5, 6, 7 +- +-=item CentOS 3, 4, 5, 6, 7 +- +-=item Scientific Linux 3, 4, 5, 6, 7 +- +-=item Oracle Linux +- +-=item Fedora +- +-=item SLES 10 and up +- +-=item OpenSUSE 10 and up +- +-=item ALT Linux 9 and up +- +-=item Debian 6 and up +- +-=item Ubuntu 10.04, 12.04, 14.04, 16.04, and up +- +-=item Windows XP to Windows 10 / Windows Server 2016 +- +-We use Windows internal version numbers, see +-L +- +-Currently NT 5.2 to NT 6.3 are supported. +- +-See L below for additional notes on converting Windows +-guests. +- +-=back ++For more information on supported hypervisors, and guest types in ++RHEL, please consult the following Knowledgebase article on these ++Red Hat Customer Portal: ++L. + + =head2 Guest firmware + diff --git a/SOURCES/0025-input-xen-replace-enable-LEGACY-crypto-advice-with-t.patch b/SOURCES/0025-input-xen-replace-enable-LEGACY-crypto-advice-with-t.patch deleted file mode 100644 index 351b1f1..0000000 --- a/SOURCES/0025-input-xen-replace-enable-LEGACY-crypto-advice-with-t.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 3f7f730ac9cbf38267839ffcebd6b6fd721123c5 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 11 Jul 2022 09:01:57 +0200 -Subject: [PATCH] input-xen: replace "enable LEGACY crypto" advice with - targeted ssh options - -- "KexAlgorithms": the Fedora 35 ssh binary, using the DEFAULT - crypto-policy, cannot log in to RHEL5 sshd without relaxing - "KexAlgorithms". The server offers three algorithms: - "diffie-hellman-group-exchange-sha1", "diffie-hellman-group14-sha1", - "diffie-hellman-group1-sha1"; and according to RFC 9142, - "diffie-hellman-group14-sha1" is the least deprecated from those. (The - RFC marks it as MAY be implemented, and marks the other two as SHOULD - NOT be implemented.) Recommend "diffie-hellman-group14-sha1". - -- "MACs": the Fedora 35 ssh binary, using the FUTURE crypto-policy, cannot - log in to RHEL5 sshd without relaxing "MACs". The server offers - "hmac-md5", "hmac-sha1", "hmac-ripemd160", "hmac-ripemd160@openssh.com", - "hmac-sha1-96", "hmac-md5-96". After eliminating the MD5-based algos - (MD5 is considered completely broken), and the one based on truncated - SHA1, we're left with "hmac-sha1", "hmac-ripemd160", and - "hmac-ripemd160@openssh.com". RIPEMD-160 is generally trusted, but it is - compiled out of the Fedora 35 "ssh" client binary. Therefore only - "hmac-sha1" remains. - -- "HostKeyAlgorithms", "PubkeyAcceptedAlgorithms": these options control - the usage of public key algorithms, for authenticating the server to the - client, and vice versa, respectively. RHEL5 sshd only supports "ssh-rsa" - and "ssh-dss", and from those, "ssh-rsa" is more commonly used (for - example, "ssh-keygen" defaults to creating "ssh-rsa" keys). Recommend - "ssh-rsa". - -- "PubkeyAcceptedKeyTypes": this is the old ("legacy") name for - "PubkeyAcceptedAlgorithms". As of this writing, the latest upstream - release of libssh (also packaged in Fedora 35 -- libssh-0.9.6-1.fc35) - does not recognize the new "PubkeyAcceptedAlgorithms" option name, only - the original "PubkeyAcceptedKeyTypes". openssh-8.7p1-3.fc35 recognizes - both option variants. Include "PubkeyAcceptedKeyTypes" in the - recommendation along with "PubkeyAcceptedAlgorithms", for backward and - forward compatbility. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2062360 -Signed-off-by: Laszlo Ersek -Message-Id: <20220711070157.5399-3-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit af4a0454cdd21bb5e86f2dbfaa153e83afca3988) ---- - docs/virt-v2v-input-xen.pod | 20 +++++++++++++++----- - 1 file changed, 15 insertions(+), 5 deletions(-) - -diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod -index 80ad94f7..1775fc31 100644 ---- a/docs/virt-v2v-input-xen.pod -+++ b/docs/virt-v2v-input-xen.pod -@@ -37,12 +37,22 @@ option is incomplete. Some operations remain that still require the - user to enter the password manually. Therefore ssh-agent is recommended - over the I<-ip> option. See L. - --With some modern ssh implementations, legacy crypto policies required --to interoperate with RHEL 5 sshd are disabled. To enable them you may --need to run this command on the conversion server (ie. ssh client), --but read L first: -+With some modern ssh implementations, legacy crypto algorithms required -+to interoperate with RHEL 5 sshd are disabled. To enable them, you may -+need to add the following C stanza to your F<~/.ssh/config>: - -- # update-crypto-policies --set LEGACY -+ Host xen.example.com -+ KexAlgorithms +diffie-hellman-group14-sha1 -+ MACs +hmac-sha1 -+ HostKeyAlgorithms +ssh-rsa -+ PubkeyAcceptedKeyTypes +ssh-rsa -+ PubkeyAcceptedAlgorithms +ssh-rsa -+ -+(C and C have -+identical meaning; the former is the old option name, the latter is the -+new one. Virt-v2v uses both C and C when converting a guest -+from Xen, and on some operating systems, C and C may not -+both accept the same option variant.) - - =head2 Test libvirt connection to remote Xen host - diff --git a/SOURCES/0026-RHEL-Disable-o-glance.patch b/SOURCES/0026-RHEL-Disable-o-glance.patch new file mode 100644 index 0000000..67cf1b7 --- /dev/null +++ b/SOURCES/0026-RHEL-Disable-o-glance.patch @@ -0,0 +1,216 @@ +From 5ef909eb4d65adb02f6f9170755813e3bd0ebb34 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 30 Jun 2021 11:15:52 +0100 +Subject: [PATCH] RHEL: Disable -o glance + +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1977539 +--- + docs/virt-v2v-output-openstack.pod | 56 ++---------------------------- + docs/virt-v2v.pod | 20 ----------- + output/output_glance.mli | 2 +- + tests/test-v2v-o-glance.sh | 3 ++ + v2v/v2v.ml | 7 +--- + 5 files changed, 7 insertions(+), 81 deletions(-) + +diff --git a/docs/virt-v2v-output-openstack.pod b/docs/virt-v2v-output-openstack.pod +index f5a3abad..1ab356e8 100644 +--- a/docs/virt-v2v-output-openstack.pod ++++ b/docs/virt-v2v-output-openstack.pod +@@ -10,13 +10,10 @@ virt-v2v-output-openstack - Using virt-v2v to convert guests to OpenStack + [-oo verify-server-certificate=false] + [-oo os-username=admin] [-oo os-*=*] + +- virt-v2v [-i* options] -o glance +- + =head1 DESCRIPTION + + This page documents how to use L to convert guests to run +-on OpenStack. There are two output modes you can select, but only +-I<-o openstack> should be used normally. ++on OpenStack. + + =over 4 + +@@ -27,15 +24,6 @@ Full description: L + This is the modern method for uploading to OpenStack via the REST API. + Guests can be directly converted into Cinder volumes. + +-=item B<-o glance> +- +-Full description: L +- +-This is the old method for uploading to Glance. Unfortunately Glance +-is not well suited to storing converted guests (since virt-v2v deals +-with "pets" not templated "cattle"), so this method is not recommended +-unless you really know what you are doing. +- + =back + + =head1 OUTPUT TO OPENSTACK +@@ -170,50 +158,10 @@ no Cinder volume type is used. + The following options are B supported with OpenStack: I<-oa>, + I<-of>. + +-=head1 OUTPUT TO GLANCE +- +-Note this is a legacy option. In most cases you should use +-L instead. +- +-To output to OpenStack Glance, use the I<-o glance> option. +- +-This runs the L CLI program which must be installed on the +-virt-v2v conversion host. For authentication to work, you will need +-to set C environment variables. +- +-Normally there is a file called C or C +-which you can simply C to set everything up. +- +-Virt-v2v adds metadata for the guest to Glance, describing such things +-as the guest operating system and what drivers it requires. The +-command C will display the metadata as "Property" +-fields such as C and C. +- +-=head2 Glance and sparseness +- +-Glance image upload doesn't appear to correctly handle sparseness. +-For this reason, using qcow2 will be faster and use less space on the +-Glance server. Use the virt-v2v S> option. +- +-=head2 Glance and multiple disks +- +-If the guest has a single disk, then the name of the disk in Glance +-will be the name of the guest. You can control this using the I<-on> +-option. +- +-Glance doesn't have a concept of associating multiple disks with a +-single guest, and Nova doesn't allow you to boot a guest from multiple +-Glance disks either. If the guest has multiple disks, then the first +-(assumed to be the system disk) will have the name of the guest, and +-the second and subsequent data disks will be called +-C-disk2>, C-disk3> etc. It may be best to +-leave the system disk in Glance, and import the data disks to Cinder. +- + =head1 SEE ALSO + + L, +-L, +-L. ++L. + + =head1 AUTHOR + +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index 6cfe9e44..d161b63f 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -421,14 +421,6 @@ See L below. + + This is the same as I<-o local>. + +-=item B<-o> B +- +-This is a legacy option. You should probably use I<-o openstack> +-instead. +- +-Set the output method to OpenStack Glance. In this mode the converted +-guest is uploaded to Glance. See L. +- + =item B<-o> B + + Set the output method to I. B (or F). + +-=item I<-o glance> +- +-This temporarily places a full copy of the output disks in +-C<$VIRT_V2V_TMPDIR> (or F). +- + =item I<-o local> + + =item I<-o qemu> +@@ -1360,13 +1347,6 @@ instance. + Because of how Cinder volumes are presented as F block devices, + using I<-o openstack> normally requires that virt-v2v is run as root. + +-=item Writing to Glance +- +-This does I need root (in fact it probably won’t work), but may +-require either a special user and/or for you to source a script that +-sets authentication environment variables. Consult the Glance +-documentation. +- + =item Writing to block devices + + This normally requires root. See the next section. +diff --git a/output/output_glance.mli b/output/output_glance.mli +index 972320a2..9befc461 100644 +--- a/output/output_glance.mli ++++ b/output/output_glance.mli +@@ -18,4 +18,4 @@ + + (** [-o glance] output mode. *) + +-module Glance : Output.OUTPUT ++(*module Glance : Output.OUTPUT*) +diff --git a/tests/test-v2v-o-glance.sh b/tests/test-v2v-o-glance.sh +index c0db9115..074b5e16 100755 +--- a/tests/test-v2v-o-glance.sh ++++ b/tests/test-v2v-o-glance.sh +@@ -20,6 +20,9 @@ + + set -e + ++# Feature is disabled in RHEL 9. ++exit 77 ++ + source ./functions.sh + set -e + set -x +diff --git a/v2v/v2v.ml b/v2v/v2v.ml +index dc747804..392c3dad 100644 +--- a/v2v/v2v.ml ++++ b/v2v/v2v.ml +@@ -194,7 +194,6 @@ let rec main () = + if !output_mode <> `Not_set then + error (f_"%s option used more than once on the command line") "-o"; + match mode with +- | "glance" -> output_mode := `Glance + | "kubevirt" -> output_mode := `Kubevirt + | "libvirt" -> output_mode := `Libvirt + | "disk" | "local" -> output_mode := `Disk +@@ -252,7 +251,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 ("glance|kubevirt|libvirt|local|null|openstack|qemu|rhv|rhv-upload|vdsm", set_output_mode), ++ [ S 'o' ], Getopt.String ("kubevirt|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"; +@@ -320,8 +319,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp + + virt-v2v -i disk disk.img -o local -os /var/tmp + +-virt-v2v -i disk disk.img -o glance +- + There is a companion front-end called \"virt-p2v\" which comes as an + ISO or CD image that can be booted on physical machines. + +@@ -390,7 +387,6 @@ read the man page virt-v2v(1). + pr "input:libvirtxml\n"; + pr "input:ova\n"; + pr "input:vmx\n"; +- pr "output:glance\n"; + pr "output:kubevirt\n"; + pr "output:libvirt\n"; + pr "output:local\n"; +@@ -487,7 +483,6 @@ read the man page virt-v2v(1). + | `Disk -> (module Output_disk.Disk) + | `Null -> (module Output_null.Null) + | `QEmu -> (module Output_qemu.QEMU) +- | `Glance -> (module Output_glance.Glance) + | `Kubevirt -> (module Output_kubevirt.Kubevirt) + | `Openstack -> (module Output_openstack.Openstack) + | `RHV_Upload -> (module Output_rhv_upload.RHVUpload) diff --git a/SOURCES/0026-common-Adapt-to-renamed-function-On_exit.rmdir-On_ex.patch b/SOURCES/0026-common-Adapt-to-renamed-function-On_exit.rmdir-On_ex.patch deleted file mode 100644 index 806e3da..0000000 --- a/SOURCES/0026-common-Adapt-to-renamed-function-On_exit.rmdir-On_ex.patch +++ /dev/null @@ -1,172 +0,0 @@ -From ea881513e9c15b0a816d3ba4afe471ff2f591a03 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 14 Jul 2022 12:44:27 +0100 -Subject: [PATCH] common: Adapt to renamed function On_exit.rmdir -> - On_exit.rm_rf - -This function was renamed to make it clearer what it does (and that -it's potentially dangerous). The functionality is unchanged. - -Reviewed-by: Laszlo Ersek -(cherry picked from commit 2eb6441264deb0411d36dabaf8fb2da9f07c8439) ---- - common | 2 +- - input/OVA.ml | 2 +- - input/parse_domain_from_vmx.ml | 2 +- - lib/nbdkit.ml | 2 +- - lib/qemuNBD.ml | 2 +- - lib/utils.ml | 2 +- - output/python_script.ml | 2 +- - 7 files changed, 7 insertions(+), 7 deletions(-) - -Submodule common af6cb55b..fd964c1b: -diff --git a/common/mlcustomize/guest_packages.ml b/common/mlcustomize/guest_packages.ml -index 4c3c34ed..7c29a2ab 100644 ---- a/common/mlcustomize/guest_packages.ml -+++ b/common/mlcustomize/guest_packages.ml -@@ -73,9 +73,9 @@ let install_command packages package_management = - | "zypper" -> sprintf "zypper -n in -l %s" quoted_args - - | "unknown" -> -- error_unknown_package_manager (s_"--install") -+ error_unknown_package_manager "--install" - | pm -> -- error_unimplemented_package_manager (s_"--install") pm -+ error_unimplemented_package_manager "--install" pm - - let update_command package_management = - match package_management with -@@ -103,9 +103,9 @@ let update_command package_management = - | "zypper" -> "zypper -n update -l" - - | "unknown" -> -- error_unknown_package_manager (s_"--update") -+ error_unknown_package_manager "--update" - | pm -> -- error_unimplemented_package_manager (s_"--update") pm -+ error_unimplemented_package_manager "--update" pm - - let uninstall_command packages package_management = - let quoted_args = String.concat " " (List.map quote packages) in -@@ -127,6 +127,6 @@ let uninstall_command packages package_management = - | "zypper" -> sprintf "zypper -n rm %s" quoted_args - - | "unknown" -> -- error_unknown_package_manager (s_"--uninstall") -+ error_unknown_package_manager "--uninstall" - | pm -> -- error_unimplemented_package_manager (s_"--uninstall") pm -+ error_unimplemented_package_manager "--uninstall" pm -diff --git a/common/mltools/on_exit.ml b/common/mltools/on_exit.ml -index 53ccb68a..cae12e73 100644 ---- a/common/mltools/on_exit.ml -+++ b/common/mltools/on_exit.ml -@@ -52,7 +52,7 @@ let do_actions () = - List.iter (do_action (fun file -> Unix.unlink file)) !files; - List.iter (do_action ( - fun dir -> -- let cmd = sprintf "rm -rf %s" (Filename.quote dir) in -+ let cmd = sprintf "rm -rf -- %s" (Filename.quote dir) in - ignore (Tools_utils.shell_command cmd) - ) - ) !rmdirs; -@@ -102,7 +102,7 @@ let unlink filename = - register (); - List.push_front filename files - --let rmdir dir = -+let rm_rf dir = - register (); - List.push_front dir rmdirs - -diff --git a/common/mltools/on_exit.mli b/common/mltools/on_exit.mli -index a02e3db3..9bcf104f 100644 ---- a/common/mltools/on_exit.mli -+++ b/common/mltools/on_exit.mli -@@ -47,7 +47,7 @@ val f : (unit -> unit) -> unit - val unlink : string -> unit - (** Unlink a single temporary file on exit. *) - --val rmdir : string -> unit -+val rm_rf : string -> unit - (** Recursively remove a temporary directory on exit (using [rm -rf]). *) - - val kill : ?signal:int -> int -> unit -diff --git a/input/OVA.ml b/input/OVA.ml -index 9e9c3712..09ceee98 100644 ---- a/input/OVA.ml -+++ b/input/OVA.ml -@@ -78,7 +78,7 @@ let rec parse_ova ova = - else ( - let tmpdir = - let t = Mkdtemp.temp_dir ~base_dir:large_tmpdir "ova." in -- On_exit.rmdir t; -+ On_exit.rm_rf t; - t in - - match detect_file_type ova with -diff --git a/input/parse_domain_from_vmx.ml b/input/parse_domain_from_vmx.ml -index 947ca414..7aca2c24 100644 ---- a/input/parse_domain_from_vmx.ml -+++ b/input/parse_domain_from_vmx.ml -@@ -375,7 +375,7 @@ and find_nics vmx = - let parse_domain_from_vmx vmx_source = - let tmpdir = - let t = Mkdtemp.temp_dir "vmx." in -- On_exit.rmdir t; -+ On_exit.rm_rf t; - t in - - (* If the transport is SSH, fetch the file from remote, else -diff --git a/lib/nbdkit.ml b/lib/nbdkit.ml -index 07896684..1137b6bb 100644 ---- a/lib/nbdkit.ml -+++ b/lib/nbdkit.ml -@@ -105,7 +105,7 @@ let add_filter_if_available cmd filter = - let run_unix socket cmd = - (* Create a temporary directory where we place the PID file. *) - let piddir = Mkdtemp.temp_dir "v2vnbdkit." in -- On_exit.rmdir piddir; -+ On_exit.rm_rf piddir; - - let id = unique () in - let pidfile = piddir // sprintf "nbdkit%d.pid" id in -diff --git a/lib/qemuNBD.ml b/lib/qemuNBD.ml -index bbb65f41..c3dd1666 100644 ---- a/lib/qemuNBD.ml -+++ b/lib/qemuNBD.ml -@@ -69,7 +69,7 @@ let run_unix socket { disk; snapshot; format; imgopts } = - - (* Create a temporary directory where we place the PID file. *) - let piddir = Mkdtemp.temp_dir "v2vqemunbd." in -- On_exit.rmdir piddir; -+ On_exit.rm_rf piddir; - - let id = unique () in - let pidfile = piddir // sprintf "qemunbd%d.pid" id in -diff --git a/lib/utils.ml b/lib/utils.ml -index 7116a4f9..84b9a93f 100644 ---- a/lib/utils.ml -+++ b/lib/utils.ml -@@ -204,7 +204,7 @@ let error_if_no_ssh_agent () = - let create_v2v_directory () = - let d = Mkdtemp.temp_dir "v2v." in - chown_for_libvirt_rhbz_1045069 d; -- On_exit.rmdir d; -+ On_exit.rm_rf d; - d - - (* Wait for a file to appear until a timeout. *) -diff --git a/output/python_script.ml b/output/python_script.ml -index 54ccd1b5..ecf46c2d 100644 ---- a/output/python_script.ml -+++ b/output/python_script.ml -@@ -33,7 +33,7 @@ type script = { - - let create ?(name = "script.py") code = - let tmpdir = Mkdtemp.temp_dir "v2v." in -- On_exit.rmdir tmpdir; -+ On_exit.rm_rf tmpdir; - let path = tmpdir // name in - with_open_out path (fun chan -> output_string chan code); - { tmpdir; path } diff --git a/SOURCES/0027-RHEL-Remove-the-in-place-option.patch b/SOURCES/0027-RHEL-Remove-the-in-place-option.patch new file mode 100644 index 0000000..f298cdd --- /dev/null +++ b/SOURCES/0027-RHEL-Remove-the-in-place-option.patch @@ -0,0 +1,84 @@ +From ade0fd71c59b362ae7fd6cc07dd91eda9341eafe Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 2 Dec 2021 11:56:05 +0000 +Subject: [PATCH] RHEL: Remove the --in-place option + +This disables the virt-v2v --in-place option which we do not +wish to support in RHEL. +--- + docs/virt-v2v.pod | 8 -------- + tests/Makefile.am | 1 - + v2v/v2v.ml | 8 -------- + 3 files changed, 17 deletions(-) + +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index d161b63f..0394b421 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -24,9 +24,6 @@ virtualize those machines (physical to virtual, or p2v). + To estimate the disk space needed before conversion, see + L. + +-For in-place conversion, there is a separate tool called +-L. +- + =head2 Input and Output + + You normally run virt-v2v with several I<-i*> options controlling the +@@ -39,10 +36,6 @@ The input and output sides of virt-v2v are separate and unrelated. + Virt-v2v can read from any input and write to any output. Therefore + these sides of virt-v2v are documented separately in this manual. + +-Virt-v2v normally copies from the input to the output, called "copying +-mode". In this case the source guest is always left unchanged. +-In-place conversions may be done using L. +- + =head2 Other virt-v2v topics + + L — Supported hypervisors, virtualization +@@ -1612,7 +1605,6 @@ L, + L, +-L, + L, + L, + L, +diff --git a/tests/Makefile.am b/tests/Makefile.am +index a4c87398..998b871d 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -77,7 +77,6 @@ TESTS = \ + test-v2v-floppy.sh \ + test-v2v-i-disk.sh \ + test-v2v-i-ova.sh \ +- test-v2v-in-place.sh \ + test-v2v-inspector.sh \ + test-v2v-mac.sh \ + test-v2v-machine-readable.sh \ +diff --git a/v2v/v2v.ml b/v2v/v2v.ml +index 392c3dad..18a694ee 100644 +--- a/v2v/v2v.ml ++++ b/v2v/v2v.ml +@@ -216,12 +216,6 @@ let rec main () = + warning (f_"the --vmtype option has been removed and now does nothing") + in + +- (* Options that are errors. *) +- let in_place_error _ = +- error (f_"The --in-place option has been replaced by the \ +- ‘virt-v2v-in-place’ program") +- in +- + let argspec = [ + [ L"bandwidth" ], Getopt.String ("bps", set_string_option_once "--bandwidth" bandwidth), + s_"Set bandwidth to bits per sec"; +@@ -243,8 +237,6 @@ let rec main () = + s_"Use password from file to connect to input hypervisor"; + [ M"it" ], Getopt.String ("transport", set_string_option_once "-it" input_transport), + s_"Input transport"; +- [ L"in-place" ], Getopt.Unit in_place_error, +- s_"Use virt-v2v-in-place instead"; + [ L"mac" ], Getopt.String ("mac:network|bridge|ip:out", add_mac), + s_"Map NIC to network or bridge or assign static IP"; + [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), diff --git a/SOURCES/0027-o-rhv-Unmount-the-temporary-NFS-mountpoint-as-late-a.patch b/SOURCES/0027-o-rhv-Unmount-the-temporary-NFS-mountpoint-as-late-a.patch deleted file mode 100644 index 7fec616..0000000 --- a/SOURCES/0027-o-rhv-Unmount-the-temporary-NFS-mountpoint-as-late-a.patch +++ /dev/null @@ -1,171 +0,0 @@ -From 0d92a42aab3fb0e7569294675666976724156128 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 14 Jul 2022 13:15:49 +0100 -Subject: [PATCH] -o rhv: Unmount the temporary NFS mountpoint as late as - possible - -To partially avoid a potential race against nbdkit or qemu-nbd -releasing files on the mountpoint before they exit, unmount as late as -we can. - -See also https://bugzilla.redhat.com/show_bug.cgi?id=1953286#c26 - -Reviewed-by: Laszlo Ersek -(cherry picked from commit e96357fc3b26aaf96eaa21afa36c894a27af6261) ---- - common | 2 +- - output/output_rhv.ml | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -Submodule common fd964c1b..1000604f: -diff --git a/common/mltools/on_exit.ml b/common/mltools/on_exit.ml -index cae12e73..f8ef74e1 100644 ---- a/common/mltools/on_exit.ml -+++ b/common/mltools/on_exit.ml -@@ -23,39 +23,39 @@ open Common_gettext.Gettext - open Unix - open Printf - --(* List of files to unlink. *) --let files = ref [] -+type action = -+ | Unlink of string (* filename *) -+ | Rm_rf of string (* directory *) -+ | Kill of int * int (* signal, pid *) -+ | Fn of (unit -> unit) (* generic function *) - --(* List of directories to remove. *) --let rmdirs = ref [] -- --(* List of PIDs to kill. *) --let kills = ref [] -- --(* List of functions to call. *) --let fns = ref [] -+(* List of (priority, action). *) -+let actions = ref [] - - (* Perform a single exit action, printing any exception but - * otherwise ignoring failures. - *) --let do_action f arg = -- try f arg with exn -> debug "%s" (Printexc.to_string exn) -+let do_action action = -+ try -+ match action with -+ | Unlink file -> Unix.unlink file -+ | Rm_rf dir -> -+ let cmd = sprintf "rm -rf -- %s" (Filename.quote dir) in -+ ignore (Tools_utils.shell_command cmd) -+ | Kill (signal, pid) -> -+ kill pid signal -+ | Fn f -> f () -+ with exn -> debug "%s" (Printexc.to_string exn) - - (* Make sure the actions are performed only once. *) - let done_actions = ref false - --(* Perform the exit actions. *) -+(* Perform the exit actions in priority order (lowest prio first). *) - let do_actions () = - if not !done_actions then ( -- List.iter (do_action (fun f -> f ())) !fns; -- List.iter (do_action (fun (signal, pid) -> kill pid signal)) !kills; -- List.iter (do_action (fun file -> Unix.unlink file)) !files; -- List.iter (do_action ( -- fun dir -> -- let cmd = sprintf "rm -rf -- %s" (Filename.quote dir) in -- ignore (Tools_utils.shell_command cmd) -- ) -- ) !rmdirs; -+ let actions = List.sort (fun (a, _) (b, _) -> compare a b) !actions in -+ let actions = List.map snd actions in -+ List.iter do_action actions - ); - done_actions := true - -@@ -94,18 +94,18 @@ let register () = - ); - registered := true - --let f fn = -+let f ?(prio = 5000) fn = - register (); -- List.push_front fn fns -+ List.push_front (prio, Fn fn) actions - --let unlink filename = -+let unlink ?(prio = 5000) filename = - register (); -- List.push_front filename files -+ List.push_front (prio, Unlink filename) actions - --let rm_rf dir = -+let rm_rf ?(prio = 5000) dir = - register (); -- List.push_front dir rmdirs -+ List.push_front (prio, Rm_rf dir) actions - --let kill ?(signal = Sys.sigterm) pid = -+let kill ?(prio = 5000) ?(signal = Sys.sigterm) pid = - register (); -- List.push_front (signal, pid) kills -+ List.push_front (prio, Kill (signal, pid)) actions -diff --git a/common/mltools/on_exit.mli b/common/mltools/on_exit.mli -index 9bcf104f..66a85542 100644 ---- a/common/mltools/on_exit.mli -+++ b/common/mltools/on_exit.mli -@@ -28,6 +28,12 @@ - killing another process, so we provide simple - wrappers for those common actions here. - -+ Actions can be ordered by setting the optional [?prio] -+ parameter in the range 0..9999. By default actions -+ have priority 5000. Lower numbered actions run first. -+ Higher numbered actions run last. So to have an action -+ run at the very end before exit you might use [~prio:9999] -+ - Note this module registers signal handlers for - SIGINT, SIGQUIT, SIGTERM and SIGHUP. This means - that any program that links with mltools.cmxa -@@ -39,18 +45,20 @@ - Your cleanup action might no longer run unless the - program calls {!Stdlib.exit}. *) - --val f : (unit -> unit) -> unit -+val f : ?prio:int -> (unit -> unit) -> unit - (** Register a function [f] which runs when the program exits. - Similar to [Stdlib.at_exit] but also runs if the program is -- killed with a signal that we can catch. *) -+ killed with a signal that we can catch. - --val unlink : string -> unit -+ [?prio] is the priority, default 5000. See the description above. *) -+ -+val unlink : ?prio:int -> string -> unit - (** Unlink a single temporary file on exit. *) - --val rm_rf : string -> unit -+val rm_rf : ?prio:int -> string -> unit - (** Recursively remove a temporary directory on exit (using [rm -rf]). *) - --val kill : ?signal:int -> int -> unit -+val kill : ?prio:int -> ?signal:int -> int -> unit - (** Kill [PID] on exit. The signal sent defaults to [Sys.sigterm]. - - Use this with care since you can end up unintentionally killing -diff --git a/output/output_rhv.ml b/output/output_rhv.ml -index 8571e07b..15a2c14a 100644 ---- a/output/output_rhv.ml -+++ b/output/output_rhv.ml -@@ -204,8 +204,8 @@ module RHV = struct - if run_command cmd <> 0 then - error (f_"mount command failed, see earlier errors.\n\nThis probably means you didn't specify the right %s path [-os %s], or else you need to rerun virt-v2v as root.") domain_class os; - -- (* Make sure it is unmounted at exit. *) -- On_exit.f ( -+ (* Make sure it is unmounted at exit, as late as possible (prio=9999) *) -+ On_exit.f ~prio:9999 ( - fun () -> - let cmd = [ "umount"; mp ] in - ignore (run_command cmd); diff --git a/SOURCES/0028-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch b/SOURCES/0028-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch new file mode 100644 index 0000000..57666f8 --- /dev/null +++ b/SOURCES/0028-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch @@ -0,0 +1,47 @@ +From d6fc11c3f99f2f25b06d36d582d63702be802132 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 5 Jul 2022 11:56:54 +0100 +Subject: [PATCH] RHEL 9: -oo compressed: Remove nbdcopy version check and test + +In RHEL 9 nbdcopy 1.12.4-2 will be sufficient (vs nbdcopy 1.13.5 +upstream). We will enforce this through RPM dependencies and test it +separately. Thus remove the version check and test. +--- + output/output.ml | 11 ----------- + tests/Makefile.am | 1 - + 2 files changed, 12 deletions(-) + +diff --git a/output/output.ml b/output/output.ml +index e419c13d..c8f743c2 100644 +--- a/output/output.ml ++++ b/output/output.ml +@@ -87,17 +87,6 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) + if output_format <> "qcow2" then + error (f_"‘-oo compressed’ is only allowed when the output format \ + is a local qcow2-format file, i.e. ‘-of qcow2’"); +- +- (* Check nbdcopy is new enough. This assumes that the version of +- * libnbd is the same as the version of nbdcopy, but parsing this +- * is easier. We can remove this check when we build-depend on +- * libnbd >= 1.14. +- *) +- let version = +- NBD.create () |> NBD.get_version |> +- String.nsplit "." |> List.map int_of_string in +- if version < [1; 13; 5] then +- error (f_"-oo compressed option requires nbdcopy >= 1.13.5") + ); + + let g = open_guestfs () in +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 998b871d..8cf17f94 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -83,7 +83,6 @@ TESTS = \ + test-v2v-networks-and-bridges.sh \ + test-v2v-o-glance.sh \ + test-v2v-o-libvirt.sh \ +- test-v2v-o-local-qcow2-compressed.sh \ + test-v2v-o-null.sh \ + test-v2v-o-openstack.sh \ + test-v2v-o-qemu.sh \ diff --git a/SOURCES/0028-output-Permit-output-modes-to-wait-on-the-local-NBD-.patch b/SOURCES/0028-output-Permit-output-modes-to-wait-on-the-local-NBD-.patch deleted file mode 100644 index 4a02e5e..0000000 --- a/SOURCES/0028-output-Permit-output-modes-to-wait-on-the-local-NBD-.patch +++ /dev/null @@ -1,179 +0,0 @@ -From 96efdcf54c887ae88d54332df12a5f5dd962fd0a Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 15 Jul 2022 11:25:45 +0100 -Subject: [PATCH] output: Permit output modes to wait on the local NBD server - -Output.output_to_local_file is used by several output modes that write -to local files or devices. It launches an instance of qemu-nbd or -nbdkit connected to the local file. - -Previously we unconditionally added an On_exit handler to kill the NBD -server. This is usually safe because nbdcopy --flush has guaranteed -that the data was written through to permanent storage, and so killing -the NBD server is just there to prevent orphaned processes. - -However for output to RHV (-o rhv) we actually need the NBD server to -be cleaned up before we exit. See the analysis here: - -https://bugzilla.redhat.com/show_bug.cgi?id=1953286#c26 - -Allow an alternate strategy of waiting for the NBD server to exit -during virt-v2v shutdown. - -We only need this in virt-v2v so implement it here instead of pushing -it all the way into the On_exit module. - -Reviewed-by: Laszlo Ersek -(cherry picked from commit e2a1a7b4dfb6a9e44260da10a7e7029c09753b5c) ---- - output/output.ml | 91 ++++++++++++++++++++++++++++------------------- - output/output.mli | 17 +++++++-- - 2 files changed, 69 insertions(+), 39 deletions(-) - -diff --git a/output/output.ml b/output/output.ml -index 496c32b6..8f83a324 100644 ---- a/output/output.ml -+++ b/output/output.ml -@@ -69,7 +69,10 @@ let error_if_disk_count_gt dir n = - if Sys.file_exists socket then - error (f_"this output module doesn't support copying more than %d disks") n - -+type on_exit_kill = Kill | KillAndWait -+ - let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) -+ ?(on_exit_kill = Kill) - output_alloc output_format filename size socket = - (* Check nbdkit is installed and has the required plugin. *) - if not (Nbdkit.is_installed ()) then -@@ -94,46 +97,60 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) - fun () -> g#disk_create ?preallocation filename output_format size - ); - -- match output_format with -- | "raw" -> -- let cmd = Nbdkit.create "file" in -- Nbdkit.add_arg cmd "file" filename; -- if Nbdkit.version nbdkit_config >= (1, 22, 0) then ( -- let cmd = Nbdkit.add_arg cmd "cache" "none" in -- cmd -- ); -- let _, pid = Nbdkit.run_unix socket cmd in -+ let pid = -+ match output_format with -+ | "raw" -> -+ let cmd = Nbdkit.create "file" in -+ Nbdkit.add_arg cmd "file" filename; -+ if Nbdkit.version nbdkit_config >= (1, 22, 0) then ( -+ let cmd = Nbdkit.add_arg cmd "cache" "none" in -+ cmd -+ ); -+ let _, pid = Nbdkit.run_unix socket cmd in -+ pid - -- (* --exit-with-parent should ensure nbdkit is cleaned -- * up when we exit, but it's not supported everywhere. -- *) -- On_exit.kill pid -+ | "qcow2" -> -+ let cmd = -+ if compressed then ( -+ let qemu_quote str = String.replace str "," ",," in -+ let image_opts = [ "driver=compress"; -+ "file.driver=qcow2"; -+ "file.file.driver=file"; -+ "file.file.filename=" ^ qemu_quote filename ] in -+ let image_opts = String.concat "," image_opts in -+ let cmd = QemuNBD.create image_opts in -+ QemuNBD.set_image_opts cmd true; -+ cmd -+ ) -+ else (* not compressed *) ( -+ let cmd = QemuNBD.create filename in -+ QemuNBD.set_format cmd (Some "qcow2"); -+ cmd -+ ) in -+ QemuNBD.set_snapshot cmd false; -+ let _, pid = QemuNBD.run_unix socket cmd in -+ pid - -- | "qcow2" -> -- let cmd = -- if compressed then ( -- let qemu_quote str = String.replace str "," ",," in -- let image_opts = [ "driver=compress"; -- "file.driver=qcow2"; -- "file.file.driver=file"; -- "file.file.filename=" ^ qemu_quote filename ] in -- let image_opts = String.concat "," image_opts in -- let cmd = QemuNBD.create image_opts in -- QemuNBD.set_image_opts cmd true; -- cmd -- ) -- else (* not compressed *) ( -- let cmd = QemuNBD.create filename in -- QemuNBD.set_format cmd (Some "qcow2"); -- cmd -- ) in -- QemuNBD.set_snapshot cmd false; -- let _, pid = QemuNBD.run_unix socket cmd in -- On_exit.kill pid -+ | _ -> -+ error (f_"output mode only supports raw or qcow2 format (format: %s)") -+ output_format in -+ -+ match on_exit_kill with -+ | Kill -> -+ (* Kill the NBD server on exit. (For nbdkit we use --exit-with-parent -+ * but it's not supported everywhere). -+ *) -+ On_exit.kill pid - -- | _ -> -- error (f_"output mode only supports raw or qcow2 format (format: %s)") -- output_format -+ | KillAndWait -> -+ On_exit.f ( -+ fun () -> -+ kill pid Sys.sigterm; -+ (* Errors from the NBD server don't matter. On successful -+ * completion we've already committed the data to disk. -+ *) -+ ignore (waitpid [] pid) -+ ) - - let disk_path os name i = - let outdisk = sprintf "%s/%s-sd%s" os name (drive_name i) in -diff --git a/output/output.mli b/output/output.mli -index c1f0f53d..c4486311 100644 ---- a/output/output.mli -+++ b/output/output.mli -@@ -83,14 +83,27 @@ val error_if_disk_count_gt : string -> int -> unit - "in[n]" in the v2v directory [dir]. If the socket exists, [error] is - called. *) - -+type on_exit_kill = Kill | KillAndWait -+ - val output_to_local_file : ?changeuid:((unit -> unit) -> unit) -> -- ?compressed:bool -> -+ ?compressed:bool -> ?on_exit_kill:on_exit_kill -> - Types.output_allocation -> - string -> string -> int64 -> string -> - unit - (** When an output mode wants to create a local file with a - particular format (only "raw" or "qcow2" allowed) then -- this common function can be used. *) -+ this common function can be used. -+ -+ Optional parameter [?on_exit_kill] controls how the NBD server -+ is cleaned up. The default is {!Kill} which registers an -+ {!On_exit.kill} handler that kills (but does not wait for) -+ the server when virt-v2v exits. Most callers should use this. -+ -+ Setting [~on_exit_kill:KillAndWait] should be used if the NBD -+ server must fully exit before we continue with the rest of -+ virt-v2v shut down. This is only necessary if some other action -+ (such as unmounting a host filesystem or removing a host device) -+ depends on the NBD server releasing resources. *) - - val disk_path : string -> string -> int -> string - (** For [-o disk|qemu], return the output disk name of the i'th disk, diff --git a/SOURCES/0029-RHEL-9-tests-Remove-btrfs-test.patch b/SOURCES/0029-RHEL-9-tests-Remove-btrfs-test.patch new file mode 100644 index 0000000..a8aea52 --- /dev/null +++ b/SOURCES/0029-RHEL-9-tests-Remove-btrfs-test.patch @@ -0,0 +1,22 @@ +From 86517b17be985cb234846c75680c144bf9ea2dd8 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 5 Jul 2022 11:58:09 +0100 +Subject: [PATCH] RHEL 9: tests: Remove btrfs test + +RHEL does not have btrfs so this test always fails. +--- + tests/Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 8cf17f94..8b2a8685 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -97,7 +97,6 @@ TESTS = \ + test-v2v-sound.sh \ + test-v2v-virtio-win-iso.sh \ + test-v2v-fedora-conversion.sh \ +- test-v2v-fedora-btrfs-conversion.sh \ + test-v2v-fedora-luks-on-lvm-conversion.sh \ + test-v2v-fedora-lvm-on-luks-conversion.sh \ + test-v2v-fedora-md-conversion.sh \ diff --git a/SOURCES/0029-o-rhv-Wait-for-the-NBD-server-to-exit-to-avoid-a-rac.patch b/SOURCES/0029-o-rhv-Wait-for-the-NBD-server-to-exit-to-avoid-a-rac.patch deleted file mode 100644 index 9799170..0000000 --- a/SOURCES/0029-o-rhv-Wait-for-the-NBD-server-to-exit-to-avoid-a-rac.patch +++ /dev/null @@ -1,33 +0,0 @@ -From f820585c37beb648ab856818179091349a604523 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 15 Jul 2022 11:37:46 +0100 -Subject: [PATCH] -o rhv: Wait for the NBD server to exit to avoid a race with - unmounting - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1953286#c26 -Reviewed-by: Laszlo Ersek -(cherry picked from commit 2fbd578b4e6884a23063ad67ee36f02c4eb6c668) ---- - output/output_rhv.ml | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/output/output_rhv.ml b/output/output_rhv.ml -index 15a2c14a..45f831e3 100644 ---- a/output/output_rhv.ml -+++ b/output/output_rhv.ml -@@ -175,7 +175,14 @@ module RHV = struct - chmod filename 0o666 - ) - in -- output_to_local_file ~changeuid -+ -+ (* We have to wait for the NBD server to exit rather than just -+ * killing it, otherwise it races with unmounting. See: -+ * https://bugzilla.redhat.com/show_bug.cgi?id=1953286#c26 -+ *) -+ let on_exit_kill = Output.KillAndWait in -+ -+ output_to_local_file ~changeuid ~on_exit_kill - output_alloc output_format filename size socket - ) (List.combine disks filenames); - diff --git a/SOURCES/0030-output-create_libvirt_xml-relax-VCPU-feature-checkin.patch b/SOURCES/0030-output-create_libvirt_xml-relax-VCPU-feature-checkin.patch deleted file mode 100644 index 8d856c9..0000000 --- a/SOURCES/0030-output-create_libvirt_xml-relax-VCPU-feature-checkin.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 29c6ee9322da082e3be9faa94cf4a6840b49cd97 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 22 Jul 2022 09:36:27 +0200 -Subject: [PATCH] output/create_libvirt_xml: relax VCPU feature checking for - "qemu64" - -When the source domain doesn't specify a VCPU model ("s_cpu_model" is -None), and the guest OS is assumed to work with the default VCPU model -("gcaps_default_cpu" is true), we don't output any element. In that -case, libvirtd augments the domain config with: - - [1] - qemu64 - - -where the @check='none' attribute ensures that the converted domain will -be launched, for example, on an Intel host, despite the "qemu64" VCPU -model containing AMD-only feature flags such as "svm". - -However, if the source domain explicitly specifies the "qemu64" model -(mostly seen with "-i libvirt -ic qemu://..."), we presently output - - [2] - qemu64 - - -which libvirtd completes as - - [3] - qemu64 - - -In [3], cpu/@match='minimum' and cpu/model/@fallback='allow' are both -laxer than @match='exact' and @fallback='forbid', respectively, in [1]. - -However, cpu/@check='partial' in [3] is stricter than @check='none' in -[1]; it causes libvirtd to catch the "svm" feature flag on an Intel host, -and prevents the converted domain from starting. - -The "qemu64" VCPU model is supposed to run on every possible host -, -therefore make an exception for the explicitly specified "qemu64" VCPU -model, and generate the @check='none' attribute. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2107503 -Signed-off-by: Laszlo Ersek -Message-Id: <20220722073627.6511-1-lersek@redhat.com> -Acked-by: Richard W.M. Jones -(cherry picked from commit e5297c3180fd3ebea41a40f4c5a66969a24b9ff3) ---- - output/create_libvirt_xml.ml | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml -index 531a4f75..bd01304d 100644 ---- a/output/create_libvirt_xml.ml -+++ b/output/create_libvirt_xml.ml -@@ -192,6 +192,8 @@ let create_libvirt_xml ?pool source inspect - List.push_back cpu_attrs ("mode", "host-passthrough"); - | Some model -> - List.push_back cpu_attrs ("match", "minimum"); -+ if model = "qemu64" then -+ List.push_back cpu_attrs ("check", "none"); - (match source.s_cpu_vendor with - | None -> () - | Some vendor -> diff --git a/SOURCES/0031-input-xen-cover-RHEL9-OpenSSL-crypto-settings.patch b/SOURCES/0031-input-xen-cover-RHEL9-OpenSSL-crypto-settings.patch deleted file mode 100644 index ae3fa10..0000000 --- a/SOURCES/0031-input-xen-cover-RHEL9-OpenSSL-crypto-settings.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 9e1c78a4dda8e8f504fd8f01d7ff5a02e6d3b8ff Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 29 Jul 2022 12:57:03 +0200 -Subject: [PATCH] input-xen: cover RHEL9 OpenSSL crypto settings - -In [master] commit af4a0454cdd2 ("input-xen: replace "enable LEGACY -crypto" advice with targeted ssh options", 2022-07-11), we documented how -the libssh / openssh crypto settings needed to be relaxed, for connecting -to RHEL5 sshd. [rhel-9.1 commit: 3f7f730ac9cb.] - -It turns out that in RHEL9, the non-LEGACY crypto policies disable SHA1 in -signature algorithms even at the OpenSSL level. Explain how the user can -re-enable that separately, for individual virt-v2v invocations. - -The method depends on Rich's libvirt commit 45912ac399ab ("rpc: Pass -OPENSSL_CONF through to ssh invocations", 2022-07-25), which is is going -to be released in upstream libvirt v8.6.0. - -Thanks: Dmitry Belyavskiy & Rich Jones -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2062360 -Signed-off-by: Laszlo Ersek -Message-Id: <20220729105703.10150-1-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit ddab06d5eb99696f5fd1073b8ec91efbc8c3e4ab) ---- - docs/virt-v2v-input-xen.pod | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod -index 1775fc31..9c3981e1 100644 ---- a/docs/virt-v2v-input-xen.pod -+++ b/docs/virt-v2v-input-xen.pod -@@ -54,6 +54,26 @@ new one. Virt-v2v uses both C and C when converting a guest - from Xen, and on some operating systems, C and C may not - both accept the same option variant.) - -+When connecting to RHEL 5 sshd from RHEL 9, the SHA1 algorithm's use in -+signatures has to be re-enabled at the OpenSSL level, in addition to the -+above SSH configuration. Create a file called F<$HOME/openssl-sha1.cnf> -+with the following contents: -+ -+ .include /etc/ssl/openssl.cnf -+ [openssl_init] -+ alg_section = evp_properties -+ [evp_properties] -+ rh-allow-sha1-signatures = yes -+ -+and export the following variable into the environment of the -+C process: -+ -+ OPENSSL_CONF=$HOME/openssl-sha1.cnf -+ -+Note that the C environment variable will only take effect -+if the libvirt client library used by virt-v2v is at least version -+8.6.0. -+ - =head2 Test libvirt connection to remote Xen host - - Use the L command to list the guests on the remote Xen host: diff --git a/SOURCES/0032-convert_linux-remove-LVM2-devices-file.patch b/SOURCES/0032-convert_linux-remove-LVM2-devices-file.patch deleted file mode 100644 index 9f35ee7..0000000 --- a/SOURCES/0032-convert_linux-remove-LVM2-devices-file.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 83fc438139c49ffae330d5caeece1e52bcb1d18e Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 5 Aug 2022 10:44:26 +0200 -Subject: [PATCH] convert_linux: remove LVM2 "devices file" - -A recent feature of LVM2 is the "devices file" -. It speeds up -LVM2 PV discovery on a normal system, but an old devices file in a -converted domain (with different hardware) can prevent the assembly of -volume groups. - -In particular, when converting a physical system to a guest with virt-p2v, -the original system will have used "sys_wwid"-type identifiers in the LVM2 -devices file, and those are guaranteed not to match any virtio-blk disks -in the output domain. - -We've seen a similar issue in the past under RHBZ#1164853, so just extend -the same scrubbing with the new pathname. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2112801 -Signed-off-by: Laszlo Ersek -Message-Id: <20220805084426.9200-1-lersek@redhat.com> -Acked-by: Richard W.M. Jones -(cherry picked from commit 8e4b732e8b4343c169c658338da53fb0ede7e512) ---- - convert/convert_linux.ml | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml -index a66ff1e4..2aaa438e 100644 ---- a/convert/convert_linux.ml -+++ b/convert/convert_linux.ml -@@ -1402,11 +1402,11 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - * device names. blkid will rebuild these on demand. - * - * Delete the LVM cache since it will contain references to the -- * old devices (RHBZ#1164853). -+ * old devices (RHBZ#1164853, RHBZ#2112801). - *) - List.iter g#rm_f [ - "/etc/blkid/blkid.tab"; "/etc/blkid.tab"; -- "/etc/lvm/cache/.cache" -+ "/etc/lvm/cache/.cache"; "/etc/lvm/devices/system.devices" - ]; - in - diff --git a/SOURCES/0033-convert-linux-Add-support-for-Zstandard-compressed-k.patch b/SOURCES/0033-convert-linux-Add-support-for-Zstandard-compressed-k.patch deleted file mode 100644 index 2f1bcd4..0000000 --- a/SOURCES/0033-convert-linux-Add-support-for-Zstandard-compressed-k.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 380fa6663e9b373d87e446fc03601e9e44f985f6 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 9 Aug 2022 19:09:08 +0100 -Subject: [PATCH] convert: linux: Add support for Zstandard compressed kernel - modules - -OpenSUSE uses *.ko.zst for kernel modules. This commit adds support -in the same way as the existing support for *.ko.xz. Note this -requires a corresponding change to libguestfs to support Zstandard -compression in the guestfs_file_architecture API: - -https://github.com/libguestfs/libguestfs/commit/0e784824e82a88e522873fec5db1a11943d637ed - -Reported-by: Xiaodai Wang -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2116811 -(cherry picked from commit 315c016dbea899587649a4bbf1865390cb4e1d3c) ---- - convert/linux_kernels.ml | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - -diff --git a/convert/linux_kernels.ml b/convert/linux_kernels.ml -index 307de572..6e9d2bdd 100644 ---- a/convert/linux_kernels.ml -+++ b/convert/linux_kernels.ml -@@ -65,8 +65,8 @@ let print_kernel_info chan prefix ki = - ki.ki_supports_isa_pvpanic ki.ki_supports_virtio_socket - ki.ki_is_xen_pv_only_kernel ki.ki_is_debug - --let rex_ko = PCRE.compile "\\.k?o(?:\\.xz)?$" --let rex_ko_extract = PCRE.compile "/([^/]+)\\.k?o(?:\\.xz)?$" -+let rex_ko = PCRE.compile "\\.k?o(?:\\.(?:xz|zst))?$" -+let rex_ko_extract = PCRE.compile "/([^/]+)\\.k?o(?:\\.(?:xz|zst))?$" - - let detect_kernels (g : G.guestfs) inspect family bootloader = - (* What kernel/kernel-like packages are installed on the current guest? *) -@@ -203,7 +203,11 @@ let detect_kernels (g : G.guestfs) inspect family bootloader = - let all_candidates = List.flatten ( - List.map ( - fun f -> -- [ "/" ^ f ^ ".o"; "/" ^ f ^ ".ko"; "/" ^ f ^ ".ko.xz" ] -+ [ "/" ^ f ^ ".o"; -+ "/" ^ f ^ ".ko"; -+ "/" ^ f ^ ".ko.xz"; -+ "/" ^ f ^ ".ko.zst"; -+ ] - ) candidates - ) in - let candidate = diff --git a/SOURCES/0034-convert_linux-start-the-QEMU-guest-agent-in-a-distro.patch b/SOURCES/0034-convert_linux-start-the-QEMU-guest-agent-in-a-distro.patch deleted file mode 100644 index eb69a96..0000000 --- a/SOURCES/0034-convert_linux-start-the-QEMU-guest-agent-in-a-distro.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 7dd396af54df3f7563aa3a42b3c17547710aec67 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 17 Aug 2022 16:47:36 +0200 -Subject: [PATCH] convert_linux: start the QEMU guest agent in a - distro-specific way - -The current command "service start" does not apply to -RHEL-6; the service name ("qemu-ga") differs from the package name -("qemu-guest-agent") there. - -Overhaul the logic -- detach the command from the package name; cover the -RHEL, ALT, SUSE and Debian families separately. Remove the "chkconfig" -command, as in all tested / investigated cases, it is unnecessary. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2028764 -Signed-off-by: Laszlo Ersek -Message-Id: <20220817144736.18850-1-lersek@redhat.com> -Acked-by: Richard W.M. Jones -(cherry picked from commit ad2b4f2e50950a5798a75359badb526290aa92e7) ---- - convert/convert_linux.ml | 56 ++++++++++++++++++++++++++++------------ - 1 file changed, 40 insertions(+), 16 deletions(-) - -diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml -index 2aaa438e..b8e9ad15 100644 ---- a/convert/convert_linux.ml -+++ b/convert/convert_linux.ml -@@ -66,6 +66,34 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - | _ -> None - in - -+ let qga_svc_start_cmd family distro major = -+ match family, distro, major with -+ | `RHEL_family, ( "rhel" | "centos" | "scientificlinux" | "redhat-based" | -+ "oraclelinux" ), 6 -> -+ (* https://bugzilla.redhat.com/show_bug.cgi?id=2028764#c52 *) -+ Some "service qemu-ga start" -+ -+ | `RHEL_family, _, _ -> -+ (* https://bugzilla.redhat.com/show_bug.cgi?id=2028764#c52 *) -+ Some "systemctl start qemu-guest-agent" -+ -+ | `ALT_family, _, _ -> -+ (* https://bugzilla.redhat.com/show_bug.cgi?id=2028764#c45 *) -+ Some "systemctl start qemu-guest-agent" -+ -+ | `SUSE_family, _, _ -> -+ (* https://bugzilla.redhat.com/show_bug.cgi?id=2028764#c51 *) -+ None -+ -+ | `Debian_family, _, _ -> -+ (* https://bugzilla.redhat.com/show_bug.cgi?id=2028764#c42 *) -+ Some "service qemu-guest-agent start" -+ -+ | _ -> -+ (* should never be called when "qga_pkg_of_family" returns None *) -+ assert false -+ in -+ - assert (inspect.i_package_format = "rpm" || inspect.i_package_format = "deb"); - - (* Fail early if i_apps is empty. Certain steps such as kernel -@@ -615,23 +643,19 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - \ \ rm -f %s\n\ - fi\n" selinux_enforcing selinux_enforcing); - -- (* Start the agent now and at subsequent boots. The following -- * commands should work on both sysvinit distros / distro versions -- * (regardless of "/etc/rc.d/" vs. "/etc/init.d/" being the scheme -- * in use) and systemd distros (via redirection to systemctl). -- * -- * On distros where the chkconfig command is redirected to -- * systemctl, the chkconfig command is likely superfluous. That's -- * because on systemd distros, the QGA package comes with such -- * runtime dependencies / triggers that the presence of the -- * virtio-serial port named "org.qemu.guest_agent.0" automatically -- * starts the agent during (second and later) boots. However, even -- * on such distros, the chkconfig command should do no harm. -+ (* On all the distro families covered by "qga_pkg_of_family" and -+ * "qga_svc_start_cmd", the QEMU guest agent service is always -+ * enabled by package installation for *subsequent* boots. Package -+ * installation may or may not enable the service for the current -+ * (i.e., first) boot, however, so try that here manually. - *) -- fbs "start qga" -- (sprintf "#!/bin/sh\n\ -- service %s start\n\ -- chkconfig %s on\n" qga_pkg qga_pkg) -+ match qga_svc_start_cmd family inspect.i_distro inspect.i_major_version -+ with -+ | None -> () -+ | Some start_cmd -> -+ fbs "start qga" -+ (sprintf "#!/bin/sh\n\ -+ %s\n" start_cmd) - with - | Guest_packages.Unknown_package_manager msg - | Guest_packages.Unimplemented_package_manager msg -> diff --git a/SOURCES/copy-patches.sh b/SOURCES/copy-patches.sh index 6a3c4f6..f7dd9d9 100755 --- a/SOURCES/copy-patches.sh +++ b/SOURCES/copy-patches.sh @@ -7,7 +7,7 @@ set -e # ./copy-patches.sh project=virt-v2v -rhel_version=9.1 +rhel_version=9.2 # Check we're in the right directory. if [ ! -f $project.spec ]; then diff --git a/SOURCES/virt-v2v-2.0.7.tar.gz.sig b/SOURCES/virt-v2v-2.0.7.tar.gz.sig deleted file mode 100644 index a1a6ee1..0000000 --- a/SOURCES/virt-v2v-2.0.7.tar.gz.sig +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmLFq4sRHHJpY2hAYW5u -ZXhpYS5vcmcACgkQkXOPc+G3aKCdDg/+LQr8ro5P9iKSDRNwLJ4jHmoXOqZVkSqO -KHk+kHuqFwSruEHxVGZwf9jYBNOuGD9K1d6AFWfYbRS2jEZpiA22ZX1Ym67PF5Fp -dw72BmWHBOzJ8YO6vauvpaRNLPypSgr3RwJUPlRYw847MFDrn71EVOBv7dqwVp0q -LqBk1wj/M3wKVV2DL8u0JE+CArSmqYSCCnyl2oq0VfIlhYbPQ4iprqTr5HWdd2fs -Mc0JkQiuYLoV3V7MP8U0qncktABZ/6gNuTSiUAsWLGSLaH67MNEfqjF4OyEU95cA -qivB53LEIebIAO07E9bLeFeXx7WLZsPI3Ms5m+aFWqjCLHl7h0qarHsrMMe+SBI6 -aSK+BzPzVHfzrqGRnL+95EQI0Vw9g5yLkxkm69KYGbukMulFdGgI24cGqHKEFadu -NbrSE/6ydkdKS8NGKeyM+Y5RMoWh379nQcksj8dB6Vv2NV31KQvde9mFxnV92FOn -1gYbIRwKPM1cc3VF6E3qlmIuBq59vagsJ/rcKg8fe8LNpNiOfi+Cmk8gYs9WuDFH -/RWCYd3XMWxYQ5ZGi3rCVw4ijZbdHGwc1+sH9/ExLGDVuUJQfJ0fpdjR4mYnghav -tFKc6EjxJknCR7D4HahVdzFbT/XrD0KpQ5JxToLDA3o7ecPJ42ExfKL53OwYjM/t -LUUDntYK6sk= -=Grra ------END PGP SIGNATURE----- diff --git a/SOURCES/virt-v2v-2.2.0.tar.gz.sig b/SOURCES/virt-v2v-2.2.0.tar.gz.sig new file mode 100644 index 0000000..05c5c29 --- /dev/null +++ b/SOURCES/virt-v2v-2.2.0.tar.gz.sig @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- + +iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmO9fDsRHHJpY2hAYW5u +ZXhpYS5vcmcACgkQkXOPc+G3aKAa2g//RQunlKur+nTvnmfpY7gYJJxuJqF0XAq0 +aWoMF3GTGKbmgsKjvRMd3biVeNSeYRz8+cgy+ns7Ci7rlRw2fxG5INtZXX1rjVRN +9j5xQo+fYLHtp48OB2NIZ9qi5dAqSDgdgZ1oHFzzWJJ4dHw9zoMDUW77g8Hi74g4 +jCXoxq61LMAfNpB8hFrN44xgDD3N15A8IWZEy81bBRQBER6yreZ4Ey1WrgCbF/ti +4RjUt98THxbQ1/fP5bDCXpagVSS3h70ZPyYl2gRFVNeEmPekUj4YZP4CvCEb74TF +HFJU6go2YzLah+UeG/z1ln8jl2BZdKd0K58tCHwsYvpOeQ1P0jopR6vtnKEAO9py +6YV2N5JOEA/EQsLDzyn8Hdk70WgceDjCo6Lkpukblk3sL8WfcnoGSysXWrRfQXnC +ktf2yE3vA5IOdd3Bs6yXKSvgp/vmfuLHjAlC7m4Si5MnVuhRWVcrdGmQEKuWb6hO +4GRFNiUWZOSDjxWo93M9U3Ur3iv5chb+i9wYLEceKysk4+IKjbqfutg195m1N3GU +Qn4sF6clXMRM5vzU9BUx4Y6kZLki8dWYgxNirw9/u/APfqHiycT08pCVZ7iCnExP +Q7MpgL6fFNgnwR1hEVHxO6a0kxK0jJh/cWBFHKx6Pkqv4GdXOpUcoKWmugbViLoE +gjRPHbHXzVM= +=bDBY +-----END PGP SIGNATURE----- diff --git a/SPECS/virt-v2v.spec b/SPECS/virt-v2v.spec index 58a5b21..6fcbc04 100644 --- a/SPECS/virt-v2v.spec +++ b/SPECS/virt-v2v.spec @@ -11,12 +11,12 @@ %endif # The source directory. -%global source_directory 2.0-stable +%global source_directory 2.2-stable Name: virt-v2v Epoch: 1 -Version: 2.0.7 -Release: 6%{?dist} +Version: 2.2.0 +Release: 5%{?dist} Summary: Convert a virtual machine to run on KVM License: GPLv2+ @@ -32,41 +32,39 @@ Source2: libguestfs.keyring # Maintainer script which helps with handling patches. Source3: copy-patches.sh +# Patches are maintained in the following repository: +# https://github.com/libguestfs/virt-v2v/commits/rhel-9.2 + # Patches. -Patch0001: 0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch -Patch0002: 0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch -Patch0003: 0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch -Patch0004: 0004-RHEL-Fixes-for-libguestfs-winsupport.patch -Patch0005: 0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch -Patch0006: 0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch -Patch0007: 0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch -Patch0008: 0008-RHEL-Disable-o-glance.patch -Patch0009: 0009-RHEL-Remove-the-in-place-option.patch -Patch0010: 0010-output-Remove-o-json-mode.patch -Patch0011: 0011-output-Remove-unused-dummy.c.patch -Patch0012: 0012-adopt-inversion-of-SELinux-relabeling-in-virt-custom.patch -Patch0013: 0013-output-create_libvirt_xml-wire-up-the-QEMU-guest-age.patch -Patch0014: 0014-convert_linux-extract-qemu-guest-agent-package-name.patch -Patch0015: 0015-convert_linux-install-the-QEMU-guest-agent-with-a-fi.patch -Patch0016: 0016-RHV-outputs-limit-copied-disk-count-to-23.patch -Patch0017: 0017-convert-document-networking-dependency-of-key-ID-cle.patch -Patch0018: 0018-qemu-nbd-Implement-output-compression-for-qcow2-file.patch -Patch0019: 0019-o-disk-o-libvirt-o-qemu-Implement-of-qcow2-oo-compre.patch -Patch0020: 0020-tests-Add-a-simple-test-of-o-local-of-qcow2-oo-compr.patch -Patch0021: 0021-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch -Patch0022: 0022-RHEL-9-tests-Remove-btrfs-test.patch -Patch0023: 0023-convert-convert_linux-complete-the-remapping-of-NVMe.patch -Patch0024: 0024-input-xen-sync-ip-limitations-language-from-input-vm.patch -Patch0025: 0025-input-xen-replace-enable-LEGACY-crypto-advice-with-t.patch -Patch0026: 0026-common-Adapt-to-renamed-function-On_exit.rmdir-On_ex.patch -Patch0027: 0027-o-rhv-Unmount-the-temporary-NFS-mountpoint-as-late-a.patch -Patch0028: 0028-output-Permit-output-modes-to-wait-on-the-local-NBD-.patch -Patch0029: 0029-o-rhv-Wait-for-the-NBD-server-to-exit-to-avoid-a-rac.patch -Patch0030: 0030-output-create_libvirt_xml-relax-VCPU-feature-checkin.patch -Patch0031: 0031-input-xen-cover-RHEL9-OpenSSL-crypto-settings.patch -Patch0032: 0032-convert_linux-remove-LVM2-devices-file.patch -Patch0033: 0033-convert-linux-Add-support-for-Zstandard-compressed-k.patch -Patch0034: 0034-convert_linux-start-the-QEMU-guest-agent-in-a-distro.patch +Patch0001: 0001-test-v2v-fedora-btrfs-conversion-spell-out-btrfs-fea.patch +Patch0002: 0002-test-v2v-i-ova-spell-out-ntfs-feature-group-dependen.patch +Patch0003: 0003-Translated-using-Weblate-Finnish.patch +Patch0004: 0004-Translated-using-Weblate-Georgian.patch +Patch0005: 0005-Update-translation-files.patch +Patch0006: 0006-Translated-using-Weblate-Ukrainian.patch +Patch0007: 0007-convert-windows-Remove-extraneous-blank-lines-in-sou.patch +Patch0008: 0008-convert-windows-Document-what-copy_qemu_ga-function-.patch +Patch0009: 0009-convert-windows-Remove-unused-open-Utils.patch +Patch0010: 0010-o-kubevirt-Fix-mistake-in-error-message.patch +Patch0011: 0011-o-kubevirt-Move-cpu-element-under-domain.patch +Patch0012: 0012-o-kubevirt-Error-on-invalid-output-guest-names.patch +Patch0013: 0013-Split-long-lines-in-messages.patch +Patch0014: 0014-o-kubevirt-Implement-oo-compressed-for-qcow2-files.patch +Patch0015: 0015-v2v-Remove-use-of-anchored.patch +Patch0016: 0016-o-kubevirt-Replace-PCRE-anchored-with.patch +Patch0017: 0017-o-libvirt-Add-correct-xmlns-libosinfo-for-Rocky-Linu.patch +Patch0018: 0018-convert-linux-Require-host-cpu-for-all-RHEL-alike-9.patch +Patch0019: 0019-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch +Patch0020: 0020-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch +Patch0021: 0021-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch +Patch0022: 0022-RHEL-Fixes-for-libguestfs-winsupport.patch +Patch0023: 0023-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +Patch0024: 0024-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch +Patch0025: 0025-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch +Patch0026: 0026-RHEL-Disable-o-glance.patch +Patch0027: 0027-RHEL-Remove-the-in-place-option.patch +Patch0028: 0028-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch +Patch0029: 0029-RHEL-9-tests-Remove-btrfs-test.patch %if !0%{?rhel} # libguestfs hasn't been built on i686 for a while since there is no @@ -89,7 +87,6 @@ ExclusiveArch: x86_64 BuildRequires: autoconf, automake, libtool %endif -BuildRequires: git BuildRequires: make BuildRequires: /usr/bin/pod2man BuildRequires: gcc @@ -114,6 +111,7 @@ BuildRequires: xorriso BuildRequires: ocaml-findlib-devel BuildRequires: ocaml-libguestfs-devel +BuildRequires: ocaml-libvirt-devel BuildRequires: ocaml-libnbd-devel BuildRequires: ocaml-fileutils-devel BuildRequires: ocaml-gettext-devel @@ -121,13 +119,23 @@ BuildRequires: ocaml-gettext-devel BuildRequires: ocaml-ounit-devel %endif +# These are for running our limited test. +BuildRequires: %{_bindir}/qemu-nbd +BuildRequires: %{_bindir}/nbdcopy +BuildRequires: %{_bindir}/nbdinfo +BuildRequires: nbdkit-file-plugin +BuildRequires: nbdkit-null-plugin BuildRequires: nbdkit-python-plugin +BuildRequires: nbdkit-cow-filter >= 1.28.3-1.el9 +%ifarch x86_64 +BuildRequires: glibc-static +%endif %if 0%{verify_tarball_signature} BuildRequires: gnupg2 %endif -Requires: libguestfs%{?_isa} >= 1:1.48.4-2.el9 +Requires: libguestfs%{?_isa} >= 1:1.48.4-4.el9 Requires: guestfs-tools >= 1.42 # XFS is the default filesystem in Fedora and RHEL. @@ -235,7 +243,7 @@ for %{name}. %if 0%{verify_tarball_signature} %{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' %endif -%autosetup -p1 -S git +%autosetup -p1 %if 0%{patches_touch_autotools} autoreconf -i @@ -279,31 +287,28 @@ rm $RPM_BUILD_ROOT%{_mandir}/man1/virt-v2v-in-place.1* %check -# All tests fail at the moment because of bugs in libvirt blockdev. -# # Tests fail on both armv7 and ppc64le in Fedora 31 because the kernel -# # cannot boot on qemu. -# %ifnarch %{arm} ppc64le - -# # On x86_64 this single test fails with: "virt-v2v: warning: the -# # target hypervisor does not support a x86_64 KVM guest". Missing -# # BuildRequires? -# %ifarch x86_64 -# truncate -s 0 tests/test-v2v-o-libvirt.sh -# %endif - -# # This test fails in mock. -# truncate -s 0 tests/test-v2v-oa-option.sh - -# # Make sure we can see the debug messages (RHBZ#1230160). -# export LIBGUESTFS_DEBUG=1 -# export LIBGUESTFS_TRACE=1 - -# make %{?_smp_mflags} check || { -# cat tests/test-suite.log -# exit 1 -# } - -# %endif +%ifarch x86_64 +# Only run the tests with non-debug (ie. non-Rawhide) kernels. +# XXX This tests for any debug kernel installed. +if grep CONFIG_DEBUG_MUTEXES=y /lib/modules/*/config ; then + echo "Skipping tests because debug kernel is installed" + exit 0 +fi + +# Make sure we can see the debug messages (RHBZ#1230160). +export LIBGUESTFS_DEBUG=1 +export LIBGUESTFS_TRACE=1 + +# The built in tests take a very long time to run under TCG (in Koji), +# so just perform a very simple conversion to check things are +# working. +for f in windows.img fedora.img; do + make -C test-data/phony-guests $f + if -s test-data/phony-guests/$f; then + ./run virt-v2v -v -x -i disk test-data/phony-guests/$f -o null + fi +done +%endif %files -f %{name}.lang @@ -313,6 +318,7 @@ rm $RPM_BUILD_ROOT%{_mandir}/man1/virt-v2v-in-place.1* %if !0%{?rhel} %{_bindir}/virt-v2v-in-place %endif +%{_bindir}/virt-v2v-inspector %{_mandir}/man1/virt-v2v.1* %{_mandir}/man1/virt-v2v-hacking.1* %{_mandir}/man1/virt-v2v-input-vmware.1* @@ -320,11 +326,13 @@ rm $RPM_BUILD_ROOT%{_mandir}/man1/virt-v2v-in-place.1* %if !0%{?rhel} %{_mandir}/man1/virt-v2v-in-place.1* %endif +%{_mandir}/man1/virt-v2v-inspector.1* %{_mandir}/man1/virt-v2v-output-local.1* %{_mandir}/man1/virt-v2v-output-openstack.1* %{_mandir}/man1/virt-v2v-output-rhv.1* %{_mandir}/man1/virt-v2v-release-notes-1.42.1* %{_mandir}/man1/virt-v2v-release-notes-2.0.1* +%{_mandir}/man1/virt-v2v-release-notes-2.2.1* %{_mandir}/man1/virt-v2v-support.1* %{_datadir}/virt-tools @@ -345,6 +353,38 @@ rm $RPM_BUILD_ROOT%{_mandir}/man1/virt-v2v-in-place.1* %changelog +* Mon Feb 06 2023 Richard W.M. Jones - 1:2.2.0-5 +- Rebase to virt-v2v 2.2.0 + resolves: rhbz#2135762 +- Copy drivers for Windows 11, Windows 2019 & Windows 2022 + resolves: rhbz#2149811 +- Fix Description field for Windows >= 10 in -o rhv/vdsm modes + resolves: rhbz#2149863 +- Fix UEFI fallback boot loader if broken + resolves: rhbz#2149629 +- Document Windows system on Dynamic Disk is not supported (2140548 comment 5) +- Include the BOCHS DRM driver in the initial ram disk + resolves: rhbz#2131123 +- windows_virtio: favor "fwcfg" over "qemufwcfg" + resolves: rhbz#2151752 +- -o rhv-upload: set ovirt:id correctly + resolves: rhbz#2152465 +- Enable the %%check tests +- -o kubevirt: Fix position of cpu field + resolves: rhbz#2162331 +- -o kubevirt: Fix incorrect error message + resolves: rhbz#2162441 +- -o kubevirt: Error if invalid guest name on target + resolves: rhbz#2162332 +- -o kubevirt: Enable -oo compressed option + resolves: rhbz#2162444 +- Remove -oo qemu-boot option completely + resolves: rhbz#2166565 +- Remove warning when converting Rocky Linux + resolves: rhbz#2166618 +- Fix kernel panic after converting Rocky Linux 9 + resolves: rhbz#2166619 + * Thu Aug 18 2022 Laszlo Ersek - 1:2.0.7-6 - Install qemu-ga package during conversion resolves: rhbz#2028764