尝试在本地复制编译时不存在的文件。例如:
remote_file "/httpfile" do
source "http://wiki.opscode.com/display/chef/Home"
mode "0666"
end
file "/httpfile.bak" do
content IO.read("/httpfile")
only_if {File.exists?("/httpfile")}
end
此代码将给出正在使用only_if
的ERROR: No such file or directory -
均匀性。这是因为IO.read
发生在文件进入系统之前的编译时。(4 年前的电子邮件 - http://lists.opscode.com/sympa/arc/chef/2011-08/msg00182.html)
有没有办法强制内容IO.read("/httpfile")
在执行时执行?或者现在有更好的方法?
谢谢
你应该能够使用惰性求值来处理这个问题。 我相信语法是这样的:
remote_file "/httpfile" do
source "https://docs.chef.io/"
mode "0666"
end
file "/httpfile.bak" do
lazy { content IO.read("/httpfile") }
only_if {File.exists?("/httpfile")}
end