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:
parent
d6fed7e4e4
commit
cb4e9701b5
5 changed files with 115 additions and 0 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
33
lib/fog/vsphere/requests/compute/vm_power_off.rb
Normal file
33
lib/fog/vsphere/requests/compute/vm_power_off.rb
Normal 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
|
29
lib/fog/vsphere/requests/compute/vm_power_on.rb
Normal file
29
lib/fog/vsphere/requests/compute/vm_power_on.rb
Normal 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
|
33
lib/fog/vsphere/requests/compute/vm_reboot.rb
Normal file
33
lib/fog/vsphere/requests/compute/vm_reboot.rb
Normal 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
|
Loading…
Add table
Reference in a new issue