From 6cb05dadb207871ffc56540e986db6f4d94460ac Mon Sep 17 00:00:00 2001 From: Alejandro Huertas Herrero Date: Wed, 6 Feb 2019 15:14:49 +0100 Subject: [PATCH] B #1312: Fix Disk advanced params not saved to new template --- src/oca/ruby/opennebula/virtual_machine.rb | 29 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/oca/ruby/opennebula/virtual_machine.rb b/src/oca/ruby/opennebula/virtual_machine.rb index c330baa109..2a46b1bbf0 100644 --- a/src/oca/ruby/opennebula/virtual_machine.rb +++ b/src/oca/ruby/opennebula/virtual_machine.rb @@ -782,6 +782,12 @@ module OpenNebula REMOVE_VNET_ATTRS = %w{AR_ID BRIDGE CLUSTER_ID IP MAC TARGET NIC_ID NETWORK_ID VN_MAD SECURITY_GROUPS VLAN_ID} + REMOVE_IMAGE_ATTRS = %w{DEV_PREFIX SOURCE ORIGINAL_SIZE SIZE + DISK_SNAPSHOT_TOTAL_SIZE DRIVER IMAGE_STATE SAVE CLONE READONLY + PERSISTENT TARGET ALLOW_ORPHANS CLONE_TARGET CLUSTER_ID DATASTORE + DATASTORE_ID DISK_ID DISK_TYPE IMAGE_ID IMAGE IMAGE_UNAME IMAGE_UID + LN_TARGET TM_MAD TYPE OPENNEBULA_MANAGED} + def save_as_template(name,description, persistent=nil) img_ids = [] new_tid = nil @@ -858,13 +864,19 @@ module OpenNebula raise end - image_id = disk["IMAGE_ID"] + image_id = disk["IMAGE_ID"] + opennebula_managed = disk["OPENNEBULA_MANAGED"] + type = disk["TYPE"] + + REMOVE_IMAGE_ATTRS.each do |attr| + disk.delete_element(attr) + end if !image_id.nil? && !image_id.empty? - if disk['TYPE'] == 'CDROM' + if type == 'CDROM' replace << "DISK = [ IMAGE_ID = #{image_id}" - if disk["OPENNEBULA_MANAGED"] - replace << ", OPENNEBULA_MANAGED=#{disk["OPENNEBULA_MANAGED"]}" + if opennebula_managed + replace << ", OPENNEBULA_MANAGED=#{opennebula_managed}" end replace << " ]\n" else @@ -878,7 +890,14 @@ module OpenNebula img_ids << rc.to_i - replace << "DISK = [ IMAGE_ID = #{rc} ]\n" + disk_template = disk.template_like_str(".").tr("\n", ",\n") + + if disk_template.empty? + replace << "DISK = [ IMAGE_ID = #{rc} ] \n" + else + replace << "DISK = [ IMAGE_ID = #{rc}, " << + disk_template << " ] \n" + end end else # Volatile disks cannot be saved, so the definition is copied