1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

(#9421) Add start, stop, reboot server model methods

This patch implements the start, stop and reboot methods for the Server
model instances.

These server model methods share common names with the AWS server model.

This patch also implements the API requests required to control the
power state of a VMware Virtual Machine.

The requests default to issuing shutdown and reboot commands to the
guest operating system itself.  However, if force is set to true for
power_off and reboot, then the VM is powered off or reset at the virtual
hardware layer.
This commit is contained in:
Jeff McCune 2011-09-02 11:04:24 -07:00
parent d6fed7e4e4
commit cb4e9701b5
5 changed files with 115 additions and 0 deletions

View file

@ -15,6 +15,9 @@ module Fog
request_path 'fog/vsphere/requests/compute'
request :current_time
request :list_virtual_machines
request :vm_power_off
request :vm_power_on
request :vm_reboot
request :find_all_by_uuid
request :find_all_by_instance_uuid

View file

@ -53,6 +53,23 @@ module Fog
}
end
def start
requires :instance_uuid
connection.vm_power_on(:instance_uuid => instance_uuid)
end
def stop(params = {})
params = { :force => false }.merge(params)
requires :instance_uuid
connection.vm_power_off(:instance_uuid => instance_uuid, :force => params[:force])
end
def reboot(params = {})
params = { :force => false }.merge(params)
requires :instance_uuid
connection.vm_reboot(:instance_uuid => instance_uuid, :force => params[:force])
end
end
end

View file

@ -0,0 +1,33 @@
module Fog
module Compute
class Vsphere
class Real
def vm_power_off(params = {})
params = { :force => false }.merge(params)
raise ArgumentError ":instance_uuid is a required parameter" unless params.has_key? :instance_uuid
unless vm = find_all_by_instance_uuid(params[:instance_uuid]).shift
raise Fog::Vsphere::Errors::NotFound, "Could not find a VM with instance UUID: #{params[:instance_uuid]}"
end
if params[:force] then
task = vm.PowerOffVM_Task
task.wait_for_completion
task.info.result
else
vm.ShutdownGuest
"running"
end
end
end
class Mock
def vm_power_off(params = {})
"running"
end
end
end
end
end

View file

@ -0,0 +1,29 @@
module Fog
module Compute
class Vsphere
class Real
def vm_power_on(params = {})
raise ArgumentError ":instance_uuid is a required parameter" unless params.has_key? :instance_uuid
unless vm = find_all_by_instance_uuid(params[:instance_uuid]).shift
raise Fog::Vsphere::Errors::NotFound, "Could not find a VM with instance UUID: #{params[:instance_uuid]}"
end
task = vm.PowerOnVM_Task
task.wait_for_completion
# 'success', 'running', 'queued', 'error'
task.info.state
end
end
class Mock
def vm_power_on(params = {})
# Mock the task.info.state object
"success"
end
end
end
end
end

View file

@ -0,0 +1,33 @@
module Fog
module Compute
class Vsphere
class Real
def vm_reboot(params = {})
params = { :force => false }.merge(params)
raise ArgumentError ":instance_uuid is a required parameter" unless params.has_key? :instance_uuid
unless vm = find_all_by_instance_uuid(params[:instance_uuid]).shift
raise Fog::Vsphere::Errors::NotFound, "Could not find a VM with instance UUID: #{params[:instance_uuid]}"
end
if params[:force] then
task = vm.ResetVM_Task
task.wait_for_completion
task.info.state
else
vm.RebootGuest
"running"
end
end
end
class Mock
def vm_reboot(params = {})
"running"
end
end
end
end
end