diff --git a/src/tm_mad/vcenter/mv b/src/tm_mad/vcenter/mv index 19b2b280e6..dac4b13926 100755 --- a/src/tm_mad/vcenter/mv +++ b/src/tm_mad/vcenter/mv @@ -50,7 +50,7 @@ begin if src_ds == dsid VCenterDriver::VirtualMachine.migrate_routine(vmid, host_orig, host_dest) else - VCenterDriver::VirtualMachine.migrate_routine(vmid, host_orig, host_dest, dsid) + VCenterDriver::VirtualMachine.migrate_routine(vmid, host_orig, host_dest, false, dsid) end rescue StandardError => e 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 ff22ce2e7c..38ad9e4cdd 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -2460,16 +2460,24 @@ class VirtualMachine < VCenterDriver::Template begin # retrieve host from DRS resourcepool = config[:cluster].resourcePool - host = config[:cluster].host.first datastore = config[:datastore] if datastore relocate_spec_params = { pool: resourcepool, - host: host, datastore: datastore, } + if config[:esx_migration_list].is_a?(String) + if config[:esx_migration_list]=="" + relocate_spec_params[:host] = config[:cluster].host.sample + elsif config[:esx_migration_list]!="Selected_by_DRS" + hosts = config[:esx_migration_list].split(' ') + relocate_spec_params[:host] = hosts.sample + end + end + + relocate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec(relocate_spec_params) @item.RelocateVM_Task(spec: relocate_spec, priority: "defaultPriority").wait_for_completion else @@ -2923,7 +2931,7 @@ class VirtualMachine < VCenterDriver::Template return one_vm end - def self.migrate_routine(vm_id, src_host, dst_host, ds = nil) + def self.migrate_routine(vm_id, src_host, dst_host, hot_ds = false, ds = nil) one_client = OpenNebula::Client.new pool = OpenNebula::HostPool.new(one_client) pool.info @@ -2948,6 +2956,8 @@ class VirtualMachine < VCenterDriver::Template vm.info dst_host.info + esx_migration_list = dst_host['/HOST/TEMPLATE/ESX_MIGRATION_LIST'] + # required vcenter objects vc_vm = VCenterDriver::VirtualMachine.new_without_id(vi_client, vm['/VM/DEPLOY_ID']) ccr_ref = dst_host['/HOST/TEMPLATE/VCENTER_CCR_REF'] @@ -2956,6 +2966,12 @@ class VirtualMachine < VCenterDriver::Template config = { :cluster => vc_host } config[:datastore] = datastore if datastore + if hot_ds + config[:esx_migration_list] = esx_migration_list if esx_migration_list + else + config[:esx_migration_list] = "Selected_by_DRS" + end + vc_vm.migrate(config) vm.replace({ 'VCENTER_CCR_REF' => ccr_ref}) diff --git a/src/vmm_mad/remotes/vcenter/migrate b/src/vmm_mad/remotes/vcenter/migrate index c1f4d6d9ec..c87775fb54 100755 --- a/src/vmm_mad/remotes/vcenter/migrate +++ b/src/vmm_mad/remotes/vcenter/migrate @@ -32,7 +32,7 @@ require 'vcenter_driver' vm_id = ARGV[-2] src_host = ARGV[-3] dst_host = ARGV[-4] -dsid = "111" +#dsid = "111" begin @@ -44,7 +44,7 @@ begin if src_ds == dsid VCenterDriver::VirtualMachine.migrate_routine(vm_id, src_host, dst_host) else - VCenterDriver::VirtualMachine.migrate_routine(vm_id, src_host, dst_host, dsid) + VCenterDriver::VirtualMachine.migrate_routine(vm_id, src_host, dst_host, true, dsid) end rescue StandardError => e