0

我正在尝试使用remote_file在 Windows 共享上缓存大型包的本地副本。这是怎么做到的?

我无法让它与基于驱动器号的路径、基于 UNC 的路径或file:URL 一起使用。

4

2 回答 2

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
于 2013-01-19T08:24:51.533 回答
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 在触发对文件资源的操作之前检查内容是否不同。

于 2013-02-04T20:45:31.050 回答