Назад | Перейти на главную страницу

puppet4 .erb nilClass на .each

Erb

$names = ['foo','boo','wee','haa']
<% @names.each do |name| %>
Hello <%= name %>
he is here
<% end %>

config.pp

file {'/tmp/tester':
    ensure=>'present',
    content=>template("test/hello.erb"),
}

Ошибка при запуске puppet agent -t

 Filepath:  /etc/puppetlabs/code/environments/development/modules/test/tem plates/hello.erb
 Line: 2
 Detail: undefined method `each' for nil:NilClass

В Google некоторые предлагают вместо этого использовать [@name] .each. puppet agent -t запустится, но / tmp / tester будет выглядеть следующим образом:


cat / tmp / tester

$names = ['foo','boo','wee','haa']


Hello 
he is here

Вопрос 2) Допустим, у нас есть файл .conf с большим количеством содержимого. Я хочу делать.

Если соответствует 'AllowUser *' #matching AllowUser и всему, что следует за ним. установите 'AllowUser no' иначе add_line 'ALlowUser no'

hello.erb это файл шаблона.
Это означает, что только код внутри маркеров тегов интерпретируется как код рубина.
Назначение вашей переменной не находится внутри таких тегов, и в результате не объявлена ​​переменная $ names.
В этом файле нет объявления переменной, это просто строка сверху, которая только записывается.

Что касается вашего второго вопроса, вероятно, есть несколько способов сделать это, но я бы просто не стал.
Puppet предназначен для описания целевой системы («Это веб-сервер, он получает этот файл конфигурации с содержимым X»).
Как правило, вы не можете принимать решения на основе таких файлов клиентов, поскольку сервер ничего о них не знает (помните: каталог компилируется на сервере!).
Я бы предпочел сделать это правильно и полностью шаблонизировать файл (или использовать существующий модуль, который уже делает это).