Ресурс шаблона шеф-повара not_if соло

У меня есть следующий рецепт шеф-повара, и я не хочу запускать ресурс шаблона, когда он сходится под руководством шеф-повара. Вроде бы не подчиняется not_if при работе кухни сходятся. Он по-прежнему пытается подключиться к серверу шеф-повара. Пожалуйста помоги.

Рецепт блюда,

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
...

person Community    schedule 24.01.2016    source источник


Ответы (1)


Передача нормального значения в not_if означает, что оно интерпретируется как команда для запуска. То, что вы хотите, это блочная форма:

not_if { Chef::Config[:solo] }

Тем не менее, это не проблема. Более глубокая проблема заключается в том, что все значения непосредственно в теле ресурса оцениваются во время компиляции. Вы хотите использовать помощника lazy для задержки оценки, чтобы они использовались только в том случае, если ресурс действительно запущен:

variables(lazy {
  {:nodes => search(:node, 'ipaddress:*')}
})
person coderanger    schedule 24.01.2016