厨师10:如何使用remote_file或类似从Windows共享中获取文件?

我正在尝试使用remote_file来cachingWindows共享上的大型软件包的本地副本。 这是怎么做的?

我无法使用基于驱动器号的path,基于UNC的path或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在触发对文件资源的操作之前检查内容是不同的。