Deltacloud Client (Ruby)

The Deltacloud project includes a Ruby client. Other language-bindings are possible and will be supported soon. The client aims to insulate users from having to deal with HTTP and REST directly.

Each resource type has an associated model to ease usage. Where resource reference other resources, natural navigation across the object model is possible.

For example

puts instance.image.name
puts instance.hardware_profile.architecture

Basics

To use the client, you must require deltacloud.

require 'deltacloud'

Connecting to a Deltacloud provider

require 'deltacloud'

api_url      = 'http://localhost:3001/api'
api_name     = 'mockuser'
api_password = 'mockpassword'

client = DeltaCloud.new( api_name, api_password, api_url )

# work with client here

In addition to creating a client, operations may occur within a block included on the initialization

DeltaCloud.new( api_name, api_password, api_url ) do |client|
  # work with client here
end

In the event of a failure, any underlying HTTP transport exceptions will be thrown all the way out to the caller.

Listing realms

You may retrieve a complete list of realms available to you

realms = client.realms

You may retrieve a specific realm by its identifier

realm = client.realm( 'us' )

Listing hardware profiles

You may retrieve a complete list of hardware profiles available for launching machines

hwp = client.hardware_profiles

You may filter hardware profiles by architecture

flavors = client.hardware_profiles( :architecture=>'x86_64' )

You may retrieve a specific hardware profile by its identifier

flavor = client.hardware_profile( 'm1-small' )

Listing images

You may retrieve a complete list of images

images = client.images

You may retrieve a list of images owned by the currently authenticated user

images = client.images( :owner_id=>:self )

You may retrieve a list of images visible to you but owned by a specific user

images = client.images( :owner_id=>'daryll' )

You may retrieve a specific image by its identifier

image = client.image( 'ami-8675309' )

Listing instances

You may retrieve a list of all instances visible to you

instances = client.instances

You may retrieve a specific instance by its identifier

instance = client.instance( 'i-90125' )

Launching instances

An instance may be launched using just an image identifier

image = client.image( 'ami-8675309' )
instance = client.create_instance( image.id )

Optionally, a flavor or realm may be specified

instance = client.create_instance( image.id, :flavor=>'m1-small', :realm=>'us' )

Manipulating instances

Given an instance, depending on its state, various actions may be available.

To determine what’s available, the instance#actions method may be used.

instance.actions # [ 'reboot', 'stop' ]

For a valid action, the method matching the action with an exclamation point may be called.

instance.reboot!

Upon invoking an action, the instance will refresh its contents, in case the state has changed. To determine later if the state has changed again, the instance must be refetched using the client.instance(...) method.