[terremark] Flesh out the power control options of a server.

Make shutdown work.
This commit is contained in:
Edward Muller 2010-05-01 06:04:34 +08:00 committed by Wesley Beary
parent 4ca08fea11
commit 960dca64b2
4 changed files with 87 additions and 47 deletions

View File

@ -25,12 +25,60 @@ module Fog
@status == '2'
end
def reboot
def on?
@status == '4'
end
def off?
@status == '2'
end
def power_on(options = {})
requires :id
connection.reset(@id)
begin
connection.power_on(@id)
rescue Excon::Errors::InternalServerError => e
#Frankly we shouldn't get here ...
raise e unless e.to_s =~ /because it is already powered on/
end
true
end
def power_off
requires :id
begin
connection.power_off(@id)
rescue Excon::Errors::InternalServerError => e
#Frankly we shouldn't get here ...
raise e unless e.to_s =~ /because it is already powered off/
end
true
end
def shutdown
requires :id
begin
connection.power_shutdown(@id)
rescue Excon::Errors::InternalServerError => e
#Frankly we shouldn't get here ...
raise e unless e.to_s =~ /because it is already powered off/
end
true
end
def power_reset
requires :id
connection.power_reset(@id)
true
end
def graceful_restart
requires :id
shutdown
wait_for { off? }
power_on
end
def save
requires :name
data = connection.instantiate_vapp(@name)
@ -48,7 +96,10 @@ module Fog
@id = new_href.split('/').last.to_i
end
def type=(new_type); end
def type=(new_type); @type = new_type; end
def size=(new_size); @size = new_size; end
def IpAddress=(new_ipaddress); @IpAddress = new_ipaddress; end
def Links=(new_links); @Links = new_links; end
end

View File

@ -20,7 +20,7 @@ module Fog
# * 'href'<~String> - href of owner
# * 'name'<~String> - name of owner
# * 'type'<~String> - type of owner
def reset(vapp_id)
def power_reset(vapp_id)
request(
:expects => 202,
:method => 'POST',

View File

@ -0,0 +1,32 @@
module Fog
module Terremark
module Shared
module Real
# Shutdown a vapp
#
# ==== Parameters
# * vapp_id<~Integer> - Id of vapp to shutdown
#
# ==== Returns
# Nothing
def power_shutdown(vapp_id)
request(
:expects => 204,
:method => 'POST',
:path => "vApp/#{vapp_id}/power/action/shutdown"
)
end
end
module Mock
def power_shutdown(vapp_id)
raise MockNotImplemented.new("Contributions welcome!")
end
end
end
end
end

View File

@ -1,43 +0,0 @@
module Fog
module Terremark
module Shared
module Real
# Shutdown a vapp
#
# ==== Parameters
# * vapp_id<~Integer> - Id of vapp to shutdown
#
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
# * 'endTime'<~String> - endTime of task
# * 'href'<~String> - link to task
# * 'startTime'<~String> - startTime of task
# * 'status'<~String> - status of task
# * 'type'<~String> - type of task
# * 'Owner'<~String> -
# * 'href'<~String> - href of owner
# * 'name'<~String> - name of owner
# * 'type'<~String> - type of owner
def shutdown(vapp_id)
request(
:expects => 202,
:method => 'POST',
:parser => Fog::Parsers::Terremark::Shared::Task.new,
:path => "vApp/#{vapp_id}/power/action/shutdown"
)
end
end
module Mock
def shutdown(vapp_id)
raise MockNotImplemented.new("Contributions welcome!")
end
end
end
end
end