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

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

我尝试用一​​个模板创建两个不同的文件,因为它们只有一行的区别。

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 %>

相关内容