From 9bf6d37858dc162ee6b10ebd4ee4d2c62cf184f3 Mon Sep 17 00:00:00 2001 From: Sergio Vega Date: Tue, 11 Dec 2018 10:43:19 -0600 Subject: [PATCH] Support datastore migration during VM migration --- src/tm_mad/vcenter/mv | 2 +- .../remotes/lib/vcenter_driver/virtual_machine.rb | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/tm_mad/vcenter/mv b/src/tm_mad/vcenter/mv index 2fd3cb553c..c00d16769e 100755 --- a/src/tm_mad/vcenter/mv +++ b/src/tm_mad/vcenter/mv @@ -43,7 +43,7 @@ begin exit 0 if OpenNebula.is_disk?(dst_path) exit 0 if src == dst - VCenterDriver::VirtualMachine.migrate_routine(vmid, host_orig, host_dest) + VCenterDriver::VirtualMachine.migrate_routine(vmid, host_orig, host_dest, dsid) rescue StandardError => e message = "Cannot migrate for VM #{vmid}"\ 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 964df097ab..071acc7426 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -2180,10 +2180,11 @@ class VirtualMachine < VCenterDriver::Template # retrieve host from DRS resourcepool = config[:cluster].resourcePool - #relocate_spec_params = {} - #relocate_spec_params[:pool] = resourcepool - #relocate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec(relocate_spec_params) - #@item.RelocateVM_Task(spec: relocate_spec, priority: "defaultPriority").wait_for_completion + relocate_spec_params = {} + relocate_spec_params[:pool] = resourcepool + relocate_spec_params[:datastore] = config[:datastore] + relocate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec(relocate_spec_params) + @item.RelocateVM_Task(spec: relocate_spec, priority: "defaultPriority").wait_for_completion @item.MigrateVM_Task(:pool=> resourcepool, :priority => "defaultPriority").wait_for_completion @@ -2639,8 +2640,12 @@ class VirtualMachine < VCenterDriver::Template pool = OpenNebula::HostPool.new(one_client) pool.info + datastores = OpenNebula::DatastorePool.new(one_client) + datastores.info + src_id = pool["/HOST_POOL/HOST[NAME='#{src_host}']/ID"].to_i dst_id = pool["/HOST_POOL/HOST[NAME='#{dst_host}']/ID"].to_i + datastore = datastores["/DATASTORE_POOL/DATASTORE[ID='#{ds}']/TEMPLATE/VCENTER_DS_REF"] vi_client = VCenterDriver::VIClient.new_from_host(src_id) @@ -2657,7 +2662,7 @@ class VirtualMachine < VCenterDriver::Template ccr_ref = dst_host['/HOST/TEMPLATE/VCENTER_CCR_REF'] vc_host = VCenterDriver::ClusterComputeResource.new_from_ref(ccr_ref, vi_client).item - config = { :cluster => vc_host } + config = { :cluster => vc_host, :datastore => datastore } vc_vm.migrate(config) vm.replace({ 'VCENTER_CCR_REF' => ccr_ref})