mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
first pass at slicehost support (methods for querying existing stuff)
This commit is contained in:
parent
cc1e573bdb
commit
f77cd66ea6
16 changed files with 415 additions and 11 deletions
11
Rakefile
11
Rakefile
|
@ -105,12 +105,11 @@ namespace :fog do
|
|||
yml = <<YML
|
||||
|
||||
:default:
|
||||
:aws:
|
||||
:aws_access_key_id: INTENTIONALLY_LEFT_BLANK
|
||||
:aws_secret_access_key: INTENTIONALLY_LEFT_BLANK
|
||||
:rackspace:
|
||||
:rackspace_api_key: INTENTIONALLY_LEFT_BLANK
|
||||
:rackspace_username: INTENTIONALLY_LEFT_BLANK
|
||||
:aws_access_key_id: INTENTIONALLY_LEFT_BLANK
|
||||
:aws_secret_access_key: INTENTIONALLY_LEFT_BLANK
|
||||
:rackspace_api_key: INTENTIONALLY_LEFT_BLANK
|
||||
:rackspace_username: INTENTIONALLY_LEFT_BLANK
|
||||
:slicehost_password: INTENTIONALLY_LEFT_BLANK
|
||||
|
||||
YML
|
||||
print(yml)
|
||||
|
|
|
@ -35,6 +35,7 @@ module Fog
|
|||
|
||||
load "fog/aws.rb"
|
||||
load "fog/rackspace.rb"
|
||||
load "fog/slicehost.rb"
|
||||
end
|
||||
|
||||
def self.credentials(path = File.expand_path('~/.fog'))
|
||||
|
|
53
lib/fog/slicehost.rb
Normal file
53
lib/fog/slicehost.rb
Normal file
|
@ -0,0 +1,53 @@
|
|||
module Fog
|
||||
class Slicehost
|
||||
|
||||
if Fog.mocking?
|
||||
def self.data
|
||||
@data
|
||||
end
|
||||
def self.reset_data
|
||||
@data = {}
|
||||
end
|
||||
end
|
||||
|
||||
def self.reload
|
||||
load "fog/slicehost/parsers/get_backups.rb"
|
||||
load "fog/slicehost/parsers/get_flavors.rb"
|
||||
load "fog/slicehost/parsers/get_images.rb"
|
||||
load "fog/slicehost/parsers/get_slices.rb"
|
||||
|
||||
load "fog/slicehost/requests/get_backups.rb"
|
||||
load "fog/slicehost/requests/get_flavors.rb"
|
||||
load "fog/slicehost/requests/get_images.rb"
|
||||
load "fog/slicehost/requests/get_slices.rb"
|
||||
|
||||
if Fog.mocking?
|
||||
reset_data
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(options={})
|
||||
@password = options[:password]
|
||||
@host = options[:host] || "api.slicehost.com"
|
||||
@port = options[:port] || 443
|
||||
@scheme = options[:scheme] || 'https'
|
||||
@connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
|
||||
end
|
||||
|
||||
def request(params)
|
||||
response = @connection.request({
|
||||
:body => params[:body],
|
||||
:expects => params[:expects],
|
||||
:headers => { 'Authorization' => "Basic #{Base64.encode64(@password).gsub("\n",'')}"},
|
||||
:host => @host,
|
||||
:method => params[:method],
|
||||
:parser => params[:parser],
|
||||
:path => params[:path]
|
||||
})
|
||||
response
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
Fog::Slicehost.reload
|
30
lib/fog/slicehost/parsers/get_backups.rb
Normal file
30
lib/fog/slicehost/parsers/get_backups.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module Slicehost
|
||||
|
||||
class GetBackups < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@backup = {}
|
||||
@response = { 'backups' => [] }
|
||||
end
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'backup'
|
||||
@response['backups'] << @backup
|
||||
@backup = {}
|
||||
when 'date'
|
||||
@backup[name] = Time.parse(@value)
|
||||
when 'id', 'slice_id'
|
||||
@backup[name] = @value.to_i
|
||||
when 'name'
|
||||
@backup[name] = @value
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
28
lib/fog/slicehost/parsers/get_flavors.rb
Normal file
28
lib/fog/slicehost/parsers/get_flavors.rb
Normal file
|
@ -0,0 +1,28 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module Slicehost
|
||||
|
||||
class GetFlavors < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@flavor = {}
|
||||
@response = { 'flavors' => [] }
|
||||
end
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'flavor'
|
||||
@response['flavors'] << @flavor
|
||||
@flavor = {}
|
||||
when 'id', 'price', 'ram'
|
||||
@flavor[name] = @value.to_i
|
||||
when 'name'
|
||||
@flavor[name] = @value
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
28
lib/fog/slicehost/parsers/get_images.rb
Normal file
28
lib/fog/slicehost/parsers/get_images.rb
Normal file
|
@ -0,0 +1,28 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module Slicehost
|
||||
|
||||
class GetImages < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@image = {}
|
||||
@response = { 'images' => [] }
|
||||
end
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'id'
|
||||
@image[name] = @value.to_i
|
||||
when 'image'
|
||||
@response['images'] << @image
|
||||
@image = {}
|
||||
when 'name'
|
||||
@image[name] = @value
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
31
lib/fog/slicehost/parsers/get_slices.rb
Normal file
31
lib/fog/slicehost/parsers/get_slices.rb
Normal file
|
@ -0,0 +1,31 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module Slicehost
|
||||
|
||||
class GetSlices < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@slice = {}
|
||||
@response = { 'slices' => [] }
|
||||
end
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'address'
|
||||
@slice['addresses'] ||= []
|
||||
@slice['addresses'] << @value
|
||||
when 'backup_id', 'bw_in', 'bw_out', 'flavor_id', 'id', 'image_id', 'progress'
|
||||
@slice[name] = @value.to_i
|
||||
when 'name', 'status'
|
||||
@slice[name] = @value
|
||||
when 'slice'
|
||||
@response['slices'] << @slice
|
||||
@slice = {}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
38
lib/fog/slicehost/requests/get_backups.rb
Normal file
38
lib/fog/slicehost/requests/get_backups.rb
Normal file
|
@ -0,0 +1,38 @@
|
|||
unless Fog.mocking?
|
||||
|
||||
module Fog
|
||||
class Slicehost
|
||||
|
||||
# Get list of backups
|
||||
#
|
||||
# ==== Returns
|
||||
# * response<~Excon::Response>:
|
||||
# * body<~Array>:
|
||||
# * 'date'<~Time> - Timestamp of backup creation
|
||||
# * 'id'<~Integer> - Id of the backup
|
||||
# * 'name'<~String> - Name of the backup
|
||||
# * 'slice_id'<~Integer> - Id of slice the backup was made from
|
||||
def get_backups
|
||||
request(
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:parser => Fog::Parsers::Slicehost::GetBackups.new,
|
||||
:path => 'backups.xml'
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
module Fog
|
||||
class Slicehost
|
||||
|
||||
def get_backups
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
38
lib/fog/slicehost/requests/get_flavors.rb
Normal file
38
lib/fog/slicehost/requests/get_flavors.rb
Normal file
|
@ -0,0 +1,38 @@
|
|||
unless Fog.mocking?
|
||||
|
||||
module Fog
|
||||
class Slicehost
|
||||
|
||||
# Get list of flavors
|
||||
#
|
||||
# ==== Returns
|
||||
# * response<~Excon::Response>:
|
||||
# * body<~Array>:
|
||||
# * 'id'<~Integer> - Id of the flavor
|
||||
# * 'name'<~String> - Name of the flavor
|
||||
# * 'price'<~Integer> - Price in cents
|
||||
# * 'ram'<~Integer> - Amount of ram for the flavor
|
||||
def get_flavors
|
||||
request(
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:parser => Fog::Parsers::Slicehost::GetFlavors.new,
|
||||
:path => 'flavors.xml'
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
module Fog
|
||||
class Slicehost
|
||||
|
||||
def get_flavors
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
36
lib/fog/slicehost/requests/get_images.rb
Normal file
36
lib/fog/slicehost/requests/get_images.rb
Normal file
|
@ -0,0 +1,36 @@
|
|||
unless Fog.mocking?
|
||||
|
||||
module Fog
|
||||
class Slicehost
|
||||
|
||||
# Get list of images
|
||||
#
|
||||
# ==== Returns
|
||||
# * response<~Excon::Response>:
|
||||
# * body<~Array>:
|
||||
# * 'id'<~Integer> - Id of the image
|
||||
# * 'name'<~String> - Name of the image
|
||||
def get_images
|
||||
request(
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:parser => Fog::Parsers::Slicehost::GetImages.new,
|
||||
:path => 'images.xml'
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
module Fog
|
||||
class Slicehost
|
||||
|
||||
def get_images
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
44
lib/fog/slicehost/requests/get_slices.rb
Normal file
44
lib/fog/slicehost/requests/get_slices.rb
Normal file
|
@ -0,0 +1,44 @@
|
|||
unless Fog.mocking?
|
||||
|
||||
module Fog
|
||||
class Slicehost
|
||||
|
||||
# Get list of slices
|
||||
#
|
||||
# ==== Returns
|
||||
# * response<~Excon::Response>:
|
||||
# * body<~Array>:
|
||||
# * 'addresses'<~Array> - Ip addresses for the slice
|
||||
# * 'backup_id'<~Integer> - Id of backup slice was booted from
|
||||
# * 'bw_in'<~Integer> - Incoming bandwidth total for current billing cycle, in Gigabytes
|
||||
# * 'bw_out'<~Integer> - Outgoing bandwidth total for current billing cycle, in Gigabytes
|
||||
# * 'flavor_id'<~Integer> - Id of flavor slice was booted from
|
||||
# * 'id'<~Integer> - Id of the slice
|
||||
# * 'image_id'<~Integer> - Id of image slice was booted from
|
||||
# * 'name'<~String> - Name of the slice
|
||||
# * 'progress'<~Integer> - Progress of current action, in percentage
|
||||
# * 'status'<~String> - Current status of the slice
|
||||
def get_slices
|
||||
request(
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:parser => Fog::Parsers::Slicehost::GetSlices.new,
|
||||
:path => 'slices.xml'
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
module Fog
|
||||
class Slicehost
|
||||
|
||||
def get_slices
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
17
spec/slicehost/requests/get_backups_spec.rb
Normal file
17
spec/slicehost/requests/get_backups_spec.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
require File.dirname(__FILE__) + '/../../spec_helper'
|
||||
|
||||
describe 'Slicehost.get_backups' do
|
||||
describe 'success' do
|
||||
|
||||
it "should return proper attributes" do
|
||||
actual = slicehost.get_backups.body
|
||||
actual['backups'].should be_an(Array)
|
||||
backup = actual['backups'].first
|
||||
# backup['date'].should be_a(String)
|
||||
# backup['id'].should be_an(Integer)
|
||||
# backup['name'].should be_an(String)
|
||||
# backup['slice_id'].should be_an(Integer)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
17
spec/slicehost/requests/get_flavors_spec.rb
Normal file
17
spec/slicehost/requests/get_flavors_spec.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
require File.dirname(__FILE__) + '/../../spec_helper'
|
||||
|
||||
describe 'Slicehost.get_flavors' do
|
||||
describe 'success' do
|
||||
|
||||
it "should return proper attributes" do
|
||||
actual = slicehost.get_flavors.body
|
||||
actual['flavors'].should be_an(Array)
|
||||
flavor = actual['flavors'].first
|
||||
flavor['id'].should be_an(Integer)
|
||||
flavor['name'].should be_an(String)
|
||||
flavor['price'].should be_a(Integer)
|
||||
flavor['ram'].should be_an(Integer)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
15
spec/slicehost/requests/get_images_spec.rb
Normal file
15
spec/slicehost/requests/get_images_spec.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
require File.dirname(__FILE__) + '/../../spec_helper'
|
||||
|
||||
describe 'Slicehost.get_images' do
|
||||
describe 'success' do
|
||||
|
||||
it "should return proper attributes" do
|
||||
actual = slicehost.get_images.body
|
||||
actual['images'].should be_an(Array)
|
||||
image = actual['images'].first
|
||||
image['id'].should be_an(Integer)
|
||||
image['name'].should be_a(String)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
23
spec/slicehost/requests/get_slices_spec.rb
Normal file
23
spec/slicehost/requests/get_slices_spec.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
require File.dirname(__FILE__) + '/../../spec_helper'
|
||||
|
||||
describe 'Slicehost.get_slices' do
|
||||
describe 'success' do
|
||||
|
||||
it "should return proper attributes" do
|
||||
actual = slicehost.get_slices.body
|
||||
actual['slices'].should be_an(Array)
|
||||
slice = actual['slices'].first
|
||||
# slice['addresses'].should be_a(Array)
|
||||
# slice['backup_id'].should be_an(Integer)
|
||||
# slice['bw_in'].should be_an(Integer)
|
||||
# slice['bw_out'].should be_an(Integer)
|
||||
# slice['flavor_id'].should be_an(Integer)
|
||||
# slice['id'].should be_an(Integer)
|
||||
# slice['image_id'].should be_an(Integer)
|
||||
# slice['name'].should be_an(String)
|
||||
# slice['progress'].should be_an(Integer)
|
||||
# slice['status'].should be_an(String)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
|
@ -3,7 +3,7 @@ require 'open-uri'
|
|||
|
||||
current_directory = File.dirname(__FILE__)
|
||||
require "#{current_directory}/../lib/fog"
|
||||
Fog.mock!
|
||||
# Fog.mock!
|
||||
|
||||
def ec2
|
||||
Fog::AWS::EC2.new(
|
||||
|
@ -34,6 +34,13 @@ def sdb
|
|||
)
|
||||
end
|
||||
|
||||
def s3
|
||||
Fog::AWS::S3.new(
|
||||
:aws_access_key_id => Fog.credentials[:aws_access_key_id],
|
||||
:aws_secret_access_key => Fog.credentials[:aws_secret_access_key]
|
||||
)
|
||||
end
|
||||
|
||||
def servers
|
||||
Fog::Rackspace::Servers.new(
|
||||
:rackspace_api_key => Fog.credentials[:rackspace_api_key],
|
||||
|
@ -41,10 +48,9 @@ def servers
|
|||
)
|
||||
end
|
||||
|
||||
def s3
|
||||
Fog::AWS::S3.new(
|
||||
:aws_access_key_id => Fog.credentials[:aws_access_key_id],
|
||||
:aws_secret_access_key => Fog.credentials[:aws_secret_access_key]
|
||||
def slicehost
|
||||
Fog::Slicehost.new(
|
||||
:password => Fog.credentials[:slicehost_password]
|
||||
)
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue