我尝试使用一个模板创建两个不同的文件,因为它们仅相差一行。
file
{
"/tmp/bootstrap-raid.sh":
content => template("pxe/bootstrap.sh.erb"),
}
file
{
"/tmp/bootstrap-noraid.sh":
content => template("pxe/bootstrap.sh.erb"),
}
Run Code Online (Sandbox Code Playgroud)
bootstrap.sh.erb:
<% if ??? == "???" %>
-r yes \
<% else %>
-r no \
<% end %>
Run Code Online (Sandbox Code Playgroud)
我不能通过像 那样定义两次来传递变量$raid=yes file{} $raid=no file{},所以我试图file{}毫不费力地在每个变量中定义变量。然后我考虑在模板中使用目标文件名,<% if filename == "/tmp/bootstrap-raid.sh" %>这也是不可能的。
如何使用不同的“参数”两次调用模板
我的目标是不在清单文件中定义和调用额外的函数,或者制作两个模板。有任何想法吗?
模板中是否有任何预定义的默认变量,例如目标文件的文件名、模板名……?
编辑:另一个例子是在 debian 中有两个 php.ini 文件,一个用于命令行,一个用于网络服务器。我只想交换内存限制。但是每个服务器都需要两个 php.ini 文件。我正在寻找一种将硬编码参数传递给模板文件的方法,或者一种我可以if/then/else基于目标文件名的方法。当然,我知道我能够创建一个新的定义,我可以调用两次。但我正在寻找一种更简单的方法。
也许你应该用定义来做到这一点?
类引导{
定义 conf ( $israid= undef ) {
$loc = $name
文件 {
“$loc”:
内容 => 模板(blah.erb);
}
}
}
然后用
包括引导程序
引导:: conf {
“/位置”:
israid => '-r 是 \';
}
引导:: conf {
“/otherloc”:
israid => '-r 没有 \';
}
您的模板将需要处理israid变量您可以只使用包含并将逻辑保留在模板之外(或至少在那里的逻辑更少
<%= israid %>
Run Code Online (Sandbox Code Playgroud)
您无法获取资源名称(看起来),但可以获取类。例如:
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"),
}
}
Run Code Online (Sandbox Code Playgroud)
对于模板:
<% if name == "bootstrap-raid" %>
-r yes \
<% else %>
-r no \
<% end %>
Run Code Online (Sandbox Code Playgroud)
还有title可用的,这通常意味着相同的事情(至少,我从未见过它们有什么不同)。
| 归档时间: |
|
| 查看次数: |
2797 次 |
| 最近记录: |