From 3b1d308fc8bfebd931631108453b19978cc00b86 Mon Sep 17 00:00:00 2001 From: Sergio Vega Date: Tue, 11 Dec 2018 10:43:19 -0600 Subject: [PATCH 1/5] 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 71bb13b7b3..8cf03d77d3 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -2209,10 +2209,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 @@ -2668,8 +2669,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) @@ -2686,7 +2691,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}) From 6294d44a50d79a328833d1c56cca0f2ab80d12fa Mon Sep 17 00:00:00 2001 From: Sergio Vega Date: Thu, 20 Dec 2018 19:35:00 -0600 Subject: [PATCH 2/5] Error during conflict resolution --- src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb | 4 ---- 1 file changed, 4 deletions(-) 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 314c250e8a..1c0330bd72 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -2961,12 +2961,8 @@ 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"] # different destination ds if ds From 5bea16ccc4f9ad1f419b6334b8ee040659a671d8 Mon Sep 17 00:00:00 2001 From: Sergio Vega Date: Fri, 21 Dec 2018 11:29:11 -0600 Subject: [PATCH 3/5] Fix HISTORY record being checked --- src/tm_mad/vcenter/mv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tm_mad/vcenter/mv b/src/tm_mad/vcenter/mv index ca1691a1ae..6f0ecc7d51 100755 --- a/src/tm_mad/vcenter/mv +++ b/src/tm_mad/vcenter/mv @@ -45,7 +45,7 @@ begin one_client = OpenNebula::Client.new vm = OpenNebula::VirtualMachine.new_with_id(vmid, one_client) vm.info - src_ds = vm["/VM/HISTORY_RECORDS/HISTORY[SEQ=0]/DS_ID"] + src_ds = vm.to_hash["VM"]["HISTORY_RECORDS"]["HISTORY"].last["DS_ID"] if src_ds == dsid VCenterDriver::VirtualMachine.migrate_routine(vmid, host_orig, host_dest) From 6b69f4da4c67e67d75783d28541e2ed4c961bead Mon Sep 17 00:00:00 2001 From: Sergio Vega Date: Wed, 9 Jan 2019 12:26:22 -0600 Subject: [PATCH 4/5] Fix bug with HISTORY record --- src/tm_mad/vcenter/mv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tm_mad/vcenter/mv b/src/tm_mad/vcenter/mv index 6f0ecc7d51..3b10d555e9 100755 --- a/src/tm_mad/vcenter/mv +++ b/src/tm_mad/vcenter/mv @@ -45,7 +45,7 @@ begin one_client = OpenNebula::Client.new vm = OpenNebula::VirtualMachine.new_with_id(vmid, one_client) vm.info - src_ds = vm.to_hash["VM"]["HISTORY_RECORDS"]["HISTORY"].last["DS_ID"] + src_ds = vm.to_hash["VM"]["HISTORY_RECORDS"]["HISTORY"][-2]["DS_ID"] if src_ds == dsid VCenterDriver::VirtualMachine.migrate_routine(vmid, host_orig, host_dest) From a4cd6cf5f7bf9b8b24551d33222d40673fe93f07 Mon Sep 17 00:00:00 2001 From: Sergio Vega Date: Sat, 2 Feb 2019 21:56:35 -0600 Subject: [PATCH 5/5] F-1540 Fix bug on migration --- src/vmm_mad/remotes/vcenter/migrate | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vmm_mad/remotes/vcenter/migrate b/src/vmm_mad/remotes/vcenter/migrate index c175bc7d68..86a4fb68ce 100755 --- a/src/vmm_mad/remotes/vcenter/migrate +++ b/src/vmm_mad/remotes/vcenter/migrate @@ -50,7 +50,7 @@ begin if new_ds VCenterDriver::VirtualMachine - .migrate_routine(vm_id, src_host, dst_host, true, dsid) + .migrate_routine(vm_id, src_host, dst_host, true, dst_ds) else VCenterDriver::VirtualMachine.migrate_routine(vm_id, src_host, dst_host) end