--- p2v/client/lib/virt-p2v/connection.rb | 12 ++++++++++++ p2v/client/lib/virt-p2v/converter.rb | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/p2v/client/lib/virt-p2v/connection.rb b/p2v/client/lib/virt-p2v/connection.rb index c3e5537..b923144 100644 --- a/p2v/client/lib/virt-p2v/connection.rb +++ b/p2v/client/lib/virt-p2v/connection.rb @@ -243,6 +243,18 @@ class Connection } end + def mount(uri, disk_type, &cb) + raise NotConnectedError if @channel.nil? + + run(completion) { + @channel.write("MOUNT #{uri} #{disk_type}\n") + result = parse_return + + Gtk.queue { cb.call(result) } + } + end + + private def run(cb) diff --git a/p2v/client/lib/virt-p2v/converter.rb b/p2v/client/lib/virt-p2v/converter.rb index 7cb4e33..ef7541f 100644 --- a/p2v/client/lib/virt-p2v/converter.rb +++ b/p2v/client/lib/virt-p2v/converter.rb @@ -37,6 +37,9 @@ module VirtP2V # path Detected # is_block 1 # format raw +# mounts Editable, default to none +# device Detected +# uri Detected # removables Editable, default to all # device Detected # type Detected @@ -47,7 +50,7 @@ module VirtP2V class Converter attr_accessor :profile, :name, :cpus, :memory, :arch, :debug - attr_reader :features, :disks, :removables, :nics + attr_reader :features, :disks, :mounts, :removables, :nics attr_reader :connection @@ -74,6 +77,13 @@ class Converter }, cb) }, lambda { |cb| + iterate(@mounts.map { |dev| + lambda { |cb2| + mount(dev, status, cb2) + } + }, cb) + }, + lambda { |cb| if @debug begin @connection.options({ "DEBUG" => 1 }, &cb) @@ -140,6 +150,7 @@ class Converter # Initialise empty lists for optional devices. These will be added # according to the user's selection @disks = [] + @mounts = [] @removables = [] @nics = [] @@ -174,6 +185,20 @@ class Converter ], completion) end + def mount(dev, status, completion) + path = "/dev/#{dev}" + status.call("Mounting #{dev}") + disk_type = 'iscsi' + # TODO set uri + # if nbd, use qemu-nbd to setup nbd access point to img + # if iscsi, setup loop device infront of img, add new tgt + # target to setup iscsi access point to loop device + uri = "" + iterate([ + lambda { |cb| @connection.mount(uri, disk_type, &cb) } + ], completion) + end + def iterate(stages, completion) i = 0 cb = lambda { |result| @@ -204,6 +229,13 @@ class Converter 'path' => "/dev/#{device}" } }, + 'mounts' => @mounts.map { |dev| + { + 'device' => device, + 'path' => "/dev/#{device}", + 'uri' => "" + } + }, 'removables' => @removables.map { |device| removable = RemovableBlockDevice[device] { -- 1.7.11.7