From 186694626a66a0449cfc6d41e7db0c9f38fbc806 Mon Sep 17 00:00:00 2001 From: "Carlos J. Herrera" <cherrera@opennebula.io> Date: Fri, 11 Feb 2022 06:41:49 -0500 Subject: [PATCH] B #5689: allow import wilds with same moref (#1747) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tino Vázquez <cvazquez@opennebula.io> (cherry picked from commit 1fc5b5afe67d643d042c8b9c5a3f7cde0ee474bc) --- src/vmm_mad/remotes/lib/vcenter_driver/host.rb | 2 +- src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb | 10 ++++++++++ .../remotes/lib/vcenter_driver/virtual_machine.rb | 1 + src/vmm_mad/remotes/lib/vcenter_driver/vmm_importer.rb | 1 + src/vmm_mad/remotes/vcenter/deploy | 3 ++- 5 files changed, 15 insertions(+), 2 deletions(-) mode change 100755 => 100644 src/vmm_mad/remotes/vcenter/deploy diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/host.rb b/src/vmm_mad/remotes/lib/vcenter_driver/host.rb index d532c92033..55b588ba71 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/host.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/host.rb @@ -712,7 +712,7 @@ module VCenterDriver # Only take care of VMs, not templates if !hashed_properties['config.template'] - vms[r.obj._ref] = hashed_properties + vms[r.obj._ref + "_" + vc_uuid] = hashed_properties vm_objects << r.obj end end diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb b/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb index b3c4d84a30..a8d74659dd 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb @@ -117,6 +117,16 @@ module VCenterDriver return_if_error(rc, item, exit_if_fail) end + + # Since https://github.com/OpenNebula/one/issues/5689 + # there two deploy_ids allowed: + # * moref, eg: vm-567 + # * moref +"_" + vcenter uuid, eg: + # 2499952a-6c85-480e-b7df-4cbd2137eb69_vm-456 + # This function will always return the moref + def self.get_deploy_id(deploy_id) + return deploy_id.split("_")[0] + end def self.find_by_name(the_class, name, pool = nil, raise_if_fail = true) pool = one_pool(the_class, raise_if_fail) if pool.nil? 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 8fca76b10f..4d76898d52 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -103,6 +103,7 @@ end def initialize(vi_client, ref, one_id) if ref + ref = VCenterDriver::VIHelper.get_deploy_id(ref) @item = RbVmomi::VIM::VirtualMachine.new(vi_client.vim, ref) check_item(@item, RbVmomi::VIM::VirtualMachine) end diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/vmm_importer.rb b/src/vmm_mad/remotes/lib/vcenter_driver/vmm_importer.rb index 6660ded825..95850babb1 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/vmm_importer.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/vmm_importer.rb @@ -46,6 +46,7 @@ module VCenterDriver vm_ref = selected['DEPLOY_ID'] || selected[:wild]['DEPLOY_ID'] vm = selected[:one_item] || build template = selected[:template] || import_tmplt + template = "DEPLOY_ID = #{vm_ref}\n" + template host_id = selected[:host] || @list.keys[0] vc_uuid = @vi_client.vim.serviceContent.about.instanceUuid diff --git a/src/vmm_mad/remotes/vcenter/deploy b/src/vmm_mad/remotes/vcenter/deploy old mode 100755 new mode 100644 index 6c6e1cd828..cfe0ca4250 --- a/src/vmm_mad/remotes/vcenter/deploy +++ b/src/vmm_mad/remotes/vcenter/deploy @@ -75,6 +75,7 @@ deploy[:boot] = drv_action['TEMPLATE/OS/BOOT'] \ begin retries ||= 0 vi_client = VCenterDriver::VIClient.new_from_host(host_id) + vc_uuid = vi_client.vim.serviceContent.about.instanceUuid one_vm = VCenterDriver::VIHelper.one_item(OpenNebula::VirtualMachine, vm_id) if !drv_action.retrieve_xmlelements('USER_TEMPLATE/VCENTER_TAG').empty? && @@ -132,7 +133,7 @@ begin vm.poweron(set_running) end - puts vm['_ref'] + puts vm['_ref'] + "_" + vc_uuid rescue StandardError => e message = "Deploy of VM #{vm_id} on vCenter cluster #{cluster_name} " \ "with #{dfile} failed due to \"#{e.message}\"" \