rackspace fixes, create/delete server
This commit is contained in:
parent
337148709d
commit
617d53dd23
|
@ -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
|
|
@ -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
|
|
@ -15,8 +15,9 @@ unless Fog.mocking?
|
|||
# * 'disk'<~Integer> - Amount of diskspace for the flavor
|
||||
def get_flavors
|
||||
request(
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:path => 'flavors'
|
||||
:path => 'flavors.json'
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -16,8 +16,9 @@ unless Fog.mocking?
|
|||
# * 'status'<~String> - Status of image
|
||||
def get_images
|
||||
request(
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:path => 'images'
|
||||
:path => 'images.json'
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -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(
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:path => 'servers'
|
||||
:path => 'servers.json'
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue