Как вызвать файл шаблона марионетки дважды с разными параметрами без использования 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 %>