Fix issue with puppet mounting shared folder as subfolder of another, causing spurious folder creation on the host

This commit is contained in:
Mitchell Hashimoto 2011-01-14 00:21:20 -08:00
parent 302f9ff0bb
commit 66bf56a073
2 changed files with 8 additions and 31 deletions

View File

@ -77,12 +77,11 @@ module Vagrant
def provision!
verify_binary("puppet")
create_pp_path
run_puppet_client
end
def share_manifests
env.config.vm.share_folder("manifests", config.pp_path, config.manifests_path)
env.config.vm.share_folder("manifests", manifests_guest_path, config.expanded_manifests_path)
end
def share_module_paths
@ -102,26 +101,23 @@ module Vagrant
end
end
def manifests_guest_path
File.join(config.pp_path, "manifests")
end
def verify_binary(binary)
vm.ssh.execute do |ssh|
ssh.exec!("sudo -i which #{binary}", :error_class => PuppetError, :_key => :puppet_not_detected, :binary => binary)
end
end
def create_pp_path
vm.ssh.execute do |ssh|
ssh.exec!("sudo mkdir -p #{config.pp_path}")
ssh.exec!("sudo chown #{env.config.ssh.username} #{config.pp_path}")
end
end
def run_puppet_client
options = [config.options].flatten
options << "--modulepath '#{@module_paths.values.join(':')}'" if !@module_paths.empty?
options << config.computed_manifest_file
options = options.join(" ")
command = "sudo -i 'cd #{config.pp_path}; puppet #{options}'"
command = "sudo -i 'cd #{manifests_guest_path}; puppet #{options}'"
env.ui.info I18n.t("vagrant.provisioners.puppet.running_puppet", :manifest => config.computed_manifest_file)

View File

@ -106,22 +106,14 @@ class PuppetProvisionerTest < Test::Unit::TestCase
should "run the proper sequence of methods in order" do
prov_seq = sequence("prov_seq")
@action.expects(:verify_binary).with("puppet").once.in_sequence(prov_seq)
@action.expects(:create_pp_path).once.in_sequence(prov_seq)
@action.expects(:run_puppet_client).once.in_sequence(prov_seq)
@action.provision!
end
end
context "share manifests folder" do
setup do
@manifests_path = "manifests"
@pp_path = "/tmp/vagrant-puppet"
@action.stubs(:manifests_path).returns(@manifests_path)
@action.stubs(:pp_path).returns(@pp_path)
end
should "share manifest folder" do
@env.config.vm.expects(:share_folder).with("manifests", @pp_path, @manifests_path)
@env.config.vm.expects(:share_folder).with("manifests", @action.manifests_guest_path, @config.expanded_manifests_path)
@action.share_manifests
end
end
@ -151,17 +143,6 @@ class PuppetProvisionerTest < Test::Unit::TestCase
end
end
context "create pp path" do
should "create and chown the folder to the ssh user" do
ssh_seq = sequence("ssh_seq")
ssh = mock("ssh")
ssh.expects(:exec!).with("sudo mkdir -p #{@config.pp_path}").once.in_sequence(ssh_seq)
ssh.expects(:exec!).with("sudo chown #{@env.config.ssh.username} #{@config.pp_path}").once.in_sequence(ssh_seq)
@vm.ssh.expects(:execute).yields(ssh)
@action.create_pp_path
end
end
context "running puppet client" do
setup do
@ssh = mock("ssh")
@ -170,7 +151,7 @@ class PuppetProvisionerTest < Test::Unit::TestCase
end
def expect_puppet_command(command)
@ssh.expects(:exec!).with("sudo -i 'cd #{@config.pp_path}; #{command}'")
@ssh.expects(:exec!).with("sudo -i 'cd #{@action.manifests_guest_path}; #{command}'")
end
should "cd into the pp_path directory and run puppet" do