From 846de840af704d691ce079d966ac4cd0d8b151bb Mon Sep 17 00:00:00 2001 From: Sergio Semedi Barranco Date: Tue, 20 Nov 2018 09:27:56 +0100 Subject: [PATCH] B #2610: Fix CDs in saveas operation --- src/oca/ruby/opennebula/virtual_machine.rb | 27 ++++++++++++------- src/tm_mad/vcenter/cpds | 4 +-- .../lib/vcenter_driver/virtual_machine.rb | 2 +- src/vmm_mad/remotes/vcenter/vcenterc | 2 +- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/oca/ruby/opennebula/virtual_machine.rb b/src/oca/ruby/opennebula/virtual_machine.rb index b59cf79f98..e4287f40eb 100644 --- a/src/oca/ruby/opennebula/virtual_machine.rb +++ b/src/oca/ruby/opennebula/virtual_machine.rb @@ -855,17 +855,25 @@ module OpenNebula image_id = disk["IMAGE_ID"] if !image_id.nil? && !image_id.empty? - rc = disk_saveas(disk_id.to_i,"#{name}-disk-#{disk_id}","",-1) + if disk['TYPE'] == 'CDROM' + replace << "DISK = [ IMAGE_ID = #{image_id}" + if disk["OPENNEBULA_MANAGED"] + replace << ", OPENNEBULA_MANAGED=#{disk["OPENNEBULA_MANAGED"]}" + end + replace << " ]\n" + else + rc = disk_saveas(disk_id.to_i,"#{name}-disk-#{disk_id}","",-1) - raise if OpenNebula.is_error?(rc) + raise if OpenNebula.is_error?(rc) - if persistent == true - OpenNebula::Image.new_with_id(rc.to_i, @client).persistent() + if persistent == true + OpenNebula::Image.new_with_id(rc.to_i, @client).persistent() + end + + img_ids << rc.to_i + + replace << "DISK = [ IMAGE_ID = #{rc} ]\n" end - - img_ids << rc.to_i - - replace << "DISK = [ IMAGE_ID = #{rc} ]\n" else # Volatile disks cannot be saved, so the definition is copied replace << self.template_like_str( @@ -874,12 +882,13 @@ module OpenNebula end self.each('TEMPLATE/NIC') do |nic| - nic_id = nic["NIC_ID"] + if nic_id.nil? || nic_id.empty? rc = Error.new('The NIC_ID is missing from the VM template') raise end + REMOVE_VNET_ATTRS.each do |attr| nic.delete_element(attr) end diff --git a/src/tm_mad/vcenter/cpds b/src/tm_mad/vcenter/cpds index 6c68713827..649374a97e 100755 --- a/src/tm_mad/vcenter/cpds +++ b/src/tm_mad/vcenter/cpds @@ -77,12 +77,12 @@ begin # Get source and target ds ref disk = vm.disk(disk_id) src_path = disk.path - source_ds_ref = disk.ds_ref + source_ds_ref = disk.ds._ref source_ds_vc = VCenterDriver::Datastore.new_from_ref(source_ds_ref, vi_client) # Get target ds ref - target_ds = VCenterDriver::VIHelper.one_item(OpenNebula::Datastore, target_ds_id) + target_ds = VCenterDriver::VIHelper.one_item(OpenNebula::Datastore, target_ds_id, false) target_ds_ref = target_ds['TEMPLATE/VCENTER_DS_REF'] target_ds_vc = VCenterDriver::Datastore.new_from_ref(target_ds_ref, vi_client) target_ds_name_vc = target_ds_vc['name'] diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb index 59f5c3bd45..eb7a3a918f 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -168,7 +168,7 @@ class VirtualMachine < VCenterDriver::Template @vc_res[:datastore] end - def ds_ref + def image_ds_ref @one_res['VCENTER_DS_REF'] end diff --git a/src/vmm_mad/remotes/vcenter/vcenterc b/src/vmm_mad/remotes/vcenter/vcenterc index a812936c95..34d71f79ad 100644 --- a/src/vmm_mad/remotes/vcenter/vcenterc +++ b/src/vmm_mad/remotes/vcenter/vcenterc @@ -17,4 +17,4 @@ # No : VCENTER_IMPORTED attribute will be set on imported images # this attribute prevents the image to be deleted. # Yes : You can delete the images using OpenNebula. -:delete_images: Yes +:delete_images: No