我有以下问题。下面的厨师食谱代码片段表现不尽相同,尽管它们在纯逻辑方面看起来与我相同。
template "Create a file if not exists" do
path "#{site_docroot}/somefile.php"
source 'somefile.php.erb'
action :create_if_missing
end
VS
if !File.exists? "#{site_docroot}/somefile.php"
template "Create a file if not exists" do
path "#{site_docroot}/somefile.php"
source 'somefile.php.erb'
action :create
end
end
如果文件尚不存在,它们都应该创建一个文件。 但是在亚马逊OpsWorks的定制配方环境中,#34; setup"阶段,第一个溶剂按预期工作。 但是第二种溶剂可以产生假阳性"我每次运行食谱时都会这样。 "如果"语句传递错误但文件最后不存在。
所以我想知道是否有任何理由在厨师或/和红宝石中使用嵌套"模板"内部资源"如果"块。是"模板" ressource运行某种异步?
答案 0 :(得分:1)
简短的回答是,厨师实际分两个阶段进行。您有一个编译阶段和一个执行(或有时称为收敛)阶段 这意味着取决于文件的存在,模板将在编译时插入或不在配方中插入。
进一步阅读:
https://docs.chef.io/chef_client.html
https://serverfault.com/questions/604719/chef-recipe-order-of-execution-redux
那么你的情况会发生什么:
这解释了你看到(每隔一次跑步)来回翻转