木偶模板文件是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类将被包含并进行评估。
两种方法:
如果可以保证它会被外部节点分类器添加,则是安全的
更好的是,做一个自定义的事实,确定存在的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。