This is a community-supported, open source project at VMware. It is built and maintained by programmers like you!
RbVmomi is a Ruby interface to the vSphere API. Like the Perl and Java SDKs, you can use it to manage ESX and vCenter servers. The current release supports the vSphere 7.0 API. RbVmomi specific documentation is online and is meant to be used alongside the official documentation.
gem install rbvmomi
A simple example of turning on a VM:
require 'rbvmomi'
vim = RbVmomi::VIM.connect(host: 'foo', user: 'bar', password: 'baz')
dc = vim.serviceInstance.find_datacenter('my_datacenter') || fail('datacenter not found')
vm = dc.find_vm('my_vm') || fail('VM not found')
vm.PowerOnVM_Task.wait_for_completion
This code uses several RbVmomi extensions to the vSphere API for concision. The expanded snippet below uses only standard API calls and should be familiar to users of the Java SDK:
require 'rbvmomi'
vim = RbVmomi::VIM.connect(host: 'foo', user: 'bar', password: 'baz')
root_folder = vim.serviceInstance.content.rootFolder
dc = root_folder.childEntity.grep(RbVmomi::VIM::Datacenter).find { |x| x.name == 'mydatacenter' } || fail('datacenter not found')
vm = dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine).find { |x| x.name == 'my_vm' } || fail('VM not found')
task = vm.PowerOnVM_Task
filter = vim.propertyCollector.CreateFilter(
spec: {
propSet: [{ type: 'Task', all: false, pathSet: ['info.state']}],
objectSet: [{ obj: task }]
},
partialUpdates: false
)
ver = ''
loop do
result = vim.propertyCollector.WaitForUpdates(version: ver)
ver = result.version
break if ['success', 'error'].member?(task.info.state)
end
filter.DestroyPropertyFilter
raise(task.info.error) if task.info.state == 'error'
As you can see, the extensions RbVmomi adds can dramatically decrease the code needed to perform simple tasks while still letting you use the full power of the API when necessary. RbVmomi extensions are often more efficient than a naive implementation; for example, the find_vm method on VIM::Datacenter used in the first example uses the SearchIndex for fast lookups.
A few important points:
OpenSSL::SSL::SSLError
"certificate verify
failed". You can work around this by using the :insecure
option to
RbVmomi::VIM.connect
.Built-in extensions are under lib/rbvmomi/vim/
. You are encouraged to reopen
VIM classes in your applications and add extensions of your own. If you write
something generally useful please open a pull request so it can be merged back in
Open an issue on the issues page or fork the project on GitHub and send a pull request.
You can chat on Gitter or join the VMware {code} Slack team and join the #rbvmomi channel.