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

copying local file after compile time with file resource in 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

即使 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