lib/rbvmomi/vim/VirtualMachine.rb in rbvmomi-1.5.1 vs lib/rbvmomi/vim/VirtualMachine.rb in rbvmomi-1.6.0
- old
+ new
@@ -8,6 +8,52 @@
# Retrieve all virtual disk devices.
# @return [Array] Array of virtual disk devices.
def disks
self.config.hardware.device.grep(RbVmomi::VIM::VirtualDisk)
end
+
+ # Get the IP of the guest, but only if it is not stale
+ # @return [String] Current IP reported (as per VMware Tools) or nil
+ def guest_ip
+ g = self.guest
+ if g.ipAddress && (g.toolsStatus == "toolsOk" || g.toolsStatus == "toolsOld")
+ g.ipAddress
+ else
+ nil
+ end
+ end
+
+ # Add a layer of delta disks (redo logs) in front of every disk on the VM.
+ # This is similar to taking a snapshot and makes the VM a valid target for
+ # creating a linked clone.
+ #
+ # Background: The API for linked clones is quite strange. We can't create
+ # a linked straight from any VM. The disks of the VM for which we can create a
+ # linked clone need to be read-only and thus VC demands that the VM we
+ # are cloning from uses delta-disks. Only then it will allow us to
+ # share the base disk.
+ def add_delta_disk_layer_on_all_disks
+ devices, = self.collect 'config.hardware.device'
+ disks = devices.grep(RbVmomi::VIM::VirtualDisk)
+ # XXX: Should create a single reconfig spec instead of one per disk
+ disks.each do |disk|
+ spec = {
+ :deviceChange => [
+ {
+ :operation => :remove,
+ :device => disk
+ },
+ {
+ :operation => :add,
+ :fileOperation => :create,
+ :device => disk.dup.tap { |x|
+ x.backing = x.backing.dup
+ x.backing.fileName = "[#{disk.backing.datastore.name}]"
+ x.backing.parent = disk.backing
+ },
+ }
+ ]
+ }
+ self.ReconfigVM_Task(:spec => spec).wait_for_completion
+ end
+ end
end