[英]Chef “template” resource in AWS OpsWorks: test that target file exists
我有以下問題。 以下廚師食譜代碼段的行為不盡相同,盡管就純邏輯而言,它們在我看來是相同的。
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
兩者都應創建一個文件(如果尚不存在)。 但是在Amazon OpsWorks“設置”階段的自定義配方的情況下,第一種解決方案可以按預期工作。 但是第二種解決方案恰好每運行我第二遍配方就會產生一次“誤報”。 “ if”語句傳遞false,但文件末尾不存在。
因此,我想知道在廚師或/和紅寶石中是否有任何理由在“ if”塊內嵌套“模板”資源。 “模板”資源是否運行某種異步?
簡短的答案是廚師實際上分兩個階段運行。 您有一個編譯階段和一個執行(或有時稱為收斂)階段。
這意味着什么取決於模板的存在,即模板在編譯時是否會插入到配方中。
進一步閱讀:
https://docs.chef.io/chef_client.html
https://serverfault.com/questions/604719/chef-recipe-order-of-execution-redux
那么在您的情況下會發生什么:
這就解釋了您來回翻轉(每次其他運行)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.