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