Ruby API pour VMware

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 rbvmomi
Passons à 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.