Show something meaningful to the user in case the container already exists [GH-132]
This commit is contained in:
parent
786bb8a3fe
commit
7e00b96520
5 changed files with 45 additions and 13 deletions
|
@ -58,6 +58,12 @@ module Vagrant
|
|||
'--name', @name,
|
||||
*(config_opts),
|
||||
*extra
|
||||
rescue Errors::ExecuteError => e
|
||||
if e.stderr =~ /already exists/i
|
||||
raise Errors::ContainerAlreadyExists, name: @name
|
||||
else
|
||||
raise
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
|
|
|
@ -5,7 +5,16 @@ module Vagrant
|
|||
module Errors
|
||||
class ExecuteError < Vagrant::Errors::VagrantError
|
||||
error_key(:lxc_execute_error)
|
||||
attr_reader :stderr, :stdout
|
||||
def initialize(message, *args)
|
||||
super
|
||||
if message.is_a?(Hash)
|
||||
@stderr = message[:stderr]
|
||||
@stdout = message[:stdout]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class NamespacesNotSupported < Vagrant::Errors::VagrantError
|
||||
end
|
||||
|
||||
|
@ -13,6 +22,10 @@ module Vagrant
|
|||
error_key(:lxc_not_installed)
|
||||
end
|
||||
|
||||
class ContainerAlreadyExists < Vagrant::Errors::VagrantError
|
||||
error_key(:lxc_container_already_exists)
|
||||
end
|
||||
|
||||
# Box related errors
|
||||
class TemplateFileMissing < Vagrant::Errors::VagrantError
|
||||
error_key(:lxc_template_file_missing)
|
||||
|
|
|
@ -51,7 +51,8 @@ module Vagrant
|
|||
if @interrupted
|
||||
@logger.info("Exit code != 0, but interrupted. Ignoring.")
|
||||
else
|
||||
raise LXC::Errors::ExecuteError, :command => command.inspect
|
||||
raise LXC::Errors::ExecuteError,
|
||||
command: command.inspect, stderr: r.stderr, stdout: r.stdout
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -60,3 +60,8 @@ en:
|
|||
|
||||
lxc_redir_not_installed: |-
|
||||
`redir` is not installed or is not accessible on the PATH.
|
||||
|
||||
lxc_container_already_exists: |-
|
||||
There is container on your system with the same name you've specified
|
||||
on your Vagrantfile (%{name}), please choose a different one or
|
||||
run `lxc-destroy --name %{name}` and try again.
|
||||
|
|
|
@ -49,10 +49,10 @@ describe Vagrant::LXC::Driver::CLI do
|
|||
|
||||
before do
|
||||
subject.stub(:run) { |*args| @run_args = args }
|
||||
subject.create(template, config_file, template_args)
|
||||
end
|
||||
|
||||
it 'issues a lxc-create with provided template, container name and hash of arguments' do
|
||||
subject.create(template, config_file, template_args)
|
||||
subject.should have_received(:run).with(
|
||||
:create,
|
||||
'--template', template,
|
||||
|
@ -63,6 +63,13 @@ describe Vagrant::LXC::Driver::CLI do
|
|||
'--other', 'value'
|
||||
)
|
||||
end
|
||||
|
||||
it 'wraps a low level error into something more meaningful in case the container already exists' do
|
||||
subject.stub(:run) { raise Vagrant::LXC::Errors::ExecuteError, stderr: 'alreAdy Exists' }
|
||||
expect {
|
||||
subject.create(template, config_file, template_args)
|
||||
}.to raise_error(Vagrant::LXC::Errors::ContainerAlreadyExists)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'destroy' do
|
||||
|
|
Loading…
Reference in a new issue