【问题标题】:Chef 10: How to use remote_file or similar to get a file from a Windows share?Chef 10:如何使用 remote_file 或类似工具从 Windows 共享中获取文件?
【发布时间】:2013-02-05 04:45:31
【问题描述】:

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

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

【问题讨论】:

    标签: ruby windows chef-infra


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      我想出了一个我认为非常巧妙的技巧。我创建了以下定义(并将其放入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 在触发对文件资源的操作之前检查内容是否不同。

      【讨论】:

        猜你喜欢
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-20
        • 1970-01-01
        • 2022-06-22
        • 2011-04-19
        相关资源
        最近更新 更多