我正在尝试使用remote_file
在Windows共享上缓存大型包的本地副本。这是怎么做到的?
我无法使用基于驱动器号的路径,基于UNC的路径或file:
URL。
答案 0 :(得分:1)
没有要测试的窗口,但是这样的东西应该可以工作:
require 'fileutils'
remote_path = '...'
local_path = '...'
ruby "cache-#{remote_path}" do
block { FileUtils.copy_file(remote_path, local_path) }
not_if { File.exists?(local_path) }
end
答案 1 :(得分:0)
我制定了一个我认为非常整洁的技巧。我创建了以下定义(并将其放在definitions/default.rb
中):
define :file_from_network, :action => :create do
myPath = (params[:path] || params[:name])
mySource = params[:source]
if File.exist?(mySource)
file myPath do
action params[:action]
content File.open(mySource) {|io| io.read}
end
else
Chef::Log.error("File #{mySource} not found!")
end
end
定义与资源的工作方式完全不同,但这很容易实现,并且我需要它做。当然,内存中的读取使大型文件不实用,但它允许Chef在触发对文件资源的操作之前检查内容是否不同。