在编译时使用CHEF中的文件资源复制本地文件

时间:2015-04-09 18:14:39

标签: file resources chef

尝试在本地复制一个在编译时不存在的文件。 例如:

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")?或者现在更好的方法吗?

由于

1 个答案:

答案 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