オプション 1: ファイル リソースを ruby_block 内に配置することもできます。
ruby_block "get_file_list" do
block do
files = Dir['/some/dir/*']
files.each do |f|
t = Chef::Resource::File.new(f)
t.owner("woohoo")
t.group("woohoo")
t.mode("0600")
t.action(:create)
t.run_context=(rc)
t.run_action(:create)
end
end
end
オプション 2: node.run_state を使用してデータを渡すことができます。
ruby_block "get_file_list" do
block do
node.run_state['transferred_files'] = Dir['/some/dir/*']
end
end
node.run_state['transferred_files'].each do |file|
file "#{file}" do
group "woohoo"
user "woohoo"
end
end
オプション 3: これが 1 つのファイルである場合は、ファイル リソースを で宣言しaction :nothing
、ruby_block 内からリソースを検索してファイル名を設定し、ruby_block が実行されたときにファイル リソースに通知することができます。
オプション 4: これが今日の IRC の例である場合、rsync と再帰的な chown を単一の bash リソース内に配置するだけです。rsync と chown はすでに冪等であるため、この特定のケースでは好ましくないと思います。