在包含傀儡模板的条件中使用包含类名称

我处于一种情况,为了便于pipe理,我想为两个类使用相同的configuration文件模板。 我只希望configuration文件的一小部分在两者之间是不同的,因为我希望这两个类都包含在大多数节点中,所以我想要一个简单的条件来确定哪个类包含文件。

作为一个例子,我们假设sensorsnuffler都包含在同一个节点中。 我希望模板看起来像这样

 <% if scope.name == "sensor" %> include sensor/file1 include sensor/file2 <% else %> include snuffler/file1 include snuffler/file2 <% end %> 

这是可能的直接或我需要回落到类定义中的variables定义?

最简单的方法是查看scope.tagsvariables,并检查具有您感兴趣的类的名称的成员。默认情况下,资源被标记为types(如“class”或“types“),以及定义资源的名称(如'sensor'或'snuffler')。 在我的快速testing中,我做了这样的事情:

 class other { file { '/etc/test': content => template('test/test.erb'), } } class test { file { '/etc/test': content => template('test/test.erb'), } } include test 

使用如下所示的模板:

 I am an erb template: <% if scope.tags.member? 'test' %> I was made in the Test class! <% end %> 

从“testing”类中调用时,会显示额外的内容。

“范围”variables是指Puppet::Parser::Scope类,它也似乎跟踪源。 你可以用scope.source.name来引用它:

 class classname::foo { notice(inline_template("scope='<%= scope.source.name %>'")) } 

版画

 notice: Scope(Class[Classname::Foo]): scope='classname::foo'