1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

git commit -m B #2649: added reconfigure to ensure disk sync

This commit is contained in:
sergio semedi 2018-12-12 08:52:34 +01:00 committed by Tino Vázquez
parent 9f44f3869c
commit 5dfc51bae0
2 changed files with 19 additions and 33 deletions

View File

@ -693,6 +693,8 @@ class VirtualMachine < VCenterDriver::Template
# @item is populated
@item = vm
reference_unmanaged_devices(vc_template_ref)
return self['_ref']
end
@ -1104,16 +1106,6 @@ class VirtualMachine < VCenterDriver::Template
extraconfig = []
device_change = []
# deploy operation, no instantiated as persistent
if deploy[:template_ref]
template_ref = deploy[:template_ref]
refs = reference_unmanaged_devices(template_ref)
# changes in deploy op (references)
device_change += refs[:deviceChange] if refs[:deviceChange]
extraconfig += refs[:extraConfig] if refs[:extraConfig]
end
disks = sync_disks(:all, false)
resize_unmanaged_disks
@ -1585,26 +1577,23 @@ class VirtualMachine < VCenterDriver::Template
info_disks
spec_hash = {}
device_change_a = []
device_change_d = []
device_change = []
extra_config = []
if option == :all
device_change_d, extra_config = detach_disks_specs
spec_hash[:extraConfig] = extra_config if !extra_config.empty?
detach_op = {}
detach_op[:deviceChange], detach_op[:extraConfig] = detach_disks_specs
perform = !detach_op[:deviceChange].empty? || !detach_op[:extraConfig].empty?
@item.ReconfigVM_Task(:spec => detach_op).wait_for_completion if perform
end
device_change_a, device_change_spod, device_change_spod_ids = attach_disks_specs
device_change, device_change_spod, device_change_spod_ids = attach_disks_specs
if !device_change_spod.empty?
spec_hash[:extraConfig] = create_storagedrs_disks(device_change_spod, device_change_spod_ids)
end
device_change = device_change_a + device_change_d
if !device_change.empty?
spec_hash[:deviceChange] = device_change_a + device_change_d
end
spec_hash[:deviceChange] = device_change unless device_change.empty?
return spec_hash unless execute
@ -1926,9 +1915,6 @@ class VirtualMachine < VCenterDriver::Template
# Update the template reference
new_template.update("VCENTER_TEMPLATE_REF=#{@item._ref}", true)
if !new_template['TEMPLATE/OS'] || new_template['TEMPLATE/OS'].empty?
new_template.update('OS=[BOOT="disk0"]', true)
end
end
def resize_unmanaged_disks
@ -1978,8 +1964,9 @@ class VirtualMachine < VCenterDriver::Template
used_numbers = []
available_numbers = []
devices = @item.config.hardware.device
@item["config.hardware.device"].each do |dev|
devices.each do |dev|
if dev.is_a? RbVmomi::VIM::VirtualIDEController
if ide_schema[dev.key].nil?
ide_schema[dev.key] = {}
@ -2008,7 +1995,7 @@ class VirtualMachine < VCenterDriver::Template
controller = nil
@item['config.hardware.device'].each do |device|
devices.each do |device|
if device.deviceInfo.label == available_controller_label
controller = device
break
@ -2026,8 +2013,9 @@ class VirtualMachine < VCenterDriver::Template
used_numbers = []
available_numbers = []
devices = @item.config.hardware.device
@item["config.hardware.device"].each do |dev|
devices.each do |dev|
if dev.is_a? RbVmomi::VIM::VirtualSCSIController
if scsi_schema[dev.key].nil?
scsi_schema[dev.key] = {}
@ -2052,13 +2040,13 @@ class VirtualMachine < VCenterDriver::Template
if free_scsi_controllers.length > 0
available_controller_label = free_scsi_controllers[0]
else
add_new_scsi(scsi_schema)
add_new_scsi(scsi_schema, devices)
return find_free_controller
end
controller = nil
@item['config.hardware.device'].each do |device|
devices.each do |device|
if device.deviceInfo.label == available_controller_label
controller = device
break
@ -2070,7 +2058,7 @@ class VirtualMachine < VCenterDriver::Template
return controller, new_unit_number
end
def add_new_scsi(scsi_schema)
def add_new_scsi(scsi_schema, devices)
controller = nil
if scsi_schema.keys.length >= 4
@ -2102,7 +2090,7 @@ class VirtualMachine < VCenterDriver::Template
@item.ReconfigVM_Task(:spec => vm_config_spec).wait_for_completion
@item["config.hardware.device"].each do |device|
devices.each do |device|
if device.class == RbVmomi::VIM::VirtualLsiLogicController &&
device.key == scsi_key
@ -2869,7 +2857,6 @@ class VmmImporter < VCenterDriver::VcImporter
# Set reference to template disks and nics in VM template
vc_vm.one_item = vm
vc_vm.reference_unmanaged_devices(vm_ref)
request_vnc(vc_vm)

View File

@ -54,8 +54,7 @@ begin
# VM is not new, we just need to reconfigure it and to power it on
vm = VCenterDriver::VirtualMachine.new_one(vi_client, deploy_id, one_vm)
else
deploy[:template_ref] = drv_action['USER_TEMPLATE/VCENTER_TEMPLATE_REF']
deploy[:boot] = drv_action['TEMPLATE/OS']
deploy[:boot] = drv_action['TEMPLATE/OS']
vm = VCenterDriver::VirtualMachine.new_from_clone(vi_client,
drv_action,
vm_id)