diff --git a/src/vmm_mad/remotes/lib/lxc/opennebula_vm.rb b/src/vmm_mad/remotes/lib/lxc/opennebula_vm.rb index 485021e55c..20f73ad13e 100644 --- a/src/vmm_mad/remotes/lib/lxc/opennebula_vm.rb +++ b/src/vmm_mad/remotes/lib/lxc/opennebula_vm.rb @@ -25,6 +25,7 @@ require 'storageutils' require 'qcow2' require 'raw' require 'rbd' +require 'device' require_relative '../lib/xmlparser' require_relative '../lib/opennebula_vm' @@ -339,6 +340,8 @@ class Disk Qcow2Mapper.new elsif @xml['DISK_TYPE'].downcase == 'rbd' RBDMapper.new(self) + elsif @xml['DISK_TYPE'].downcase == 'block' + DeviceMapper.new else RawMapper.new end diff --git a/src/vmm_mad/remotes/lib/lxc/storage/mappers/device.rb b/src/vmm_mad/remotes/lib/lxc/storage/mappers/device.rb new file mode 100644 index 0000000000..c3e9264925 --- /dev/null +++ b/src/vmm_mad/remotes/lib/lxc/storage/mappers/device.rb @@ -0,0 +1,32 @@ +#!/usr/bin/ruby + +$LOAD_PATH.unshift File.dirname(__FILE__) + +require 'command' + +# Mapping utilities for raw devices (e.g LVM, RDM) +class DeviceMapper + + # Maps raw image file to linux loopdevice + def map(disk) + ds_path = source(disk) + + if File.symlink?(ds_path) + return File.readlink(ds_path) # Raw device path + end + + nil + end + + def unmap(_device) + true + end + + private + + # Returns the source file for the disk + def source(disk) + "#{disk.sysds_path}/#{disk.vm_id}/disk.#{disk.id}" + end + +end