我正在尝试使用remote_file
在 Windows 共享上缓存大型包的本地副本。这是怎么做到的?
我无法让它与基于驱动器号的路径、基于 UNC 的路径或file:
URL 一起使用。
我正在尝试使用remote_file
在 Windows 共享上缓存大型包的本地副本。这是怎么做到的?
我无法让它与基于驱动器号的路径、基于 UNC 的路径或file:
URL 一起使用。
没有要测试的窗口,但这样的东西应该可以工作:
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
我想出了一个我认为非常巧妙的技巧。我创建了以下定义(并将其放入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 在触发对文件资源的操作之前检查内容是否不同。