rackspace fixes, create/delete server

This commit is contained in:
Wesley Beary 2009-10-13 22:36:35 -07:00
parent 337148709d
commit 617d53dd23
15 changed files with 226 additions and 16 deletions

View File

@ -0,0 +1,84 @@
unless Fog.mocking?
module Fog
module Rackspace
class Servers
# Create a new server
#
# ==== Parameters
# * flavor_id<~Integer> - Id of flavor for server
# * image_id<~Integer> - Id of image for server
# * name<~String> - Name of server
# * options<~Hash>:
# * 'metadata'<~Hash> - Up to 5 key value pairs containing 255 bytes of info
# * 'name'<~String> - Name of server, defaults to "slice#{id}"
# * 'personality'<~Array>: Up to 5 files to customize server
# * file<~Hash>:
# * 'contents'<~String> - Contents of file (10kb total of contents)
# * 'path'<~String> - Path to file (255 bytes total of path strings)
#
# ==== Returns
# * response<~Fog::AWS::Response>:
# * body<~Hash>:
# * 'servers'<~Hash>:
# * 'adminPass'<~String> - Admin password for server
# * 'id'<~Integer> - Id of server
# * 'name<~String> - Name of server
# * 'imageId'<~Integer> - Id of image used to boot server
# * 'flavorId'<~Integer> - Id of servers current flavor
# * 'hostId'<~String>
# * 'status'<~String> - Current server status
# * 'progress'<~Integer> - Progress through current status
# * 'addresses'<~Hash>:
# * 'public'<~Array> - public address strings
# * 'private'<~Array> - private address strings
# * 'metadata'<~Hash> - metadata
def create_server(flavor_id, image_id, options = {})
data = {
'server' => {
'flavorId' => flavor_id,
'imageId' => image_id
}
}
if options['metadata']
data['server']['metadata'] = options['metadata']
end
if options['name']
data['server']['name'] = options['name']
end
if options['personality']
data['server']['personality'] = []
for file in options['personality']
data['server']['personality'] << {
'contents' => Base64.encode64(file['contents']),
'path' => file['path']
}
end
end
request(
:body => data.to_json,
:expects => 202,
:method => 'POST',
:path => 'servers.json'
)
end
end
end
end
else
module Fog
module Rackspace
class Servers
def create_server
end
end
end
end
end

View File

@ -0,0 +1,37 @@
unless Fog.mocking?
module Fog
module Rackspace
class Servers
# Delete an existing server
#
# ==== Parameters
# * id<~Integer> - Id of server to delete
#
def delete_server(id)
request(
:expects => 202,
:method => 'DELETE',
:path => "servers/#{id}"
)
end
end
end
end
else
module Fog
module Rackspace
class Servers
def delete_server
end
end
end
end
end

View File

@ -15,8 +15,9 @@ unless Fog.mocking?
# * 'disk'<~Integer> - Amount of diskspace for the flavor
def get_flavors
request(
:method => 'GET',
:path => 'flavors'
:expects => 200,
:method => 'GET',
:path => 'flavors.json'
)
end

View File

@ -16,8 +16,9 @@ unless Fog.mocking?
# * 'status'<~String> - Status of image
def get_images
request(
:method => 'GET',
:path => 'images'
:expects => 200,
:method => 'GET',
:path => 'images.json'
)
end

View File

@ -12,19 +12,11 @@ unless Fog.mocking?
# * 'servers'<~Array>:
# * 'id'<~Integer> - Id of server
# * 'name<~String> - Name of server
# * 'imageId'<~Integer> - Id of image used to boot server
# * 'flavorId'<~Integer> - Id of servers current flavor
# * 'hostId'<~String>
# * 'status'<~String> - Current server status
# * 'progress'<~Integer> - Progress through current status
# * 'addresses'<~Hash>:
# * 'public'<~Array> - public address strings
# * 'private'<~Array> - private address strings
# * 'metadata'<~Hash> - metadata
def get_servers
request(
:method => 'GET',
:path => 'servers'
:expects => 200,
:method => 'GET',
:path => 'servers.json'
)
end

View File

@ -0,0 +1,49 @@
unless Fog.mocking?
module Fog
module Rackspace
class Servers
# List all servers (IDs and names only)
#
# ==== Returns
# * response<~Fog::AWS::Response>:
# * body<~Hash>:
# * 'servers'<~Array>:
# * 'id'<~Integer> - Id of server
# * 'name<~String> - Name of server
# * 'imageId'<~Integer> - Id of image used to boot server
# * 'flavorId'<~Integer> - Id of servers current flavor
# * 'hostId'<~String>
# * 'status'<~String> - Current server status
# * 'progress'<~Integer> - Progress through current status
# * 'addresses'<~Hash>:
# * 'public'<~Array> - public address strings
# * 'private'<~Array> - private address strings
# * 'metadata'<~Hash> - metadata
def get_servers_details
request(
:expects => 200,
:method => 'GET',
:path => 'servers/detail.json'
)
end
end
end
end
else
module Fog
module Rackspace
class Servers
def get_servers_details
end
end
end
end
end

View File

@ -3,9 +3,12 @@ module Fog
class Servers
def self.reload
load "fog/rackspace/requests/servers/create_server.rb"
load "fog/rackspace/requests/servers/delete_server.rb"
load "fog/rackspace/requests/servers/get_flavors.rb"
load "fog/rackspace/requests/servers/get_images.rb"
load "fog/rackspace/requests/servers/get_servers.rb"
load "fog/rackspace/requests/servers/get_servers_details.rb"
end
def initialize(options={})
@ -30,7 +33,7 @@ module Fog
:method => params[:method],
:path => "#{@path}/#{params[:path]}"
})
unless response.status == 204
unless response.body.empty?
response.body = JSON.parse(response.body)
end
response

View File

@ -0,0 +1,21 @@
require File.dirname(__FILE__) + '/../../../spec_helper'
describe 'Rackspace::Servers.create_server' do
describe 'success' do
it "should return proper attributes" do
# flavor 1 = 256
# image 3 = gentoo 2008.0
data = servers.create_server(1, 3)
p data
while true do
sleep(1)
details = servers.get_servers_details.body
p details['servers'].first['progress']
break if details['servers'].first['status'] == 'ACTIVE'
end
servers.delete_server(data.body['server']['id'])
end
end
end

View File

@ -0,0 +1,11 @@
require File.dirname(__FILE__) + '/../../../spec_helper'
describe 'Rackspace::Servers.delete_server' do
describe 'success' do
it "should return proper attributes" do
p servers.delete_server(id)
end
end
end

View File

@ -0,0 +1,11 @@
require File.dirname(__FILE__) + '/../../../spec_helper'
describe 'Rackspace::Servers.get_servers_details' do
describe 'success' do
it "should return proper attributes" do
p servers.get_servers_details
end
end
end