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»).
Как правило, вы не можете принимать решения на основе таких файлов клиентов, поскольку сервер ничего о них не знает (помните: каталог компилируется на сервере!).
Я бы предпочел сделать это правильно и полностью шаблонизировать файл (или использовать существующий модуль, который уже делает это).