diff --git a/src/tm_mad/vcenter/clone b/src/tm_mad/vcenter/clone index 6ade2eef4d..e0e7eb74ba 100755 --- a/src/tm_mad/vcenter/clone +++ b/src/tm_mad/vcenter/clone @@ -73,7 +73,7 @@ one_vm = VCenterDriver::VIHelper.one_item(OpenNebula::VirtualMachine, vm_id) # calculate target path target_path = VCenterDriver::FileHelper.get_img_name_from_path(src_path, vm_id, - disk_id) + disk_id) begin vi_client = VCenterDriver::VIClient.new_from_host(host_id) @@ -91,18 +91,26 @@ begin new_size = new_size > original_size ? new_size * 1024 : nil end - # Do not clone disks not managed by OPENNEBULA - if !disk['OPENNEBULA_MANAGED'] || disk['OPENNEBULA_MANAGED'].to_s != "NO" + # Unmanaged disks are those with OPENNEBULA_MANAGED=NO or volatile disks + # that are created in StorageDRS clusters + unmanaged_disk = (!!disk['OPENNEBULA_MANAGED'] && disk['OPENNEBULA_MANAGED'] == "NO") || + (target_ds_ref.start_with?('group-') && !!disk["TYPE"] && disk["TYPE"].downcase == "fs") + + if !unmanaged_disk source_ds_vc = VCenterDriver::Datastore.new_from_ref(source_ds_ref, vi_client) if source_ds_ref == target_ds_ref target_ds_vc = source_ds_vc else - target_ds_vc = VCenterDriver::Datastore.new_from_ref(target_ds_ref, vi_client) + target_ds_vc = VCenterDriver::Storage.new_from_ref(target_ds_ref, vi_client) end target_ds_name_vc = target_ds_vc['name'] + if target_ds_ref.start_with?('group-') + raise "Non persistent images management is not supported for StorageDRS datastores" + end + source_ds_vc.copy_virtual_disk(src_path, target_ds_vc, target_path, new_size) end