Chef:一个ruby_block中的变量集可以在后面的配方中使用吗?

时间:2015-10-06 21:22:15

标签: ruby chef devops

我们假设我有一个变量/*Show menu when invisible checkbox is checked*/ input[type=checkbox]:checked ~ .nav .show-menu{ display: block; } ,我在一个名为directory_list的ruby_block中定义和设置。我可以稍后在我的配方中使用get_directory_list,还是编译/收敛过程会阻止这个?

示例:

directory_list

1 个答案:

答案 0 :(得分:11)

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

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