From 8bec31972f46d9c26cba68e9d6b3b553eabde609 Mon Sep 17 00:00:00 2001 From: Adam Grare Date: Tue, 2 May 2017 13:13:25 -0400 Subject: [PATCH 1/2] Add method to get vm hardware and scsi controllers https://bugzilla.redhat.com/show_bug.cgi?id=1445874 --- lib/gems/pending/VMwareWebService/MiqVimVm.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/gems/pending/VMwareWebService/MiqVimVm.rb b/lib/gems/pending/VMwareWebService/MiqVimVm.rb index 4c1cce2d1..d14d00058 100644 --- a/lib/gems/pending/VMwareWebService/MiqVimVm.rb +++ b/lib/gems/pending/VMwareWebService/MiqVimVm.rb @@ -609,6 +609,15 @@ def reconfig(vmConfigSpec) waitForTask(taskMor) end + def getHardware + getProp("config.hardware").try(:fetch_path, "config", "hardware") || {} + end + + def getScsiControllers(hardware = nil) + hardware ||= getHardware() + hardware["device"].to_a.select { |dev| VIRTUAL_SCSI_CONTROLLERS.include?(dev.xsiType) } + end + def getMemory getProp("summary.config.memorySizeMB")["summary"]["config"]["memorySizeMB"].to_i end From 7e13304de16fd5cc2c785a6f668f3585293b4303 Mon Sep 17 00:00:00 2001 From: Adam Grare Date: Tue, 2 May 2017 13:29:59 -0400 Subject: [PATCH 2/2] Allow hardware to be passed to save a getProp call https://bugzilla.redhat.com/show_bug.cgi?id=1445874 --- lib/gems/pending/VMwareWebService/MiqVimVm.rb | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/gems/pending/VMwareWebService/MiqVimVm.rb b/lib/gems/pending/VMwareWebService/MiqVimVm.rb index d14d00058..a81c0e197 100644 --- a/lib/gems/pending/VMwareWebService/MiqVimVm.rb +++ b/lib/gems/pending/VMwareWebService/MiqVimVm.rb @@ -862,12 +862,14 @@ def removeDiskByFile(backingFile, deleteBacking = false) # Find a SCSI controller and # return its key and next available unit number. # - def available_scsi_units + def available_scsi_units(hardware = nil) scsi_units = [] all_unit_numbers = [*0..MAX_SCSI_DEVICES] - devices = getProp("config.hardware")["config"]["hardware"]["device"] - scsi_controllers = devices.select { |dev| VIRTUAL_SCSI_CONTROLLERS.include?(dev.xsiType) } + hardware ||= getHardware() + + devices = hardware["device"] + scsi_controllers = getScsiControllers(hardware) scsi_controllers.sort_by { |s| s["key"].to_i }.each do |scsi_controller| # Skip if all controller units are populated @@ -895,12 +897,10 @@ def available_scsi_units scsi_units end # def available_scsi_units - def available_scsi_buses + def available_scsi_buses(hardware = nil) scsi_controller_bus_numbers = [*0..MAX_SCSI_CONTROLLERS - 1] - devices = getProp("config.hardware")["config"]["hardware"]["device"] - - scsi_controllers = devices.select { |dev| VIRTUAL_SCSI_CONTROLLERS.include?(dev.xsiType) } + scsi_controllers = getScsiControllers(hardware) scsi_controllers.each do |controller| scsi_controller_bus_numbers -= [controller["busNumber"].to_i] end @@ -912,10 +912,10 @@ def available_scsi_buses # Returns the [controllerKey, key] pair for the virtul device # associated with the given backing file. # - def getDeviceKeysByBacking(backingFile) - devs = getProp("config.hardware")["config"]["hardware"]["device"] + def getDeviceKeysByBacking(backingFile, hardware = nil) + hardware ||= getHardware() - devs.each do |dev| + hardware["device"].to_a.each do |dev| next if dev.xsiType != "VirtualDisk" next if dev["backing"]["fileName"] != backingFile return([dev["controllerKey"], dev["key"]])