Files
libguestfs/v2v/input_disk.ml
Richard W.M. Jones 9ebc125723 v2v: Don't use <target dev> attribute, use <target bus> instead.
The <target dev> attribute in libvirt isn't very informative.  What we
really want to know is whether the source disk used IDE or SCSI, as
that allows us to remap block devices accurately during conversion.
For example, if the source was IDE and RHEL 5, and after conversion
virtio will be supported, then we know that we need to remap
"/dev/hda" to "/dev/vda".

Drop the s_target_dev and s_removable_target_dev fields and replace
them with s_controller and s_removable_controller.

For -i libvirt, use the <target bus> attribute to get this information.

For -i ova, use the OVF disk controller's ResourceType.
(http://blogs.vmware.com/vapp/2009/11/virtual-hardware-in-ovf-part-1.html)
2014-11-18 13:34:57 +00:00

100 lines
2.9 KiB
OCaml

(* virt-v2v
* Copyright (C) 2009-2014 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 Common_gettext.Gettext
open Common_utils
open Types
open Utils
class input_disk verbose input_format disk = object
inherit input verbose
method as_options =
sprintf "-i disk%s %s"
(match input_format with
| None -> ""
| Some fmt -> " -if " ^ fmt)
disk
method source () =
(* Check the input file exists and is readable. *)
Unix.access disk [Unix.R_OK];
(* What name should we use for the guest? We try to derive it from
* the filename passed in. Users can override this using the
* `-on name' option.
*)
let name = Filename.basename disk in
let name =
try Filename.chop_extension name with Invalid_argument _ -> name in
if name = "" then
error (f_"-i disk: invalid input filename (%s)") disk;
(* Get the absolute path to the disk file. *)
let disk_absolute =
if not (Filename.is_relative disk) then disk
else Sys.getcwd () // disk in
(* The rest of virt-v2v doesn't actually work unless we detect
* the format of the input, so:
*)
let format =
match input_format with
| Some format -> format
| None ->
match (new Guestfs.guestfs ())#disk_format disk with
| "unknown" ->
error (f_"cannot detect the input disk format; use the -if parameter")
| format -> format in
let disk = {
s_disk_id = 0;
s_qemu_uri = disk_absolute;
s_format = Some format;
s_controller = None;
} in
(* Give the guest a simple generic network interface. *)
let network = {
s_mac = None;
s_vnet = "default"; s_vnet_orig = "default";
s_vnet_type = Network
} in
let source = {
s_hypervisor = `UnknownHV;
s_name = name; s_orig_name = name;
s_memory = 2048L *^ 1024L *^ 1024L; (* 2048 MB *)
s_vcpu = 1; (* 1 vCPU is a safe default *)
s_features = [ "acpi"; "apic"; "pae" ];
s_display =
Some { s_display_type = `Window; s_keymap = None; s_password = None };
s_disks = [disk];
s_removables = [];
s_nics = [network];
} in
source
end
let input_disk = new input_disk
let () = Modules_list.register_input_module "disk"