我正在编写一个配方,它从源代码编译和安装应用程序,但也会更改应用程序安装完成后创建的目录中的配置文件。配方如下所示:
bash "install inspircd from source" do
...
code <<-EOH
....
make && \
make install
EOH
end
...
# Copy over the configuration template
template "<config dir>/inspircd.conf" do
source "inspircd.conf.erb"
....
end
根据文档,“资源按照它们出现的顺序执行”。但 Chef 似乎并没有按照它们出现的顺序执行,因为它试图将模板文件放入仅在 make install 完成后创建的目录中。
Chef 是否并行执行配方?有没有办法阻止执行直到 bash 命令完成?任何帮助都将不胜感激。谢谢。
答案1
它应该按顺序运行。如果您收到该错误,我认为您的 bash 块可能存在问题。
无论如何,您都可以在模板中执行“only_if”。例如:
template "<config dir>/inspircd.conf" do
source "inspircd.conf.erb"
....
only_if "test -d <config dir>"
end
http://wiki.opscode.com/display/chef/Resources#Resources-ConditionalExecution