Skip to content

Instantly share code, notes, and snippets.

@xtoddx
Created June 16, 2011 01:42
Show Gist options
  • Save xtoddx/1028522 to your computer and use it in GitHub Desktop.
Save xtoddx/1028522 to your computer and use it in GitHub Desktop.
Using fog with Rackspace apis to control OpenStack.
#!/usr/bin/ruby
$: << 'fog/lib'
require 'fog'
# Get your api key / token `keystone-mange token list`
compute = Fog::Compute.new(:provider => 'Rackspace',
:rackspace_auth_token => '887665443383838',
:rackspace_management_url => 'http://127.0.0.1:8774/v1.0/',
:rackspace_username => 'joeuser',
:rackspace_api_key => 'FAKE-BUT-REQUIRED',
:rackspace_auth_url => 'FAKE AND NOT REQUIRED')
flavors = compute.flavors
smallest_flavor = flavors.sort_by(&:ram).first
puts "Found #{flavors.length} flavors"
puts flavors.collect{|x| "> #{x.name}"}.join("\n")
puts "Smallest flavor has #{smallest_flavor.ram} RAM " +
"and #{smallest_flavor.disk} disk"
puts ""
images = compute.images
first_ami = images.detect{|x| x.name =~ /^ami-/}
puts "Found #{images.length} images"
puts images.collect{|x| "> #{x.name}"}.join("\n")
puts "Using AMI-type image #{first_ami.name}"
puts ""
servers = compute.servers
puts "Found #{servers.length} servers"
puts servers.collect{|x| "> #{x.name}"}.join("\n")
server = compute.servers.create(:flavor_id => smallest_flavor.id,
:image_id => first_ami.id,
:name => 'Demo-Server')
puts "Sleeping to let server get scheduled"
sleep(4)
servers = compute.servers
puts "Found #{servers.length} servers"
puts servers.collect{|x| "> #{x.name}"}.join("\n")
server.wait_for{ ready? }
if server.ready?
puts "Server became ready."
else
puts "It looks like the server never became ready :("
end
puts "Cleaning up"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment