附加到 Chef 数组属性

Append to Chef array attribute

我正在尝试像这样初始化一个空的 Chef 属性:

node.default['tool_list'] = Array.new

并且我想在食谱运行时向该数组添加元素,并最终使用该完整数组作为食谱中最后一个食谱的输入。

因此,随着每个配方的运行,我尝试像这样附加到属性:

node['tool_list'] << "tool:Python_2.7"

我为不同的工具做了几次,然后最终在我的最终配方中引用了一个资源:

resource "example" do
    labels          node['tool_list']
end

除了这似乎不起作用并且最终属性似乎为空。我究竟做错了什么?像这样附加到属性的正确方法是什么?

这真的很不推荐。数组没有任何分层合并的语义,所以东西很快就会变得很奇怪。更好的方法是使用散列,然后使用 node['tool_list'].keys 或类似的东西。此外,您可能会陷入 compile/converge 差异,需要包装东西以进行惰性评估 (lazy { node['tool_list'].keys })。