ESX

Simple rbvmomi wrapper to manage VMWare ESX hosts.

The goal of the library is to keep things simple so vCenter support isn't planned.

If you want a full VMWare vSphere API ruby implementation have a look at https://github.com/rlane/rbvmomi

Installation

Ubuntu/Debian

apt-get install libxml2-dev libxslt-dev gcc make rubygems gem install esx

RHEL/Fedora

yum install libxml2-devel libxslt-devel make gcc rubygems gem install esx

MacOSX

gem install esx

Usage

Usage: esx --help

Available Commands

esx info --user root --password foo 10.10.0.2

Sample output:

*********
ESXHOST1
*********
Memory Size:      32756
Memory Usage:     7429
Cpu Cores:        8
Power State:      poweredOn
Hosted VMs:       2
Running VMs:      1

Virtual Machines:
+-------------------------+--------+------+------+-------+------------+
| NAME                    | MEMORY | CPUS | NICS | DISKS | STATE      |
+-------------------------+--------+------+------+-------+------------+
| foobar                  | 128    | 1    | 1    | 1     | poweredOn  |
| foobar2                 | 256    | 2    | 1    | 1     | poweredOff |
+-------------------------+--------+------+------+-------+------------+

Datastores:
+------------+--------------+--------------+-----------+------+---------------------------------------------------+
| NAME       | CAPACITY     | FREESPACE    | ACCESIBLE | TYPE | URL                                               |
+------------+--------------+--------------+-----------+------+---------------------------------------------------+
| datastore2 | 146565758976 | 145547591680 | VMFS      | true | /vmfs/volumes/4e611c69-16474ca5-d290-5ef3fc9a99c3 |
| datastore1 | 141465485312 | 20716716032  | VMFS      | true | /vmfs/volumes/4e6117e7-35c82a3e-ba79-5cf3fc9699c2 |
+------------+--------------+--------------+-----------+------+---------------------------------------------------+

esx create-vm --user root --password foo --name esx-maintux --disk-file /path/to/file.vmdk --datastore datastore1 --memory 2048 --poweron 10.10.0.2

Using the library

require 'rubygems'
require 'lib/esx.rb'


# Connect to the ESX Host
host = ESX::Host.connect 'my-esx-host', 'root', 'secret'

# Print hypervisor info
puts
name = host.name.upcase
puts "*" * name.size
puts name
puts "*" * name.size
puts "Memory Size:      %s" % host.memory_size.bytes.to.megabytes.to_i
puts "Memory Usage:     %s" % host.memory_usage.bytes.to.megabytes.to_i
puts "Cpu Cores:        %s" % host.cpu_cores
puts "Power State:      %s" % host.power_state

# Create a VM with 4GB disk, 128 MB mem, e1000 nic, 1CPU in datastore1
vm = host.create_vm :vm_name => 'foobar'

# Create a VM with 5GB disk, 256 MB mem, e1000 nic, 1CPU in datastore2
vm = host.create_vm :vm_name => 'foobar2', :disk_size => 5000, :cpus => 2, :memory => 256, :datastore => 'datastore2'


host.virtual_machines.each do |vm|

  # PowerOff the VM if powered On
  vm.power_off if (vm.name =~ /foobar/ and vm.power_state == 'poweredOn')

  # Destroy the VM if name matches foobar
  if vm.name =~ /foobar.*/
    vm.destroy
  end

end

Testing

Run 'bundler install' to install required deps.

Run rspec from the base dir. By default, the tests try to connect to an ESX host named esx-test-host with user root and no password. Edit spec/spec_helper.rb to fit your needs.

Copyright

Copyright (c) 2011 Sergio Rubio, Massimo Maino. See LICENSE.txt for further details.