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

Как дважды вызвать шаблон файла марионетки с разными параметрами без использования 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{} без усилий. затем я подумал об использовании имени целевого файла внутри шаблона, например <% if filename == "/tmp/bootstrap-raid.sh" %> что тоже невозможно.

как работать вызовите шаблон дважды с разными "параметрами"

Моя цель - не определять и не вызывать дополнительную функцию в файле манифеста или создавать два шаблона. Любые идеи?

есть ли в шаблоне какие-либо предопределенные переменные по умолчанию, такие как имя целевого файла, имя шаблона, ...?

edit: другим примером может быть два файла php.ini, как в debian, один для командной строки и один для веб-сервера. хочу только поменять лимит памяти. но каждому серверу нужны оба файла php.ini. я ищу способ передать жестко запрограммированный параметр в файл шаблона или способ, которым я могу if/then/else на основе имени целевого файла. конечно, я знаю, что могу создать новое определение, которое я могу вызвать дважды. но я ищу более простой способ.

Возможно, вам стоит сделать это с определением?

class bootstrap {
 define conf ( $israid= undef ) {
  $loc = $name
  file {
    "$loc":
      content => template(blah.erb);
  }
 }
}       

затем позвони с

include bootstrap
  bootstrap::conf {
    "/loc":
      israid => '-r yes \';
    }
  bootstrap::conf {
    "/otherloc":
      israid => '-r no \';
    }

ваш шаблон должен будет обрабатывать israid переменную, вы можете просто использовать include и сохранить логику вне шаблона (или, по крайней мере, меньше логики там

 <%= israid %>

Вы не можете получить имя ресурса (кажется), но можете получить класс. Например:

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 доступные, что обычно означает одно и то же (по крайней мере, я никогда не видел, чтобы они различались).