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.