From 8b6880e4cb33dc6c7491d7e0120d528e27bf7d29 Mon Sep 17 00:00:00 2001 From: mcabrerizo Date: Mon, 17 Apr 2017 17:17:39 +0200 Subject: [PATCH] F #4913: Non-persistent images and volatile images cannot be cloned on a Storage DRS datastore --- src/tm_mad/vcenter/clone | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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