Skip to content

Commit

Permalink
[rackspace|compute] cleanup/consistency for server actions
Browse files Browse the repository at this point in the history
  • Loading branch information
geemus committed Nov 30, 2010
1 parent fa47742 commit ef24c31
Show file tree
Hide file tree
Showing 8 changed files with 100 additions and 66 deletions.
6 changes: 4 additions & 2 deletions lib/fog/rackspace/compute.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class Compute < Fog::Service
collection :servers

request_path 'fog/rackspace/requests/compute'
request :confirm_resized_server
request :create_image
request :create_server
request :delete_image
Expand All @@ -29,10 +30,11 @@ class Compute < Fog::Service
request :list_images_detail
request :list_servers
request :list_servers_detail
request :update_server
request :action
request :reboot_server
request :revert_resized_server
request :resize_server
request :server_action
request :update_server

class Mock

Expand Down
2 changes: 1 addition & 1 deletion lib/fog/rackspace/models/compute/server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def reboot(type = 'SOFT')

def save
raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if identity
requires :flavor_id, :image_id, :name
requires :flavor_id, :image_id
options = {
'metadata' => metadata,
'name' => name,
Expand Down
34 changes: 34 additions & 0 deletions lib/fog/rackspace/requests/compute/confirm_resized_server.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
module Fog
module Rackspace
class Compute
class Real

# Confirm resizing
#
# ==== Parameters
# * server_id<~Integer> - Id of server to confirm
#
def confirm_resized_server(server_id)
body = { 'confirmResize' => nil }
server_action(server_id, body, 204)
end

end

class Mock

def confirm_resized_server(server_id)
response = Excon::Response.new
response.status = 204

@data[:servers][server_id].delete('old_flavorId')
@data[:last_modified][:servers][server_id] = Time.now
@data[:servers][server_id]['status'] = 'ACTIVE'

response
end

end
end
end
end
2 changes: 1 addition & 1 deletion lib/fog/rackspace/requests/compute/reboot_server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class Real
#
def reboot_server(server_id, type = 'SOFT')
body = { 'reboot' => { 'type' => type }}
action(server_id, body)
server_action(server_id, body)
end

end
Expand Down
47 changes: 3 additions & 44 deletions lib/fog/rackspace/requests/compute/resize_server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,19 @@ class Real
#
def resize_server(server_id, flavor_id)
body = { 'resize' => { 'flavorId' => flavor_id }}
action(server_id, body)
end

# Confirm resizing
#
# ==== Parameters
# * server_id<~Integer> - Id of server to confirm
#
def confirm_resize(server_id)
body = { 'confirmResize' => nil }
action(server_id, body, 204)
end

# Revert resizing
#
# ==== Parameters
# * server_id<~Integer> - Id of server to revert
#
def revert_resize(server_id)
body = { 'revertResize' => nil }
action(server_id, body)
server_action(server_id, body)
end

end

class Mock

# FIXME: should probably transition instead of skipping to VERIFY_RESIZE
def resize_server(server_id, flavor_id)
response = Excon::Response.new
response.status = 202

#I know this is weird... but I got to keep track of it
# keep track of this for reverts
@data[:servers][server_id]['old_flavorId'] = @data[:servers][server_id]['flavorId']

@data[:servers][server_id]['flavorId'] = flavor_id
Expand All @@ -52,28 +33,6 @@ def resize_server(server_id, flavor_id)
response
end

def confirm_resize(server_id)
response = Excon::Response.new
response.status = 204

@data[:last_modified][:servers][server_id] = Time.now
@data[:servers][server_id]['status'] = 'ACTIVE'

response
end

def revert_resize(server_id)
response = Excon::Response.new
response.status = 202

@data[:servers][server_id]['flavorId'] = @data[:servers][server_id]['old_flavorId']
@data[:servers][server_id].delete('old_flavorId')
@data[:last_modified][:servers][server_id] = Time.now
@data[:servers][server_id]['status'] = 'ACTIVE'

response
end

end
end
end
Expand Down
35 changes: 35 additions & 0 deletions lib/fog/rackspace/requests/compute/revert_resized_server.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
module Fog
module Rackspace
class Compute
class Real

# Revert resizing
#
# ==== Parameters
# * server_id<~Integer> - Id of server to revert
#
def revert_resized_server(server_id)
body = { 'revertResize' => nil }
server_action(server_id, body)
end

end

class Mock

def revert_resized_server(server_id)
response = Excon::Response.new
response.status = 202

@data[:servers][server_id]['flavorId'] = @data[:servers][server_id]['old_flavorId']
@data[:servers][server_id].delete('old_flavorId')
@data[:last_modified][:servers][server_id] = Time.now
@data[:servers][server_id]['status'] = 'ACTIVE'

response
end

end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class Real
# * body<~.to_json object> - Body of the request, describes the action (see reboot_server as an example)
# * expect<~Integer> - expected return, 202 except for confirm resize (204)
#
def action(server_id, body, expects=202)
def server_action(server_id, body, expects=202)
request(
:body => body.to_json,
:expects => expects,
Expand All @@ -23,7 +23,7 @@ def action(server_id, body, expects=202)

class Mock

def action(server_id, body)
def server_action(server_id, body)
Fog::Mock.not_implemented
end

Expand Down
36 changes: 20 additions & 16 deletions tests/rackspace/requests/compute/resize_tests.rb
Original file line number Diff line number Diff line change
@@ -1,41 +1,45 @@
Shindo.tests('Rackspace::Compute | resize request', ['rackspace']) do

tests('success_confirm') do
tests('confirm') do

@server = Rackspace[:compute].servers.create(:flavor_id => 1, :image_id => 19, :name => 'fogresize')
@server = Rackspace[:compute].servers.create(:flavor_id => 1, :image_id => 19)

@server.wait_for { ready? }

tests("#resize_server(#{@server.id}, 2)") do
returns(Rackspace[:compute].resize_server(@server.id, 2).status) { 202 }
returns(Rackspace[:compute].get_server_details(@server.id).body['server']['status']) { 'VERIFY_RESIZE' }
tests("#resize_server(#{@server.id}, 2)").succeeds do
Rackspace[:compute].resize_server(@server.id, 2)
end

tests("#confirm_resize(#{@server.id})") do
returns(Rackspace[:compute].confirm_resize(@server.id).status) { 204 }
returns(Rackspace[:compute].get_server_details(@server.id).body['server']['status']) { 'ACTIVE' }
@server.wait_for { status == 'VERIFY_RESIZE' }

tests("#confirm_resized_server(#{@server.id})").succeeds do
Rackspace[:compute].confirm_resized_server(@server.id)
end

@server.wait_for { ready? }

@server.destroy

end

tests('success_revert') do
tests('revert') do

@server = Rackspace[:compute].servers.create(:flavor_id => 1, :image_id => 19, :name => 'fogresize')
@server = Rackspace[:compute].servers.create(:flavor_id => 1, :image_id => 19)

@server.wait_for { ready? }

tests("#resize_server(#{@server.id}, 2)") do
returns(Rackspace[:compute].resize_server(@server.id, 2).status) { 202 }
returns(Rackspace[:compute].get_server_details(@server.id).body['server']['status']) { 'VERIFY_RESIZE' }
tests("#resize_server(#{@server.id}, 2)").succeeds do
Rackspace[:compute].resize_server(@server.id, 2)
end

tests("#revert_resize(#{@server.id})") do
returns(Rackspace[:compute].revert_resize(@server.id).status) { 202 }
returns(Rackspace[:compute].get_server_details(@server.id).body['server']['status']) { 'ACTIVE' }
@server.wait_for { status == 'VERIFY_RESIZE' }

tests("#revert_resized_server(#{@server.id})").succeeds do
Rackspace[:compute].revert_resized_server(@server.id)
end

@server.wait_for { ready? }

@server.destroy

end
Expand Down

0 comments on commit ef24c31

Please sign in to comment.