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:
parent
9f44f3869c
commit
5dfc51bae0
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user