在循环中覆盖Chef Recipe中的属性

时间:2014-06-16 02:00:33

标签: chef chef-recipe

我正在尝试创建一个配方,我会迭代一组值,每次迭代时我都会覆盖一个用于输出模板的属性。

所以,对于这段代码......

count = 0

node['versions'].each do |a_version|
...
    node.override['jboss']['PORT_OFFSET'] = (PORT_OFFSET.to_i + count)

    template "#{JBOSS_DIRECTORY}standalone.xml" do
        source 'standalone.xml.erb'
    end

    count += 100
end

...在运行之后我想让每个standalone.xml包含一个比以前版本多100的port_offset。

所以他们看起来像这样..

jboss.socket.binding.port-offset:8000}">
jboss.socket.binding.port-offset:8100}">
jboss.socket.binding.port-offset:8200}">

...等

但目前它们都是相同的数字。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:3)

回答我自己的问题:

我这样做是为了让它发挥作用。我将变量传递给模板,其中计数在每次迭代时递增。

template "#{JBOSS_DIRECTORY}standalone.xml" do
        source 'standalone.xml.erb'
        variables(
            :port_offset => (node['jboss']['PORT_OFFSET'].to_i + count)
      )

    end

并在模板(standalone.xml.erb)中添加了这个...

port-offset="${jboss.socket.binding.port-offset:<%= @port_offset %>}">