Raise exception if provider doesn't have snapshot capability

Prior to this commit, if a user attempted to use the `vagrant snapshot
save` or `vagrant snapshot list` commands on a vm whose provider did not
support snapshots, it would simply print a warning. This commit changes
that behavior by instead raising an error.
This commit is contained in:
Brian Cain 2017-05-26 15:07:39 -07:00
parent 2995b60925
commit eadb0ac831
5 changed files with 27 additions and 4 deletions

View File

@ -656,6 +656,10 @@ module Vagrant
error_key(:snapshot_force) error_key(:snapshot_force)
end end
class SnapshotNotSupported < VagrantError
error_key(:snapshot_not_supported)
end
class SSHAuthenticationFailed < VagrantError class SSHAuthenticationFailed < VagrantError
error_key(:ssh_authentication_failed) error_key(:ssh_authentication_failed)
end end

View File

@ -22,8 +22,7 @@ module VagrantPlugins
end end
if !vm.provider.capability?(:snapshot_list) if !vm.provider.capability?(:snapshot_list)
vm.ui.info(I18n.t("vagrant.commands.snapshot.not_supported")) raise Vagrant::Errors::SnapshotNotSupported
next
end end
snapshots = vm.provider.capability(:snapshot_list) snapshots = vm.provider.capability(:snapshot_list)

View File

@ -34,8 +34,7 @@ module VagrantPlugins
name = argv.pop name = argv.pop
with_target_vms(argv) do |vm| with_target_vms(argv) do |vm|
if !vm.provider.capability?(:snapshot_list) if !vm.provider.capability?(:snapshot_list)
vm.ui.info(I18n.t("vagrant.commands.snapshot.not_supported")) raise Vagrant::Errors::SnapshotNotSupported
next
end end
snapshot_list = vm.provider.capability(:snapshot_list) snapshot_list = vm.provider.capability(:snapshot_list)

View File

@ -1158,6 +1158,12 @@ en:
guest system. Please report a bug with your Vagrantfile and debug log. guest system. Please report a bug with your Vagrantfile and debug log.
snapshot_force: |- snapshot_force: |-
You must include the `--force` option to replace an existing snapshot. You must include the `--force` option to replace an existing snapshot.
snapshot_not_supported: |-
This provider doesn't support snapshots.
This may be intentional or this may be a bug. If this provider
should support snapshots, then please report this as a bug to the
maintainer of the provider.
ssh_authentication_failed: |- ssh_authentication_failed: |-
SSH authentication failed! This is typically caused by the public/private SSH authentication failed! This is typically caused by the public/private
keypair for the SSH user not being properly set on the guest VM. Please keypair for the SSH user not being properly set on the guest VM. Please

View File

@ -38,6 +38,21 @@ describe VagrantPlugins::CommandSnapshot::Command::Save do
end end
end end
context "with an unsupported provider" do
let(:argv) { ["test"] }
before do
allow(machine.provider).to receive(:capability?).with(:snapshot_list).
and_return(false)
end
it "raises an exception" do
machine.id = "foo"
expect { subject.execute }.
to raise_error(Vagrant::Errors::SnapshotNotSupported)
end
end
context "with a snapshot name given" do context "with a snapshot name given" do
let(:argv) { ["test"] } let(:argv) { ["test"] }
it "calls snapshot_save with a snapshot name" do it "calls snapshot_save with a snapshot name" do