On Tue, Oct 20, 2015 at 04:08:11PM +0300, Roman Kagan wrote: > Besides, it doesn't need guestfs handle open so move this step earlier > in the process. > > Signed-off-by: Roman Kagan <rka...@virtuozzo.com> > --- > v2v/v2v.ml | 77 > ++++++++++++++++++++++++++++++++------------------------------ > 1 file changed, 40 insertions(+), 37 deletions(-) > > diff --git a/v2v/v2v.ml b/v2v/v2v.ml > index 155eb83..4257b8d 100644 > --- a/v2v/v2v.ml > +++ b/v2v/v2v.ml > @@ -58,6 +58,7 @@ let rec main () = > let source = open_source input print_source in > let source = amend_source source output_name network_map in > let overlays = create_overlays source.s_disks in > + let targets = init_targets overlays source output output_format in > > (* Open the guestfs handle. *) > message (f_"Opening the overlay"); > @@ -75,43 +76,6 @@ let rec main () = > > g#launch (); > > - (* Work out where we will write the final output. Do this early > - * just so we can display errors to the user before doing too much > - * work. > - *) > - message (f_"Initializing the target %s") output#as_options; > - let targets = > - List.map ( > - fun ov -> > - (* What output format should we use? *) > - let format = > - match output_format, ov.ov_source.s_format with > - | Some format, _ -> format (* -of overrides everything *) > - | None, Some format -> format (* same as backing format *) > - | None, None -> > - error (f_"disk %s (%s) has no defined format.\n\nThe input > metadata did not define the disk format (eg. raw/qcow2/etc) of this disk, and > so virt-v2v will try to autodetect the format when reading it.\n\nHowever > because the input format was not defined, we do not know what output format > you want to use. You have two choices: either define the original format in > the source metadata, or use the '-of' option to force the output format") > ov.ov_sd ov.ov_source.s_qemu_uri in > - > - (* What really happens here is that the call to #disk_create > - * below fails if the format is not raw or qcow2. We would > - * have to extend libguestfs to support further formats, which > - * is trivial, but we'd want to check that the files being > - * created by qemu-img really work. In any case, fail here, > - * early, not below, later. > - *) > - if format <> "raw" && format <> "qcow2" then > - error (f_"output format should be 'raw' or 'qcow2'.\n\nUse the > '-of <format>' option to select a different output format for the converted > guest.\n\nOther output formats are not supported at the moment, although > might be considered in future."); > - > - (* output#prepare_targets will fill in the target_file field. > - * estimate_target_size will fill in the target_estimated_size field. > - * actual_target_size will fill in the target_actual_size field. > - *) > - { target_file = ""; target_format = format; > - target_estimated_size = None; > - target_actual_size = None; > - target_overlay = ov } > - ) overlays in > - let targets = output#prepare_targets source targets in > - > (* Inspection - this also mounts up the filesystems. *) > message (f_"Inspecting the overlay"); > let inspect = inspect_source g root_choice in > @@ -453,6 +417,45 @@ and create_overlays src_disks = > ov_virtual_size = vsize; ov_source = source } > ) src_disks > > +and init_targets overlays source output output_format = > + (* Work out where we will write the final output. Do this early > + * just so we can display errors to the user before doing too much > + * work. > + *) > + message (f_"Initializing the target %s") output#as_options; > + let targets = > + List.map ( > + fun ov -> > + (* What output format should we use? *) > + let format = > + match output_format, ov.ov_source.s_format with > + | Some format, _ -> format (* -of overrides everything *) > + | None, Some format -> format (* same as backing format *) > + | None, None -> > + error (f_"disk %s (%s) has no defined format.\n\nThe input > metadata did not define the disk format (eg. raw/qcow2/etc) of this disk, and > so virt-v2v will try to autodetect the format when reading it.\n\nHowever > because the input format was not defined, we do not know what output format > you want to use. You have two choices: either define the original format in > the source metadata, or use the '-of' option to force the output format") > ov.ov_sd ov.ov_source.s_qemu_uri in > + > + (* What really happens here is that the call to #disk_create > + * below fails if the format is not raw or qcow2. We would > + * have to extend libguestfs to support further formats, which > + * is trivial, but we'd want to check that the files being > + * created by qemu-img really work. In any case, fail here, > + * early, not below, later. > + *) > + if format <> "raw" && format <> "qcow2" then > + error (f_"output format should be 'raw' or 'qcow2'.\n\nUse the > '-of <format>' option to select a different output format for the converted > guest.\n\nOther output formats are not supported at the moment, although > might be considered in future."); > + > + (* output#prepare_targets will fill in the target_file field. > + * estimate_target_size will fill in the target_estimated_size field. > + * actual_target_size will fill in the target_actual_size field. > + *) > + { target_file = ""; target_format = format; > + target_estimated_size = None; > + target_actual_size = None; > + target_overlay = ov } > + ) overlays in > + > + output#prepare_targets source targets > + > and inspect_source g root_choice = > let roots = g#inspect_os () in > let roots = Array.to_list roots in
Seems like a nearly straightforward refactoring. Moves the target initialization earlier (which doesn't seem likely to be a problem). ACK. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://people.redhat.com/~rjones/virt-df/ _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://www.redhat.com/mailman/listinfo/libguestfs