如何在不使用定义的情况下使用不同的参数两次调用木偶文件模板?

c33*_*33s 7 puppet template

我尝试使用一个模板创建两个不同的文件,因为它们仅相差一行。

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基于目标文件名的方法。当然,我知道我能够创建一个新的定义,我可以调用两次。但我正在寻找一种更简单的方法。

Tac*_*cus 7

也许你应该用定义来做到这一点?

类引导{
 定义 conf ( $israid= undef ) {
  $loc = $name
  文件 {
    “$loc”:
      内容 => 模板(blah.erb);
  }
 }
}       

然后用

包括引导程序
  引导:: conf {
    “/位置”:
      israid => '-r 是 \';
    }
  引导:: conf {
    “/otherloc”:
      israid => '-r 没有 \';
    }

您的模板将需要处理israid变量您可以只使用包含并将逻辑保留在模板之外(或至少在那里的逻辑更少

 <%= israid %>
Run Code Online (Sandbox Code Playgroud)


Dan*_*ral 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"),
    }
}
Run Code Online (Sandbox Code Playgroud)

对于模板:

<% if name == "bootstrap-raid" %>
-r yes \
<% else %> 
-r no \
<% end %>
Run Code Online (Sandbox Code Playgroud)

还有title可用的,这通常意味着相同的事情(至少,我从未见过它们有什么不同)。