From 617d53dd23acdf47df0fbe45ad0920014a3a4f22 Mon Sep 17 00:00:00 2001 From: Wesley Beary Date: Tue, 13 Oct 2009 22:36:35 -0700 Subject: [PATCH] rackspace fixes, create/delete server --- .../requests/servers/create_server.rb | 84 +++++++++++++++++++ .../requests/servers/delete_server.rb | 37 ++++++++ .../rackspace/requests/servers/get_flavors.rb | 5 +- .../rackspace/requests/servers/get_images.rb | 5 +- .../rackspace/requests/servers/get_servers.rb | 14 +--- .../requests/servers/get_servers_details.rb | 49 +++++++++++ lib/fog/rackspace/servers.rb | 5 +- ...t_containers.rb => get_containers_spec.rb} | 0 ..._containers.rb => head_containers_spec.rb} | 0 .../requests/servers/create_server_spec.rb | 21 +++++ .../requests/servers/delete_server_spec.rb | 11 +++ .../{get_flavors.rb => get_flavors_spec.rb} | 0 .../{get_images.rb => get_images_spec.rb} | 0 .../servers/get_servers_details_spec.rb | 11 +++ .../{get_servers.rb => get_servers_spec.rb} | 0 15 files changed, 226 insertions(+), 16 deletions(-) create mode 100644 lib/fog/rackspace/requests/servers/create_server.rb create mode 100644 lib/fog/rackspace/requests/servers/delete_server.rb create mode 100644 lib/fog/rackspace/requests/servers/get_servers_details.rb rename spec/rackspace/requests/files/{get_containers.rb => get_containers_spec.rb} (100%) rename spec/rackspace/requests/files/{head_containers.rb => head_containers_spec.rb} (100%) create mode 100644 spec/rackspace/requests/servers/create_server_spec.rb create mode 100644 spec/rackspace/requests/servers/delete_server_spec.rb rename spec/rackspace/requests/servers/{get_flavors.rb => get_flavors_spec.rb} (100%) rename spec/rackspace/requests/servers/{get_images.rb => get_images_spec.rb} (100%) create mode 100644 spec/rackspace/requests/servers/get_servers_details_spec.rb rename spec/rackspace/requests/servers/{get_servers.rb => get_servers_spec.rb} (100%) diff --git a/lib/fog/rackspace/requests/servers/create_server.rb b/lib/fog/rackspace/requests/servers/create_server.rb new file mode 100644 index 000000000..e67663197 --- /dev/null +++ b/lib/fog/rackspace/requests/servers/create_server.rb @@ -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 diff --git a/lib/fog/rackspace/requests/servers/delete_server.rb b/lib/fog/rackspace/requests/servers/delete_server.rb new file mode 100644 index 000000000..d004348ad --- /dev/null +++ b/lib/fog/rackspace/requests/servers/delete_server.rb @@ -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 diff --git a/lib/fog/rackspace/requests/servers/get_flavors.rb b/lib/fog/rackspace/requests/servers/get_flavors.rb index a069b6d22..2a7cf5b0f 100644 --- a/lib/fog/rackspace/requests/servers/get_flavors.rb +++ b/lib/fog/rackspace/requests/servers/get_flavors.rb @@ -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 diff --git a/lib/fog/rackspace/requests/servers/get_images.rb b/lib/fog/rackspace/requests/servers/get_images.rb index d65eabc9f..c5445f2a4 100644 --- a/lib/fog/rackspace/requests/servers/get_images.rb +++ b/lib/fog/rackspace/requests/servers/get_images.rb @@ -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 diff --git a/lib/fog/rackspace/requests/servers/get_servers.rb b/lib/fog/rackspace/requests/servers/get_servers.rb index 6f34d72c7..baf000ed5 100644 --- a/lib/fog/rackspace/requests/servers/get_servers.rb +++ b/lib/fog/rackspace/requests/servers/get_servers.rb @@ -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 diff --git a/lib/fog/rackspace/requests/servers/get_servers_details.rb b/lib/fog/rackspace/requests/servers/get_servers_details.rb new file mode 100644 index 000000000..7c52ad731 --- /dev/null +++ b/lib/fog/rackspace/requests/servers/get_servers_details.rb @@ -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 diff --git a/lib/fog/rackspace/servers.rb b/lib/fog/rackspace/servers.rb index df87cd962..8773d7537 100644 --- a/lib/fog/rackspace/servers.rb +++ b/lib/fog/rackspace/servers.rb @@ -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 diff --git a/spec/rackspace/requests/files/get_containers.rb b/spec/rackspace/requests/files/get_containers_spec.rb similarity index 100% rename from spec/rackspace/requests/files/get_containers.rb rename to spec/rackspace/requests/files/get_containers_spec.rb diff --git a/spec/rackspace/requests/files/head_containers.rb b/spec/rackspace/requests/files/head_containers_spec.rb similarity index 100% rename from spec/rackspace/requests/files/head_containers.rb rename to spec/rackspace/requests/files/head_containers_spec.rb diff --git a/spec/rackspace/requests/servers/create_server_spec.rb b/spec/rackspace/requests/servers/create_server_spec.rb new file mode 100644 index 000000000..d10531038 --- /dev/null +++ b/spec/rackspace/requests/servers/create_server_spec.rb @@ -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 \ No newline at end of file diff --git a/spec/rackspace/requests/servers/delete_server_spec.rb b/spec/rackspace/requests/servers/delete_server_spec.rb new file mode 100644 index 000000000..372bdbb0e --- /dev/null +++ b/spec/rackspace/requests/servers/delete_server_spec.rb @@ -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 \ No newline at end of file diff --git a/spec/rackspace/requests/servers/get_flavors.rb b/spec/rackspace/requests/servers/get_flavors_spec.rb similarity index 100% rename from spec/rackspace/requests/servers/get_flavors.rb rename to spec/rackspace/requests/servers/get_flavors_spec.rb diff --git a/spec/rackspace/requests/servers/get_images.rb b/spec/rackspace/requests/servers/get_images_spec.rb similarity index 100% rename from spec/rackspace/requests/servers/get_images.rb rename to spec/rackspace/requests/servers/get_images_spec.rb diff --git a/spec/rackspace/requests/servers/get_servers_details_spec.rb b/spec/rackspace/requests/servers/get_servers_details_spec.rb new file mode 100644 index 000000000..cd427326f --- /dev/null +++ b/spec/rackspace/requests/servers/get_servers_details_spec.rb @@ -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 \ No newline at end of file diff --git a/spec/rackspace/requests/servers/get_servers.rb b/spec/rackspace/requests/servers/get_servers_spec.rb similarity index 100% rename from spec/rackspace/requests/servers/get_servers.rb rename to spec/rackspace/requests/servers/get_servers_spec.rb