Chef 模板资源 not_if 独奏

Chef template resource not_if solo

我有以下厨师食谱,我不想 运行 模板资源在 chef solo 下聚合时。它似乎不服从not_if而运行宁厨房收敛。它仍然会尝试连接 Chef 服务器。请帮忙。

食谱,

template '/etc/hosts' do
  not_if Chef::Config[:solo]
  source 'hosts.erb'
  mode '0644'
  owner 'root'
  group 'root'
  variables({
      :nodes => search(:node, 'ipaddress:*')
            })
end

模板,

...
<% @nodes.each do |n| -%>
    <% if (n['fqdn'] && n['ipaddress']) -%>
        <%= n['ipaddress'] %> <%= n['fqdn']  %>
    <% end -%>
<% end -%>
...

.kitchen.yml

---
driver:
  name: vagrant

provisioner:
  name: chef_solo

platforms:
  - name: centos-6.7
...

将正常值传递给 not_if 意味着它被解释为对 运行 的命令。你要的是块形式:

not_if { Chef::Config[:solo] }

也就是说,这不是问题所在。更深层次的问题是直接在资源主体中的所有值都在编译时进行评估。您想使用 lazy 帮助程序来延迟评估,以便仅当资源实际上是 运行:

时才使用它们
variables(lazy {
  {:nodes => search(:node, 'ipaddress:*')}
})