From 960dca64b24f101d1630a069fbaab289b0884089 Mon Sep 17 00:00:00 2001 From: Edward Muller Date: Sat, 1 May 2010 06:04:34 +0800 Subject: [PATCH] [terremark] Flesh out the power control options of a server. Make shutdown work. --- lib/fog/terremark/models/shared/server.rb | 57 ++++++++++++++++++- .../shared/{reset.rb => power_reset.rb} | 2 +- .../requests/shared/power_shutdown.rb | 32 +++++++++++ lib/fog/terremark/requests/shared/shutdown.rb | 43 -------------- 4 files changed, 87 insertions(+), 47 deletions(-) rename lib/fog/terremark/requests/shared/{reset.rb => power_reset.rb} (97%) create mode 100644 lib/fog/terremark/requests/shared/power_shutdown.rb delete mode 100644 lib/fog/terremark/requests/shared/shutdown.rb diff --git a/lib/fog/terremark/models/shared/server.rb b/lib/fog/terremark/models/shared/server.rb index 5f6092324..4e6562664 100644 --- a/lib/fog/terremark/models/shared/server.rb +++ b/lib/fog/terremark/models/shared/server.rb @@ -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 diff --git a/lib/fog/terremark/requests/shared/reset.rb b/lib/fog/terremark/requests/shared/power_reset.rb similarity index 97% rename from lib/fog/terremark/requests/shared/reset.rb rename to lib/fog/terremark/requests/shared/power_reset.rb index f2c3ed88b..6bb33615b 100644 --- a/lib/fog/terremark/requests/shared/reset.rb +++ b/lib/fog/terremark/requests/shared/power_reset.rb @@ -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', diff --git a/lib/fog/terremark/requests/shared/power_shutdown.rb b/lib/fog/terremark/requests/shared/power_shutdown.rb new file mode 100644 index 000000000..7846f1e86 --- /dev/null +++ b/lib/fog/terremark/requests/shared/power_shutdown.rb @@ -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 diff --git a/lib/fog/terremark/requests/shared/shutdown.rb b/lib/fog/terremark/requests/shared/shutdown.rb deleted file mode 100644 index 632a1e03b..000000000 --- a/lib/fog/terremark/requests/shared/shutdown.rb +++ /dev/null @@ -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