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は、ファイルリソースでアクションをトリガーする前に、コンテンツが異なることを確認できます。