Handle command triggers with run_remote options
This commit adds some handling around when a machine does not exist at all but a trigger was defined with a run_remote option
This commit is contained in:
parent
09846b30fe
commit
16b5ad74ca
|
@ -804,6 +804,10 @@ module Vagrant
|
||||||
error_key(:triggers_bad_exit_codes)
|
error_key(:triggers_bad_exit_codes)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class TriggersGuestNotExist < VagrantError
|
||||||
|
error_key(:triggers_guest_not_exist)
|
||||||
|
end
|
||||||
|
|
||||||
class TriggersGuestNotRunning < VagrantError
|
class TriggersGuestNotRunning < VagrantError
|
||||||
error_key(:triggers_guest_not_running)
|
error_key(:triggers_guest_not_running)
|
||||||
end
|
end
|
||||||
|
|
|
@ -249,7 +249,16 @@ module Vagrant
|
||||||
#
|
#
|
||||||
# @param [ShellProvisioner/Config] config A Shell provisioner config
|
# @param [ShellProvisioner/Config] config A Shell provisioner config
|
||||||
def run_remote(config, on_error, exit_codes)
|
def run_remote(config, on_error, exit_codes)
|
||||||
unless @machine.state.id == :running
|
if !@machine
|
||||||
|
# machine doesn't even exist.
|
||||||
|
if on_error == :halt
|
||||||
|
raise Errors::TriggersGuestNotExist
|
||||||
|
else
|
||||||
|
@ui.warn(I18n.t("vagrant.errors.triggers_guest_not_exist"))
|
||||||
|
@ui.warn(I18n.t("vagrant.trigger.on_error_continue"))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
elsif @machine.state.id != :running
|
||||||
if on_error == :halt
|
if on_error == :halt
|
||||||
raise Errors::TriggersGuestNotRunning,
|
raise Errors::TriggersGuestNotRunning,
|
||||||
machine_name: @machine.name,
|
machine_name: @machine.name,
|
||||||
|
|
|
@ -1502,6 +1502,8 @@ en:
|
||||||
Trigger run failed
|
Trigger run failed
|
||||||
triggers_guest_not_running: |-
|
triggers_guest_not_running: |-
|
||||||
Could not run remote script on %{machine_name} because its state is %{state}
|
Could not run remote script on %{machine_name} because its state is %{state}
|
||||||
|
triggers_guest_not_exist: |-
|
||||||
|
Could not run remote script on guest because it does not yet exist.
|
||||||
triggers_bad_exit_codes: |-
|
triggers_bad_exit_codes: |-
|
||||||
A script exited with an unacceptable exit code %{code}.
|
A script exited with an unacceptable exit code %{code}.
|
||||||
triggers_no_block_given: |-
|
triggers_no_block_given: |-
|
||||||
|
|
|
@ -319,6 +319,29 @@ describe Vagrant::Plugin::V2::Trigger do
|
||||||
trigger_run.finalize!
|
trigger_run.finalize!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with no machine existing" do
|
||||||
|
let(:machine) { nil }
|
||||||
|
|
||||||
|
it "raises an error and halts if guest does not exist" do
|
||||||
|
trigger = trigger_run.after_triggers.first
|
||||||
|
shell_config = trigger.run_remote
|
||||||
|
on_error = trigger.on_error
|
||||||
|
exit_codes = trigger.exit_codes
|
||||||
|
|
||||||
|
expect { subject.send(:run_remote, shell_config, on_error, exit_codes) }.
|
||||||
|
to raise_error(Vagrant::Errors::TriggersGuestNotExist)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "continues on if guest does not exist but is configured to continue on error" do
|
||||||
|
trigger = trigger_run.before_triggers.first
|
||||||
|
shell_config = trigger.run_remote
|
||||||
|
on_error = trigger.on_error
|
||||||
|
exit_codes = trigger.exit_codes
|
||||||
|
|
||||||
|
subject.send(:run_remote, shell_config, on_error, exit_codes)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "raises an error and halts if guest is not running" do
|
it "raises an error and halts if guest is not running" do
|
||||||
allow(machine.state).to receive(:id).and_return(:not_running)
|
allow(machine.state).to receive(:id).and_return(:not_running)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue