Get shell provisioning working again, acceptance test to prove it

This commit is contained in:
Mitchell Hashimoto 2011-12-13 23:45:56 -08:00
parent d6b325e887
commit 6dbade0fc6
3 changed files with 42 additions and 28 deletions

View File

@ -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

View File

@ -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

View File

@ -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