尝试在本地复制一个在编译时不存在的文件。 例如:
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
此代码将提供ERROR: No such file or directory -
,而only_if
正在使用。这是因为IO.read
在文件进入系统之前的编译时发生。 (4岁的电子邮件 - http://lists.opscode.com/sympa/arc/chef/2011-08/msg00182.html)
有没有办法强制在执行时执行内容IO.read("/httpfile")
?或者现在更好的方法吗?
由于
答案 0 :(得分:5)
您应该能够使用延迟评估来处理这个问题。我相信语法是这样的:
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