我尝试用一个模板创建两个不同的文件,因为它们只有一行的区别。
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" %>
如何使用不同的“参数”两次调用模板
我的目标是不在清单文件中定义和调用额外的函数,或者制作两个模板。有什么想法吗?
模板中是否有任何预定义的默认变量,如目标文件的文件名、模板名称等?
编辑:另一个示例是像在 debian 中一样拥有两个 php.ini 文件,一个用于命令行,一个用于 Web 服务器。我只想交换内存限制。但每台服务器都需要两个 php.ini 文件。我正在寻找一种将硬编码参数传递给模板文件的方法,或者一种if/then/else
基于目标文件名的方法。当然我知道我可以创建一个新的定义,我可以调用它两次。但我在寻找一种更简单的方法。
答案1
您无法获取资源名称(似乎如此),但可以获取类。例如:
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
可用的,通常意味着同样的事情(至少,我从未见过它们有所不同)。
答案2
也许您应该用定义来做到这一点?
类引导{ 定义 conf($israid=undef){ $loc = $name 文件 { "$loc": 内容 => 模板(blah.erb); } } }
然后调用它
包括引导程序 引导程序::conf { “/loc”: israid => '-r 是 \'; } 引导程序::conf { “/otherloc”: israid => '-r 没有 \'; }
你的模板需要处理israid
变量,你可以使用包含并将逻辑保留在模板之外(或者至少保留其中较少的逻辑
<%= israid %>