VM instances can execute a single command now (VM#execute!(foo)) and added "stop" action to force immediate shutdown of VM.
This commit is contained in:
parent
7c61792b19
commit
e825847dac
|
@ -0,0 +1,10 @@
|
|||
module Vagrant
|
||||
module Actions
|
||||
class Stop < Base
|
||||
def execute!
|
||||
logger.info "Forcing shutdown of VM..."
|
||||
@vm.vm.stop(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -88,7 +88,12 @@ error
|
|||
@actions << action_klass.new(self, *args)
|
||||
end
|
||||
|
||||
def execute!
|
||||
def execute!(single_action=nil, *args)
|
||||
if single_action
|
||||
@actions.clear
|
||||
add_action(single_action, *args)
|
||||
end
|
||||
|
||||
# Call the prepare method on each once its
|
||||
# initialized, then call the execute! method
|
||||
[:prepare, :execute!].each do |method|
|
||||
|
@ -118,10 +123,7 @@ error
|
|||
end
|
||||
|
||||
def destroy
|
||||
if @vm.running?
|
||||
logger.info "VM is running. Forcing immediate shutdown..."
|
||||
@vm.stop(true)
|
||||
end
|
||||
execute!(Actions::Stop) if @vm.running?
|
||||
|
||||
logger.info "Destroying VM and associated drives..."
|
||||
@vm.destroy(:destroy_image => true)
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
||||
|
||||
class StopActionTest < Test::Unit::TestCase
|
||||
setup do
|
||||
@mock_vm, @vm, @action = mock_action(Vagrant::Actions::Stop)
|
||||
end
|
||||
|
||||
should "force the VM to stop" do
|
||||
@vm.expects(:stop).with(true).once
|
||||
@action.execute!
|
||||
end
|
||||
end
|
|
@ -92,6 +92,21 @@ class VMTest < Test::Unit::TestCase
|
|||
@vm.add_action(action_klass, "foo", "bar")
|
||||
end
|
||||
|
||||
should "clear the actions and run a single action if given to execute!" do
|
||||
action = mock("action")
|
||||
run_action = mock("action_run")
|
||||
run_class = mock("run_class")
|
||||
run_class.expects(:new).once.returns(run_action)
|
||||
@vm.actions << action
|
||||
|
||||
[:prepare, :execute!].each do |method|
|
||||
action.expects(method).never
|
||||
run_action.expects(method).once
|
||||
end
|
||||
|
||||
@vm.execute!(run_class)
|
||||
end
|
||||
|
||||
should "run #prepare on all actions, then #execute!" do
|
||||
action_seq = sequence("action_seq")
|
||||
actions = []
|
||||
|
@ -154,6 +169,7 @@ class VMTest < Test::Unit::TestCase
|
|||
context "destroying" do
|
||||
setup do
|
||||
@mock_vm.stubs(:running?).returns(false)
|
||||
@vm.stubs(:execute!)
|
||||
end
|
||||
|
||||
should "destoy the VM along with images" do
|
||||
|
@ -163,8 +179,8 @@ class VMTest < Test::Unit::TestCase
|
|||
|
||||
should "stop the VM if its running" do
|
||||
@mock_vm.expects(:running?).returns(true)
|
||||
@mock_vm.expects(:stop).with(true)
|
||||
@mock_vm.expects(:destroy).with(:destroy_image => true).once
|
||||
@vm.expects(:execute!).with(Vagrant::Actions::Stop).once
|
||||
@vm.destroy
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue