Как вызвать файл шаблона марионетки дважды с разными параметрами без использования define?
Я пытаюсь создать два разных файла с одним шаблоном, потому что они отличаются только одной строкой.
file
{
"/tmp/bootstrap-raid.sh":
content => template("pxe/bootstrap.sh.erb"),
}
file
{
"/tmp/bootstrap-noraid.sh":
content => template("pxe/bootstrap.sh.erb"),
}
bootstrap.sh.erb:
<% if ??? == "???" %>
-r yes \
<% else %>
-r no \
<% end %>
я не могу передать переменную, определив ее дважды, как $raid=yes file{} $raid=no file{}
поэтому я попытался определить переменную внутри каждого file{}
без усилий. Затем я подумал об использовании targetfilename внутри шаблона, как <% if filename == "/tmp/bootstrap-raid.sh" %>
что тоже не возможно.
как работает вызывать шаблон дважды с разными "параметрами"
Моя цель - не определять и не вызывать дополнительную функцию в файле манифеста, или создавать два шаблона. есть идеи?
Есть ли какие-либо предопределенные переменные по умолчанию в шаблоне, такие как имя файла целевого файла, имя шаблона,...?
edit: другой пример будет иметь два файла php.ini, как в Debian, один для командной строки и один для веб-сервера. я хочу только обменять лимит памяти. но каждому серверу нужны оба файла php.ini. я ищу способ передать жестко закодированный параметр в файл шаблона или способ, которым я могу if/then/else
основанный на имени файла назначения. Конечно, я знаю, что могу создать новое определение, которое я могу вызвать дважды. но я ищу более легкий путь.
2 ответа
Вы не можете получить имя ресурса (кажется), но вы можете получить класс. Например:
class bootstrap-raid {
file {
"/tmp/bootstrap-raid.sh":
content => template("/root/bootstrap.sh.erb"),
}
}
class bootstrap-noraid {
file {
"/tmp/bootstrap-noraid.sh":
content => template("/root/bootstrap.sh.erb"),
}
}
И для шаблона:
<% if name == "bootstrap-raid" %>
-r yes \
<% else %>
-r no \
<% end %>
Есть также title
доступно, что обычно означает одно и то же (по крайней мере, я никогда не видел, чтобы они отличались).
Возможно, вам следует сделать это с определением?
класс начальной загрузки { define conf ( $israid= undef) { $loc = $name файл { "$ LOC": content => template(blah.erb); } } }
затем позвоните с
включить начальную загрузку bootstrap::conf { "/ LOC": israid => '-r yes \'; } bootstrap::conf { "/ Otherloc": israid => '-r no \'; }
Ваш шаблон должен обрабатывать israid
переменная, вы можете просто использовать включение и сохранить логику из шаблона (или, по крайней мере, меньше логики там
<%= israid %>