From e1a6bf51cf94cad387b4ca35127f4a4ccd2a6cff Mon Sep 17 00:00:00 2001 From: "Carlos J. Herrera" <37907824+carloshm91@users.noreply.github.com> Date: Tue, 19 Nov 2019 11:25:21 -0500 Subject: [PATCH] B #3844: refactoring some functions (#3958) Signed-off-by: Carlos J. Herrera Matos --- .../lib/vcenter_driver/virtual_machine.rb | 32 +++++++++++++++++++ src/vmm_mad/remotes/vcenter/reboot | 3 +- src/vmm_mad/remotes/vcenter/reset | 3 +- 3 files changed, 36 insertions(+), 2 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 dfb40471b52..1a641b9da10 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -930,6 +930,34 @@ def reference_unmanaged_devices(template_ref, execute = true) {} end + def reference_disks_all(template_ref = nil, execute = true) + extraconfig = [] + spec = {} + + # Get unmanaged disks in OpenNebula's VM template + xpath = "TEMPLATE/DISK[OPENNEBULA_MANAGED=\"NO\" or OPENNEBULA_MANAGED=\"no\"]" + unmanaged_disks = one_item.retrieve_xmlelements(xpath) + + managed = false + extraconfig + reference_disks(template_ref, unmanaged_disks, managed) + + # Get managed disks in OpenNebula's VM template + xpath = "TEMPLATE/DISK[OPENNEBULA_MANAGED=\"YES\" or OPENNEBULA_MANAGED=\"yes\"]" + managed_disks = one_item.retrieve_xmlelements(xpath) + + managed = true + extraconfig + reference_disks(template_ref, managed_disks, managed) + + # Save in extraconfig the key for unmanaged disks + unless extraconfig.empty? + spec[:extraConfig] = extraconfig unless extraconfig.empty? + + return spec unless execute + + @item.ReconfigVM_Task(:spec => spec).wait_for_completion + end + end + # Build extraconfig section to reference disks # by key and avoid problems with changing paths # (mainly due to snapshots) @@ -2242,6 +2270,7 @@ def migrate(config = {}) def shutdown if !is_powered_off? + reference_disks_all begin if vm_tools? @item.ShutdownGuest @@ -2266,6 +2295,7 @@ def mark_as_template end def reset + reference_disks_all @item.ResetVM_Task.wait_for_completion end @@ -2274,10 +2304,12 @@ def suspend end def reboot + reference_disks_all @item.RebootGuest end def poweron(set_running = false) + reference_disks_all begin @item.PowerOnVM_Task.wait_for_completion rescue RbVmomi::Fault => e diff --git a/src/vmm_mad/remotes/vcenter/reboot b/src/vmm_mad/remotes/vcenter/reboot index 95be1a62a60..eb0fb4d738c 100755 --- a/src/vmm_mad/remotes/vcenter/reboot +++ b/src/vmm_mad/remotes/vcenter/reboot @@ -37,6 +37,7 @@ require 'vcenter_driver' vm_ref = ARGV[0] vc_cluster_name = ARGV[1] +vm_id = ARGV[2] drv_action = OpenNebula::XMLElement.new drv_action.initialize_xml(Base64.decode64(STDIN.read), 'VMM_DRIVER_ACTION_DATA') @@ -46,7 +47,7 @@ host_id = drv_action['VM/HISTORY_RECORDS/HISTORY/HID'] begin vi_client = VCenterDriver::VIClient.new_from_host(host_id) - vm = VCenterDriver::VirtualMachine.new_without_id(vi_client, vm_ref) + vm = VCenterDriver::VirtualMachine.new(vi_client, vm_ref, vm_id) vm.reboot rescue StandardError => e diff --git a/src/vmm_mad/remotes/vcenter/reset b/src/vmm_mad/remotes/vcenter/reset index 99e924596b3..3be0d2ba901 100755 --- a/src/vmm_mad/remotes/vcenter/reset +++ b/src/vmm_mad/remotes/vcenter/reset @@ -37,6 +37,7 @@ require 'vcenter_driver' vm_ref = ARGV[0] vc_cluster_name = ARGV[1] +vm_id = ARGV[2] drv_action = OpenNebula::XMLElement.new drv_action.initialize_xml(Base64.decode64(STDIN.read), 'VMM_DRIVER_ACTION_DATA') @@ -45,7 +46,7 @@ host_id = drv_action['VM/HISTORY_RECORDS/HISTORY/HID'] begin vi_client = VCenterDriver::VIClient.new_from_host(host_id) - vm = VCenterDriver::VirtualMachine.new_without_id(vi_client, vm_ref) + vm = VCenterDriver::VirtualMachine.new(vi_client, vm_ref, vm_id) vm.reset rescue StandardError => e