木偶ERB模板 – 关于定义的类的问题

木偶模板文件是erb rails文件。

我想要的行:

Include modsecurity.d/*.conf

如果包含类mod_security,则包含在最终文件中。

从傀儡文档: http : //docs.puppetlabs.com/guides/templating.html –

这个片段将打印目录中的所有定义的类:

 <% classes.each do |klass| -%> The class <%= klass %> is defined <% end -%> 

条件:

 <% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %> 

我是新的语法。 定义的意思是否与包含一样? 对于条件如何检查一个特定的类,即如果isdefined(mod_security)…?

定义的类意味着该类是包含的。 要明确的是, <% if broadcast ... bit不是检查包含广播类的方法,而是使用广播variables值的条件语法,类数组包含全部定义的类。

这将是你将如何检查mod_security类,例如:

 <%if classes.include?(“mod_security”)%>
条件文本
 <%end%>

编辑:

哎呀…这个方法叫include? 不包括? 固定在上面。

要小心这样做,因为类是否包含在“类”variables中取决于在puppet运行中何时评估此特定模板,这可能是非确定性的。 很有可能您的模板将被评估,然后在运行过程中,您的mod_security类将被包含并进行评估。

两种方法:

  1. 如果可以保证它会被外部节点分类器添加,则是安全的

  2. 更好的是,做一个自定义的事实,确定存在的mod_security并使用该事实名称作为您的条件variables。

    Facter.add(“mod_security_version”)do setcode do version =%{rpm -qa | grep mod_security}如果version.empty? 版本= 0结束版本结束

然后在您的模板中:

 <% if ! mod_security_version.eql?("0") %> Include modsecurity.d/*.conf <% end %> 

注意这需要是一个string比较(而不是mod_security_version != 0 ),因为所有的事实事实都是string,一旦命中ERB。