回答:
テンプレート内では、スコープオブジェクトにアクセスできます。パペットマニフェストでアクセスできるすべての機能には、同じ名前ではなくそのスコープオブジェクトを介してアクセスできます。"function_"
関数名の先頭に追加します。たとえば、ここで1つのテンプレートを別のテンプレートに含めました。<%= scope.function_template("template2.erb") %>
http://reductivelabs.com/trac/puppet/wiki/PuppetTemplatingには、テンプレート内のスコープオブジェクトに関する優れたドキュメントがあります。テンプレートと関数に関する非常に深い情報については、内部lib/puppet/parser/templatewrapper.rb
とをご覧くださいlib/puppet/parser/functions.rb
。
<%= scope.function_template("sites/$domain/config.erb") %>
<%= scope.function_template("sites/#{domain}/config.erb") %>
。
質問をカスタム関数にも拡張してみましょう。基本的に、組み込み関数と同じ方法で(function_プレフィックスを使用して)カスタム関数を呼び出しますが、配列のすべてのパラメーターを渡すようにしてください。
module Puppet::Parser::Functions
newfunction(:namegoeshere, :type => :rvalue) do |args|
# ...
end
end
<%= scope.function_namegoeshere(["one","two"]) %>
一部のPuppetバージョンでは、角括弧なしでも機能することに注意してください。詳細:http : //docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates
もう1つの重要なことは、カスタム関数がテンプレートスコープに自動ロードされないPuppet 2.6以前のバグ(または機能)があることです。それらを手動でロードする必要があります。そうしないと、機能が見つかりません!
<% Puppet::Parser::Functions::function('namegoeshere') %>
Puppet関数の意味が完全にはわかりませんが、パペットテンプレートはRubyに埋め込まれているため、Rubyでできることはテンプレートで何でもできます。