厨师食谱的问题

时间:2014-08-18 16:09:01

标签: ruby arrays attributes chef

抱歉我的英文。

这是一个./recipes/default.rb

node['client-name'].each do |crontab|   
    item = data_bag_item('bag_name', "#{crontab}")

    node.default[:client_timezone] = "#{item['timezone']}"
    node.default[:client_name] = "#{crontab}"

    template "crontab" do
        path "/etc/cron.d/#{deploy}"
        source "default.erb"
        owner "root"
        group "root"
        mode "0644"
    end
end

./attributes/default.rb如下所示:

default['version'] = "1.0.0"
default['client-name'] = ['company_1','company_2']

templates/crontab.erb看起来像这样:

30 04 * * * java -Duser.timezone=<%= node[:timezone] %> -jar /var/www/app-<%= node[:version] %>.jar /var/www/<%= node[:client_name] %>/config/spring/job.xml

我的食谱将两个类似的crontab文件(company_1和company_2)放到/etc/cron.d/,但仅限于最后一个属性&#39;价值(公司_2)。你能告诉我,我哪里错了吗?

1 个答案:

答案 0 :(得分:2)

您需要使用template资源的变量部分明确指定client_nametimezone。配方可能如下所示:

node['client-name'].each do |client_name|   
    item = data_bag_item('bag_name', "#{client_name}")

    template "crontab" do
        path "/etc/cron.d/#{deploy}"
        source "default.erb"
        owner "root"
        group "root"
        mode "0644"
        variables ({
            :client_name => item['client_name'], # Don't you have this already?
            :client_timezone => item['client_timezone']
        })
    end
end

您的crontab.erb应如下所示:

30 04 * * * java -Duser.timezone=<%= @client_timezone %> -jar /var/www/app-<%= node[:version] %>.jar /var/www/<%= @client_name %>/config/spring/job.xml