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:*')}
})
我有以下厨师食谱,我不想 运行 模板资源在 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:*')}
})