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