require 'aviator' openstack = Aviator::Session.new( :config_file => 'path/to/aviator.yml', :environment => :production ) openstack.authenticate response = openstack.request :identity_service, :list_tenants puts response[:body]
It can handle Keystone v2 and v3 authentication data but there is no guarantee that all OpenStack API endpoints are supported. You will likely need to write some of the request files yourself.
To know which requests are available, you may use the built-in
CLI tool describe
:
$ aviator describe openstack Available services for openstack: compute identity image metering volume $ aviator describe openstack compute Available requests for openstack compute_service: v2 admin confirm_server_resize v2 admin get_host_details v2 admin list_hosts v2 admin resize_server v2 admin revert_server_resize v2 public change_admin_password v2 public create_image v2 public create_server ... $ aviator describe openstack compute v2 public create_server Request: create_server Parameters: +-------------+----------+-------------+ | NAME | REQUIRED | ALIAS | +-------------+----------+-------------+ | accessIPv4 | N | access_ipv4 | | accessIPv6 | N | access_ipv6 | | adminPass | N | admin_pass | | flavorRef | Y | flavor_ref | | imageRef | Y | image_ref | | metadata | N | | | name | Y | | | networks | N | | | personality | N | | +-------------+----------+-------------+ Sample Code: session.request(:compute_service, :create_server) do |params| params.access_ipv4 = value params.access_ipv6 = value params.admin_pass = value params.metadata = value params.networks = value params.personality = value params.image_ref = value params.flavor_ref = value params.name = value end Links: documentation: http://docs.openstack.org/api/openstack-compute/2/content/CreateServers.html
If you need to write request files, the DSL is simple enough
to learn and you can start writing your own in 5~10 minutes.
As an example, here is the request file for the create_server
request mentioned above:
module Aviator define_request :create_server, :inherit => [:openstack, :common, :v2, :public, :base] do meta :service, :compute link 'documentation', 'http://docs.openstack.org/api/openstack-compute/2/content/CreateServers.html' param :accessIPv4, :required => false, :alias => :access_ipv4 param :accessIPv6, :required => false, :alias => :access_ipv6 param :adminPass, :required => false, :alias => :admin_pass param :imageRef, :required => true, :alias => :image_ref param :flavorRef, :required => true, :alias => :flavor_ref param :metadata, :required => false param :name, :required => true param :networks, :required => false param :personality, :required => false def body p = { :server => { :flavorRef => params[:flavorRef], :imageRef => params[:imageRef], :name => params[:name] } } [:adminPass, :metadata, :personality, :networks, :accessIPv4, :accessIPv6].each do |key| p[:server][key] = params[key] if params[key] end p end def headers super end def http_method :post end def url "#{ base_url }/servers" end end end
Browse the rest of the request files here.
Installation
Add this line to your application's Gemfile:
gem 'aviator'
Or if you want to live on the edge:
gem 'aviator', :git => 'git@github.com:aviator/aviator.git', :branch => 'master'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install aviator
API documentation
It's is still a work in progress but I've made sure to cover the important ones:
Need Some Samples?
Check out the demo project for a quick sampling of how you can use Aviator.
Other Links
- The code at Github
- Bug tracker
- Aviator Puppet module (maintained by Aimon Bustardo)
- Aviator::SessionPool
- Wiki
- The code for this website
Project Stats
Absolutely Zero Warranty of Any Kind
This library is released under the MIT license, so have at it as you wish as long as it is within the boundaries of said license. If you have any questions, feel free to file it here. I don't make response time guarantees. This is a hobby project for me nowadays and I will work on it when I have time. Having said that, I usually find time near the weekend.