diff --git a/lib/vagrant/provisioners/base.rb b/lib/vagrant/provisioners/base.rb index 7d467a98b..23a04975b 100644 --- a/lib/vagrant/provisioners/base.rb +++ b/lib/vagrant/provisioners/base.rb @@ -7,9 +7,9 @@ module Vagrant class Base include Vagrant::Util - # The environment which provisioner is running in. This is a - # {Vagrant::Action::Environment} - attr_reader :action_env + # The environment which provisioner is running in. This is the + # action environment, not a Vagrant::Environment. + attr_reader :env # The configuration for this provisioner. This will be an instance of # the `Config` class which is part of the provisioner. @@ -29,25 +29,10 @@ module Vagrant end def initialize(env, config) - @action_env = env + @env = env @config = config end - # Returns the actual {Vagrant::Environment} which this provisioner - # represents. - # - # @return [Vagrant::Environment] - def env - action_env.env - end - - # Returns the VM which this provisioner is working on. - # - # @return [Vagrant::VM] - def vm - env.vm - end - # This is the method called to "prepare" the provisioner. This is called # before any actions are run by the action runner (see {Vagrant::Actions::Runner}). # This can be used to setup shared folders, forward ports, etc. Whatever is diff --git a/lib/vagrant/provisioners/shell.rb b/lib/vagrant/provisioners/shell.rb index 393cac506..450597a61 100644 --- a/lib/vagrant/provisioners/shell.rb +++ b/lib/vagrant/provisioners/shell.rb @@ -16,11 +16,7 @@ module Vagrant @args = nil end - def expanded_path - Pathname.new(path).expand_path(env.root_path) if path - end - - def validate(errors) + def validate(env, errors) super # Validate that the parameters are properly set @@ -31,6 +27,7 @@ module Vagrant end # Validate the existence of a script to upload + expanded_path = Pathname.new(path).expand_path(env.root_path) if path && !expanded_path.file? errors.add(I18n.t("vagrant.provisioners.shell.path_invalid", :path => expanded_path)) end @@ -53,7 +50,7 @@ module Vagrant def with_script_file if config.path # Just yield the path to that file... - yield config.expanded_path + yield Pathname.new(config.path).expand_path(env[:root_path]) return end @@ -77,15 +74,15 @@ module Vagrant with_script_file do |path| # Upload the script to the VM - vm.ssh.upload!(path.to_s, config.upload_path) + env[:vm].ssh.upload!(path.to_s, config.upload_path) # Execute it with sudo - vm.ssh.execute do |ssh| + env[:vm].ssh.execute do |ssh| ssh.sudo!(commands) do |ch, type, data| if type == :exit_status ssh.check_exit_status(data, commands) else - env.ui.info(data) + env[:ui].info(data) end end end diff --git a/test/acceptance/provisioning/shell_test.rb b/test/acceptance/provisioning/shell_test.rb new file mode 100644 index 000000000..ab081de57 --- /dev/null +++ b/test/acceptance/provisioning/shell_test.rb @@ -0,0 +1,32 @@ +require File.expand_path("../../base", __FILE__) + +describe "vagrant provisioning with shell" do + include_context "acceptance" + + it "runs a script on boot" do + require_box("default") + + assert_execute("vagrant", "box", "add", "base", box_path("default")) + + environment.workdir.join("Vagrantfile").open("w+") do |f| + f.write(<<-vf) +Vagrant::Config.run do |config| + config.vm.box = "base" + config.vm.provision :shell, :path => "script.sh" +end +vf + end + + environment.workdir.join("script.sh").open("w+") do |f| + f.write(<<-vf) +echo success > /vagrant/results +vf + end + + assert_execute("vagrant", "up") + + result_file = environment.workdir.join("results") + result_file.exist?.should be + result_file.read.should == "success\n" + end +end