厨师长:一个ruby_块中的变量集可以在以后的食谱中使用吗?

厨师长:一个ruby_块中的变量集可以在以后的食谱中使用吗?,ruby,chef-infra,devops,Ruby,Chef Infra,Devops,假设我有一个变量,directory\u list,我在名为get\u directory\u list的ruby\u块中定义并设置了它。我可以稍后在我的配方中使用目录列表,还是编译/聚合过程会阻止这一点 例如: ruby_block "get_file_list" do block do transferred_files = Dir['/some/dir/*'] end end transferred_files.each do |file| fil

假设我有一个变量,
directory\u list
,我在名为
get\u directory\u list
的ruby\u块中定义并设置了它。我可以稍后在我的配方中使用
目录列表
,还是编译/聚合过程会阻止这一点

例如:

ruby_block "get_file_list" do
    block do
        transferred_files = Dir['/some/dir/*']
    end
end

transferred_files.each do |file|
    file "#{file}" do
        group "woohoo"
        user "woohoo"
    end
end

选项1:您还可以将文件资源放在ruby_块中

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\u状态传递数据

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:如果这只是一个文件,您可以使用
操作:nothing
声明文件资源,从ruby_块中查找资源,设置文件名,然后在ruby_块运行时通知文件资源


选项4:如果这是今天IRC的例子,只需将rsync和递归chown放在一个bash资源中即可。rsync和chown已经是幂等的了,所以我不认为在这个特殊的情况下这是令人反感的。

我觉得今天有人在#chef的Freenode上反复问了这个问题。这当然是可能的。听起来好像有人真的想要答案。哈哈哈@烤一个好的,很有趣。我甚至不知道这些选择是可能的。谢谢你的帮助。