VMware propose depuis longtemps maintenant, les SDK Java et Perl pour l'API de VMware vSphere. Rich Lane a développé un SDK Ruby pour interagir avec l'API de VMware vSphere 4.1 !
RbVmomi est une interface Ruby pour l'API vSphere. Comme les SDK Perl ou Java, ce SDK Ruby peut être utilisé pour piloter des serveurs ESXi et des serveurs VirtualCenters.
La gem Ruby correspondant à ce SDK pour VMware s'appelle RbVmomi. Pour l'installer dans son système de développement Ruby, cette commande suffit:
gem install rbvmomiPassons à un exemple simple d'utilisation, la mise en marche d'une VM dans un datacenter :
require 'rbvmomi'
vim = RbVmomi::VIM.connect host: 'foo', user: 'bar', password: 'baz'
dc = vim.serviceInstance.find_datacenter("mydatacenter") or fail "datacenter not found"
vm = dc.find_vm("myvm") or fail "VM not found"
vm.PowerOnVM_Task.wait_for_completion
Un exemple de clonage de VM :
#!/usr/bin/env ruby
require 'trollop'
require 'rbvmomi'
require 'rbvmomi/trollop'
VIM = RbVmomi::VIM
opts = Trollop.options do
banner <<-EOS
Clone a VM.
Usage:
clone_vm.rb [options]
VIM connection options:
EOS
rbvmomi_connection_opts
text <<-EOS
VM location options:
EOS
rbvmomi_datacenter_opt
text <<-EOS
Other options:
EOS
end
Trollop.die("must specify host") unless opts[:host]
ARGV.size == 2 or abort "must specify VM source name and VM target name"
vm_source = ARGV[0]
vm_target = ARGV[1]
vim = VIM.connect opts
dc = vim.serviceInstance.find_datacenter(opts[:datacenter]) or abort "datacenter not found"
vm = dc.find_vm(vm_source) or abort "VM not found"
spec = VIM.VirtualMachineCloneSpec(:location => VIM.VirtualMachineRelocateSpec,
:powerOn => false,
:template => false)
vm.CloneVM_Task(:folder => vm.parent, :name => vm_target, :spec => spec).wait_for_completion
Note : comme l'indique son auteur, ce projet est un projet développé par un employé de VMware et non officiellement supporté par VMware !
Vous pouvez trouver des informations complémentaires, des exemples de code, dans le dépôt GitHUB de l'auteur.