# 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.