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

时间:2013-01-19 00:37:42

标签: ruby windows chef

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

我无法使用基于驱动器号的路径,基于UNC的路径或file: URL。

2 个答案:

答案 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在触发对文件资源的操作之前检查内容是否不同。