eliminate guesswork with Vagrantfile errors

If the Vagrantfile has some kind of error, display not only
its path and the exception message, but also the originating
line number and exception class.

Also log the full backtrace when the error is in a provider
block, just as it is done when it's outside a provider block.
This commit is contained in:
Adam Spiers 2014-10-25 14:01:21 +01:00 committed by Seth Vargo
parent e9b11b4ee4
commit ce13051d61
3 changed files with 11 additions and 1 deletions

View File

@ -212,6 +212,8 @@ module Vagrant
# Report the generic exception
raise Errors::VagrantfileLoadError,
path: path,
line: e.backtrace[0].split(':')[1],
exception_class: e.class,
message: e.message
end
end

View File

@ -37,6 +37,8 @@ module VagrantPlugins
attr_reader :provisioners
def initialize
@logger = Log4r::Logger.new("vagrant::config::vm")
@base_mac = UNSET_VALUE
@boot_timeout = UNSET_VALUE
@box = UNSET_VALUE
@ -446,8 +448,13 @@ module VagrantPlugins
config = config.merge(new_config)
end
rescue Exception => e
@logger.error("Vagrantfile load error: #{e.message}")
@logger.error(e.backtrace.join("\n"))
raise Vagrant::Errors::VagrantfileLoadError,
path: "<provider config: #{name}>",
line: e.backtrace[0].split(':')[1],
exception_class: e.class,
message: e.message
end

View File

@ -1200,7 +1200,8 @@ en:
a syntax error.
Path: %{path}
Message: %{message}
Line number: %{line}
Message: %{exception_class}: %{message}
vagrantfile_syntax_error: |-
There is a syntax error in the following Vagrantfile. The syntax error
message is reproduced below for convenience: