我尝试创build两个不同的文件与一个模板,因为他们只差一行。
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{}来传递variables,所以我试图在每个file{}定义variables,而不费力气。 那么我想在模板内使用targetfilename,如<% if filename == "/tmp/bootstrap-raid.sh" %>这也是不可能的。
如何使用不同的“参数”来调用两次模板
我的目标是不在清单文件中定义和调用额外的函数,或者创build两个模板。 有任何想法吗?
在模板中是否有任何预定义的默认variables,如目标文件的文件名,templatename,…?
编辑:另一个例子是有两个php.ini文件在debian中,一个用于命令行,另一个用于web服务器。 我只想交换内存限制。 但每个服务器都需要php.ini文件。 我正在寻找一种方法来传递一个硬编码的参数到模板文件或一种方式, if/then/else基于目标文件名。 当然,我知道我可以创build一个新的定义,我可以调用两次。 但我正在寻找一个更简单的方法。
你不能得到资源名称(看来),但你可以得到这个类。 例如:
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可用,这通常意味着同样的事情(至less,我从来没有看到他们不同)。
也许你应该这样做一个定义?
class bootstrap {
define conf($ israid = undef){
$ loc = $ name
文件{
“$禄”:
内容=>模板(blah.erb);
}
}
}
然后用它来调用它
包括bootstrap
bootstrap :: conf {
“/ LOC”:
israid =>'-r是\';
}
bootstrap :: conf {
“/ otherloc”:
israid =>'-r no';
}
你的模板将需要处理israidvariables,你可以使用一个包含,并保持模板的逻辑(或至less更less的逻辑在那里
<%= israid %>