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 9e33caa284..0430b25450 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -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) diff --git a/src/vmm_mad/remotes/vcenter/deploy b/src/vmm_mad/remotes/vcenter/deploy index adf4a6cb57..bb8f472518 100755 --- a/src/vmm_mad/remotes/vcenter/deploy +++ b/src/vmm_mad/remotes/vcenter/deploy @@ -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)