1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-22 18:50:08 +03:00

F #4913: Non-persistent images and volatile images cannot be cloned on a Storage DRS datastore

This commit is contained in:
mcabrerizo 2017-04-17 17:17:39 +02:00
parent f94d819f79
commit 8b6880e4cb

View File

@ -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