Puppetテンプレートファイルはerb Railsファイルです。
私は行が欲しい:
Include modsecurity.d/*.conf
クラスmod_securityが含まれている場合、最終ファイルに含まれます。
Puppetドキュメントから: 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 ...
ビットは、ブロードキャストクラスの包含をチェックする方法ではなく、ブロードキャスト変数の値を使用する条件の構文に対して、classes配列に定義されたすべてのクラスの名前が含まれます。
これは、たとえばmod_securityクラスをチェックする方法です。
<%if classes.include?( "mod_security")%> 条件付きテキスト <%end%>
編集:
おっと...メソッドはインクルードと呼ばれていますか?含まれていませんか?上記を修正しました。
クラスが 'classes'変数に含まれるかどうかは、パペットの実行でwhenに依存するため、これを行う場合は注意が必要です。この特定のテンプレートが評価され、非決定論的である可能性があります。テンプレートが評価され、後で実行中にmod_securityクラスが含まれて評価される可能性は十分にあります。
これを回避する2つの方法:
外部ノード分類器によって追加されることを保証できる場合は、安全です
さらに良いことに、mod_securityの存在を確認するカスタムファクトを作成し、そのファクト名を条件変数として使用します。
Facter.add( "mod_security_version")do setcode do version =%{rpm -qa | grep mod_security} if version.empty?バージョン= 0終了バージョン終了終了
次に、テンプレートで:
<% if ! mod_security_version.eql?("0") %>
Include modsecurity.d/*.conf
<% end %>
すべてのファクトファクトはERBに到達すると文字列になるため、これは文字列の比較(mod_security_version != 0
ではない)である必要があることに注意してください。