下面的代码应该下载一个脚本并在流浪客人身上执行。脚本已下载,但从未运行过。有谁知道如何确保在下载后执行shell脚本?
remote_file "/home/vagrant/conscript_setup.sh" do
source "#{node.default['conscript']['url']}"
notifies :run, "bash[install conscript]", :immediately
end
bash "install conscript" do
cwd "/home/vagrant"
code <<-EOH
cwd "/home/vagrant"
chown vagrant:vagrant conscript_setup.sh
chmod 777 conscript_setup.sh
conscript_setup.sh
EOH
end
答案 0 :(得分:2)
运行脚本时,需要完整(绝对)路径,因为它不在shell的执行路径中。
我有一个工作示例(类似),供您参考
temp=Chef::Config[:file_cache_path]
remote_file "#{Chef::Config[:file_cache_path]}/screenfetch.sh" do
source "https://raw.github.com/KittyKatt/screenFetch/master/screenfetch-dev"
mode 00755
end
bash 'screenfetch' do
code <<-EOF
#{temp}/./screenfetch.sh > #{temp}/screenfetch.log 2>/dev/null
EOF
end
模式位在下载时设置。您可以相应地更改配方。
BTW:您可以启用调试以查看更多信息
chef-solo
=&gt; chef-solo -c solo.rb -j node.json -l debug
Vagrant + Chef Solo示例(使用chef.arguments
)
config.vm.provision :chef_solo do |chef|
# vagrant + chef-solo provision log level
# equivalent to VAGRANT_LOG=info vagrant up
chef.arguments = "-l debug"
chef.add_recipe "apt"
chef.add_recipe "nginx"
end
如果chef-arguments
不起作用,只需VAGRANT_LOG=debug vagrant up