Skip to content

Instantly share code, notes, and snippets.

@ohadlevy
Created October 30, 2012 07:18
Show Gist options
  • Save ohadlevy/3978759 to your computer and use it in GitHub Desktop.
Save ohadlevy/3978759 to your computer and use it in GitHub Desktop.
diff --git a/lib/fog/vsphere/compute.rb b/lib/fog/vsphere/compute.rb
index 6c9fc1e..ed1ca99 100644
--- a/lib/fog/vsphere/compute.rb
+++ b/lib/fog/vsphere/compute.rb
@@ -11,6 +11,16 @@ module Fog
model_path 'fog/vsphere/models/compute'
model :server
collection :servers
+ model :datacenter
+ collection :datacenters
+ model :interface
+ collection :interfaces
+ model :volume
+ collection :volumes
+ model :template
+ collection :templates
+ model :cluster
+ collection :clusters
request_path 'fog/vsphere/requests/compute'
request :current_time
@@ -23,7 +33,14 @@ module Fog
request :vm_create
request :vm_destroy
request :vm_migrate
- request :datacenters
+ request :list_datacenters
+ request :get_datacenter
+ request :list_clusters
+ request :get_cluster
+ request :create_vm
+ request :list_vm_interfaces
+ request :list_vm_volumes
+ request :get_virtual_machine
request :vm_reconfig_hardware
request :vm_reconfig_memory
request :vm_reconfig_cpus
diff --git a/lib/fog/vsphere/models/compute/cluster.rb b/lib/fog/vsphere/models/compute/cluster.rb
new file mode 100644
index 0000000..ff93471
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/cluster.rb
@@ -0,0 +1,23 @@
+module Fog
+ module Compute
+ class Vsphere
+
+ class Cluster < Fog::Model
+
+ identity :id
+
+ attribute :name
+
+ def networks
+ connection.list_networks(id)
+ end
+
+ def to_s
+ name
+ end
+
+ end
+
+ end
+ end
+end
diff --git a/lib/fog/vsphere/models/compute/clusters.rb b/lib/fog/vsphere/models/compute/clusters.rb
new file mode 100644
index 0000000..e1ea916
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/clusters.rb
@@ -0,0 +1,23 @@
+require 'fog/core/collection'
+require 'fog/vsphere/models/compute/cluster'
+
+module Fog
+ module Compute
+ class Vsphere
+
+ class Clusters < Fog::Collection
+
+ model Fog::Compute::Vsphere::Cluster
+
+ def all(filters = {})
+ load connection.list_clusters(filters)
+ end
+
+ def get(id)
+ new connection.get_cluster(id)
+ end
+
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/models/compute/datacenter.rb b/lib/fog/vsphere/models/compute/datacenter.rb
new file mode 100644
index 0000000..8b9cac9
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/datacenter.rb
@@ -0,0 +1,22 @@
+module Fog
+ module Compute
+ class Vsphere
+
+ class Datacenter < Fog::Model
+
+ identity :name
+ attribute :status
+
+ def networks
+ connection.list_networks(id)
+ end
+
+ def to_s
+ name
+ end
+
+ end
+
+ end
+ end
+end
diff --git a/lib/fog/vsphere/models/compute/datacenters.rb b/lib/fog/vsphere/models/compute/datacenters.rb
new file mode 100644
index 0000000..dc46108
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/datacenters.rb
@@ -0,0 +1,23 @@
+require 'fog/core/collection'
+require 'fog/vsphere/models/compute/datacenter'
+
+module Fog
+ module Compute
+ class Vsphere
+
+ class Datacenters < Fog::Collection
+
+ model Fog::Compute::Vsphere::Datacenter
+
+ def all(filters = {})
+ load connection.list_datacenters(filters)
+ end
+
+ def get(name)
+ new connection.get_datacenter(name)
+ end
+
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/lib/fog/vsphere/models/compute/interface.rb b/lib/fog/vsphere/models/compute/interface.rb
new file mode 100644
index 0000000..99ebb68
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/interface.rb
@@ -0,0 +1,22 @@
+module Fog
+ module Compute
+ class Vsphere
+
+ class Interface < Fog::Model
+ identity :mac
+
+ attribute :network
+ attribute :name
+ attribute :status
+ attribute :summary
+ attribute :type
+
+ def to_s
+ name
+ end
+
+ end
+
+ end
+ end
+end
diff --git a/lib/fog/vsphere/models/compute/interfaces.rb b/lib/fog/vsphere/models/compute/interfaces.rb
new file mode 100644
index 0000000..d3a0f97
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/interfaces.rb
@@ -0,0 +1,33 @@
+require 'fog/core/collection'
+require 'fog/vsphere/models/compute/interface'
+
+module Fog
+ module Compute
+ class Vsphere
+
+ class Interfaces < Fog::Collection
+
+ model Fog::Compute::Vsphere::Interface
+
+ attr_accessor :vm
+
+ def all(filters = {})
+ requires :vm
+ case vm
+ when Fog::Compute::Vsphere::Server
+ load connection.list_vm_interfaces(vm.id)
+ when Fog::Compute::Vsphere::Template
+ load connection.list_template_interfaces(vm.id)
+ else
+ raise 'interfaces should have vm or template'
+ end
+ end
+
+ def get(id)
+ new connection.get_interface(id)
+ end
+
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/models/compute/server.rb b/lib/fog/vsphere/models/compute/server.rb
index cbe84ab..08180c4 100644
--- a/lib/fog/vsphere/models/compute/server.rb
+++ b/lib/fog/vsphere/models/compute/server.rb
@@ -36,6 +36,8 @@ module Fog
attribute :path
attribute :memory_mb
attribute :cpus
+ attribute :interfaces
+ attribute :volumes
def vm_reconfig_memory(options = {})
requires :instance_uuid, :memory
@@ -81,14 +83,6 @@ module Fog
connection.vm_migrate('instance_uuid' => instance_uuid, 'priority' => options[:priority])
end
- def create(options ={})
- requires :name, :path
- new_vm = self.class.new(create_results['vm_attributes'])
- new_vm.collection = self.collection
- new_vm.connection = self.connection
- new_vm
- end
-
def clone(options = {})
requires :name, :path
# Convert symbols to strings
@@ -131,6 +125,33 @@ module Fog
memory_mb * 1024 * 1024
end
+ def mac
+ interfaces.first.mac unless interfaces.empty?
+ end
+
+ def interfaces
+ self.attributes[:interfaces] ||= id.nil? ? [] : Fog::Compute::Vsphere::Interfaces.new(
+ :connection => connection,
+ :vm => self
+ )
+ end
+
+ def volumes
+ self.attributes[:volumes] ||= id.nil? ? [] : Fog::Compute::Vsphere::Volumes.new(
+ :connection => connection,
+ :vm => self
+ )
+ end
+
+ def save
+ if identity
+ # connection.update_vm(attributes)
+ else
+ self.id = connection.create_vm(attributes).id
+ end
+ reload
+ end
+
end
end
diff --git a/lib/fog/vsphere/models/compute/servers.rb b/lib/fog/vsphere/models/compute/servers.rb
index b57783b..47d12c5 100644
--- a/lib/fog/vsphere/models/compute/servers.rb
+++ b/lib/fog/vsphere/models/compute/servers.rb
@@ -21,17 +21,7 @@ module Fog
end
def get(id)
- # Is the id a managed_object_reference? This may be the case if we're reloading
- # a model of a VM in the process of being cloned, since it
- # will not have a instance_uuid yet.
- if id =~ /^vm-/
- response = connection.find_vm_by_ref('vm_ref' => id)
- server_attributes = response['virtual_machine']
- else
- response = connection.list_virtual_machines('instance_uuid' => id)
- server_attributes = response['virtual_machines'].first
- end
- new(server_attributes)
+ new connection.get_virtual_machine id
rescue Fog::Compute::Vsphere::NotFound
nil
end
diff --git a/lib/fog/vsphere/models/compute/template.rb b/lib/fog/vsphere/models/compute/template.rb
new file mode 100644
index 0000000..2c68265
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/template.rb
@@ -0,0 +1,13 @@
+module Fog
+ module Compute
+ class Vsphere
+
+ class Template < Fog::Model
+
+ identity :id
+
+ end
+
+ end
+ end
+end
diff --git a/lib/fog/vsphere/models/compute/templates.rb b/lib/fog/vsphere/models/compute/templates.rb
new file mode 100644
index 0000000..92cc777
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/templates.rb
@@ -0,0 +1,23 @@
+require 'fog/core/collection'
+require 'fog/vsphere/models/compute/template'
+
+module Fog
+ module Compute
+ class Vsphere
+
+ class Templates < Fog::Collection
+
+ model Fog::Compute::Vsphere::Template
+
+ def all(filters = {})
+ load connection.list_templates(filters)
+ end
+
+ def get(id)
+ new connection.get_template(id)
+ end
+
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/models/compute/volume.rb b/lib/fog/vsphere/models/compute/volume.rb
new file mode 100644
index 0000000..ec92dab
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/volume.rb
@@ -0,0 +1,31 @@
+module Fog
+ module Compute
+ class Vsphere
+
+ class Volume < Fog::Model
+ DISK_SIZE_TO_GB = 1048576
+ identity :id
+
+ attribute :datastore
+ attribute :mode
+ attribute :size
+ attribute :thin
+ attribute :name
+ attribute :filename
+ attribute :size_gb
+
+ def size_gb
+ attributes[:size_gb] ||= attributes[:size].to_i / DISK_SIZE_TO_GB if attributes[:size]
+ end
+
+ def size_gb= s
+ attributes[:size] = s.to_i * DISK_SIZE_TO_GB if s
+ end
+
+ def to_s
+ id
+ end
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/models/compute/volumes.rb b/lib/fog/vsphere/models/compute/volumes.rb
new file mode 100644
index 0000000..6d36afb
--- /dev/null
+++ b/lib/fog/vsphere/models/compute/volumes.rb
@@ -0,0 +1,33 @@
+require 'fog/core/collection'
+require 'fog/vsphere/models/compute/volume'
+
+module Fog
+ module Compute
+ class Vsphere
+
+ class Volumes < Fog::Collection
+
+ model Fog::Compute::Vsphere::Volume
+
+ attr_accessor :vm
+
+ def all(filters = {})
+ requires :vm
+ case vm
+ when Fog::Compute::Vsphere::Server
+ load connection.list_vm_volumes(vm.id)
+ when Fog::Compute::Vsphere::Template
+ load connection.list_template_volumes(vm.id)
+ else
+ raise 'volumes should have vm or template'
+ end
+ end
+
+ def get(id)
+ new connection.get_volume(id)
+ end
+
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/requests/compute/create_vm.rb b/lib/fog/vsphere/requests/compute/create_vm.rb
new file mode 100644
index 0000000..53e1ae2
--- /dev/null
+++ b/lib/fog/vsphere/requests/compute/create_vm.rb
@@ -0,0 +1,94 @@
+module Fog
+ module Compute
+ class Vsphere
+ class Real
+ def create_vm attributes = { }
+ # build up vm configuration
+
+ vm_cfg = {
+ :name => attributes[:name],
+ :guestId => attributes[:guestId] || 'otherGuest',
+ :files => { :vmPathName => '[datastore1]' },
+ :numCPUs => attributes[:cpus] || 1,
+ :memoryMB => attributes[:memory_mb] || 512,
+ :deviceChange => device_change(attributes),
+ :extraConfig => extra_config(attributes),
+ }
+ end
+
+ private
+
+ def device_change attributes
+ devices = []
+ if (nics = attributes[:interfaces])
+ devices << nics.map { |nic| create_interface(nic, nics.index(nic)) }
+ end
+
+ if (disks = attributes[:volumes])
+ devices << create_controller
+ devices << disks.map { |disk| create_disk(disk, disks.index(disk)) }
+ end
+ devices.flatten
+ end
+
+ def create_interface nic, index = 0, operation = :add
+ {
+ :operation => operation,
+ :device => nic.type.new(
+ :key => index,
+ :deviceInfo =>
+ {
+ :label => nic.name,
+ :summary => nic.summary,
+ },
+ :backing => RbVmomi::VIM.VirtualEthernetCardNetworkBackingInfo(:deviceName => nic.network),
+ :addressType => 'generated')
+ }
+ end
+
+ def create_controller operation = :add
+ {
+ :operation => operation,
+ :device => RbVmomi::VIM.VirtualLsiLogicController(
+ # not sure what exactly should we customize here
+ :key => 1000,
+ :busNumber => 0,
+ :sharedBus => :noSharing
+ )
+ }
+ end
+
+ def create_disk disk, index = 0, operation = :add
+ {
+ :operation => operation,
+ :fileOperation => :create,
+ :device => RbVmomi::VIM.VirtualDisk(
+ :key => index,
+ :backing => RbVmomi::VIM.VirtualDiskFlatVer2BackingInfo(
+ :fileName => "[#{disk.datastore}]",
+ :diskMode => disk.mode.to_sym,
+ :thinProvisioned => disk.thin
+ ),
+ :capacityInKB => disk.size
+ )
+ }
+ end
+
+ def extra_config attributes
+ [
+ {
+ :key => 'bios.bootOrder',
+ :value => 'ethernet0'
+ }
+ ]
+ end
+ end
+
+ class Mock
+ def create_vm attributes = { }
+ end
+
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/lib/fog/vsphere/requests/compute/datacenters.rb b/lib/fog/vsphere/requests/compute/datacenters.rb
deleted file mode 100644
index 6b76614..0000000
--- a/lib/fog/vsphere/requests/compute/datacenters.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-module Fog
- module Compute
- class Vsphere
- class Real
- def datacenters
- @datacenters ||= datacenters_reload
- # Hide the values which are the RbVmomi instances
- @datacenters.keys
- end
-
- private
-
- def datacenters_reload
- @rootfolder ||= @connection.rootFolder
- inventory = @rootfolder.inventory(:Datacenter => [ 'name' ])[@rootfolder]
- # Convert the inventory into a Hash of the form: We remove the
- # property selectors. { "<dc_name>" => #<RbVmomi::VIM::Datacenter> }
- # The Datacenter instance itself is at index 0 and the properties we
- # collected are at index 1.
- inventory.inject({}) do |memo, (name,dc_ary)|
- memo[name] = dc_ary[0]
- memo
- end
- end
- end
-
- class Mock
- def datacenters
- [ "Solutions", "Solutions2", "Solutions3" ]
- end
- end
- end
- end
-end
diff --git a/lib/fog/vsphere/requests/compute/get_cluster.rb b/lib/fog/vsphere/requests/compute/get_cluster.rb
new file mode 100644
index 0000000..e394bfb
--- /dev/null
+++ b/lib/fog/vsphere/requests/compute/get_cluster.rb
@@ -0,0 +1,15 @@
+module Fog
+ module Compute
+ class Ovirt
+ class Vsphere
+ def get_cluster(id)
+ end
+
+ end
+ class Mock
+ def get_cluster(id)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/requests/compute/get_datacenter.rb b/lib/fog/vsphere/requests/compute/get_datacenter.rb
new file mode 100644
index 0000000..434b102
--- /dev/null
+++ b/lib/fog/vsphere/requests/compute/get_datacenter.rb
@@ -0,0 +1,22 @@
+module Fog
+ module Compute
+ class Vsphere
+ class Real
+ def get_datacenter name
+ dc = @raw_datacenters.nil? ? get_raw_datacenter(name) : raw_datacenters.find {|d| d.name == name}
+ {:name => dc.name, :status => dc.overallStatus}
+ end
+
+ def get_raw_datacenter name
+ @connection.serviceInstance.find_datacenter(name)
+ end
+ end
+
+ class Mock
+ def get_datacenter name
+ {:name => "Solutions", :status => "grey"}
+ end
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/requests/compute/get_virtual_machine.rb b/lib/fog/vsphere/requests/compute/get_virtual_machine.rb
new file mode 100644
index 0000000..c9e46e2
--- /dev/null
+++ b/lib/fog/vsphere/requests/compute/get_virtual_machine.rb
@@ -0,0 +1,34 @@
+module Fog
+ module Compute
+ class Vsphere
+ class Real
+ def get_virtual_machine(id, dc = nil)
+ convert_vm_mob_ref_to_attr_hash(get_vm_ref(id, dc))
+ end
+
+ protected
+
+ def get_vm_ref(id, dc = nil)
+ vm = case id
+ # UUID based
+ when /[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}/
+ @connection.searchIndex.FindByUuid :uuid => id, :vmSearch => true, :instanceUuid => true, :datacenter => dc
+ else
+ # try to find based on VM name
+ if dc
+ get_datacenter(dc).find_vm(id)
+ else
+ raw_datacenters.map { |d| d.find_vm(id) }.compact.first
+ end
+ end
+ vm ? vm :raise(Fog::Compute::Vsphere::NotFound)
+ end
+ end
+
+ class Mock
+ def get_virtual_machine(id, dc = nil)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/requests/compute/list_clusters.rb b/lib/fog/vsphere/requests/compute/list_clusters.rb
new file mode 100644
index 0000000..3c9f463
--- /dev/null
+++ b/lib/fog/vsphere/requests/compute/list_clusters.rb
@@ -0,0 +1,33 @@
+module Fog
+ module Compute
+ class Vsphere
+ class Real
+ def list_clusters(filters = { })
+ datacenters = if filters[:datacenter]
+ [get_raw_datacenter(filters[:datacenter])]
+ else
+ raw_datacenters
+ end
+ clusters = []
+ datacenters.each do |dc|
+ dc.hostFolder.children.each do |cluster|
+ clusters << {
+ :id => "#{dc.name}/#{cluster.name}",
+ :name => cluster.name,
+ :numHost => cluster.summary.numHosts,
+ :numCpuCores => cluster.summary.numCpuCores,
+ :overallStatus => cluster.summary.overallStatus
+ }
+ end
+ end
+ clusters
+ end
+
+ end
+ class Mock
+ def list_clusters(filters = { })
+ end
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/requests/compute/list_datacenters.rb b/lib/fog/vsphere/requests/compute/list_datacenters.rb
new file mode 100644
index 0000000..60f2016
--- /dev/null
+++ b/lib/fog/vsphere/requests/compute/list_datacenters.rb
@@ -0,0 +1,27 @@
+module Fog
+ module Compute
+ class Vsphere
+ class Real
+
+ def list_datacenters filters = {}
+ raw_datacenters.map do |dc|
+ {:name => dc.name, :status => dc.overallStatus}
+ end
+ end
+
+ protected
+
+ def raw_datacenters
+ @raw_datacenters ||= @connection.rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter)
+ end
+
+ end
+
+ class Mock
+ def list_datacenters
+ [ {:name => "Solutions", :status => "grey"}, {:name => "Solutions2", :status => "green" }]
+ end
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb b/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb
new file mode 100644
index 0000000..e823b01
--- /dev/null
+++ b/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb
@@ -0,0 +1,52 @@
+module Fog
+ module Compute
+ class Vsphere
+ class Real
+ # => VirtualE1000(
+ #addressType: "assigned",
+ #backing: VirtualEthernetCardNetworkBackingInfo(
+ # deviceName: "VM Network",
+ # dynamicProperty: [],
+ # network: Network("network-163"),
+ # useAutoDetect: false
+ #),
+ #connectable: VirtualDeviceConnectInfo(
+ # allowGuestControl: true,
+ # connected: true,
+ # dynamicProperty: [],
+ # startConnected: true,
+ # status: "ok"
+ #),
+ #controllerKey: 100,
+ #deviceInfo: Description(
+ # dynamicProperty: [],
+ # label: "Network adapter 1",
+ # summary: "VM Network"
+ #),
+ #dynamicProperty: [],
+ #key: 4000,
+ #macAddress: "00:50:56:a9:00:28",
+ #unitNumber: 7,
+ #
+ def list_vm_interfaces(vm_id)
+ get_vm_ref(vm_id).config.hardware.device.grep(RbVmomi::VIM::VirtualEthernetCard).map do |nic|
+ {
+ :name => nic.deviceInfo.label,
+ :mac => nic.macAddress,
+ :network => nic.backing.network.name,
+ :status => nic.connectable.status,
+ :summary => nic.deviceInfo.summary,
+ :type => nic.class,
+ }
+ end
+
+ end
+
+ end
+ class Mock
+ def list_vm_interfaces(vm_id)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/requests/compute/list_vm_volumes.rb b/lib/fog/vsphere/requests/compute/list_vm_volumes.rb
new file mode 100644
index 0000000..4d7d264
--- /dev/null
+++ b/lib/fog/vsphere/requests/compute/list_vm_volumes.rb
@@ -0,0 +1,51 @@
+module Fog
+ module Compute
+ class Vsphere
+ class Real
+ # [VirtualDisk(
+ # backing: VirtualDiskFlatVer2BackingInfo(
+ # contentId: "a172d19487e878e17d6b16ff2505d7eb",
+ # datastore: Datastore("datastore-162"),
+ # diskMode: "persistent",
+ # dynamicProperty: [],
+ # fileName: "[Storage1] rhel6-mfojtik/rhel6-mfojtik.vmdk",
+ # split: false,
+ # thinProvisioned: true,
+ # uuid: "6000C29c-a47d-4cd9-5249-c371de775f06",
+ # writeThrough: false
+ # ),
+ # capacityInKB: 8388608,
+ # controllerKey: 1000,
+ # deviceInfo: Description(
+ # dynamicProperty: [],
+ # label: "Hard disk 1",
+ # summary: "8,388,608 KB"
+ # ),
+ # dynamicProperty: [],
+ # key: 2001,
+ # shares: SharesInfo( dynamicProperty: [], level: "normal", shares: 1000 ),
+ # unitNumber: 1
+ #)]
+
+ def list_vm_volumes(vm_id)
+ get_vm_ref(vm_id).disks.map do |vol|
+ {
+ :id => vol.backing.uuid,
+ :thin => vol.backing.thinProvisioned,
+ :mode => vol.backing.diskMode,
+ :filename => vol.backing.fileName,
+ :datastore => vol.backing.datastore.name,
+ :size => vol.capacityInKB,
+ :name => vol.deviceInfo.label
+ }
+ end
+ end
+
+ end
+ class Mock
+ def list_vm_volumes(vm_id)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb b/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb
index 3324e65..9b4dfc9 100644
--- a/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb
+++ b/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb
@@ -5,8 +5,7 @@ module Fog
def vm_reconfig_hardware(options = {})
raise ArgumentError, "hardware_spec is a required parameter" unless options.has_key? 'hardware_spec'
raise ArgumentError, "instance_uuid is a required parameter" unless options.has_key? 'instance_uuid'
- search_filter = { :uuid => options['instance_uuid'], 'vmSearch' => true, 'instanceUuid' => true }
- vm_mob_ref = @connection.searchIndex.FindAllByUuid(search_filter).first
+ vm_mob_ref = get_vm_by_ref(options['instance_uuid'])
task = vm_mob_ref.ReconfigVM_Task(:spec => RbVmomi::VIM.VirtualMachineConfigSpec(options['hardware_spec']))
task.wait_for_completion
{ 'task_state' => task.info.state }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment