PuppetテンプレートからPuppet関数を呼び出しますか?


13

0.24.8の時点で、PuppetテンプレートはPuppet関数を呼び出すことができますか?

マニフェストで関数を呼び出し、戻り値を変数に割り当て、テンプレートでlookupvar( 'variable')を使用することで同様の機能を得ることができますが、中間者を削除したいと思います。

回答:


18

テンプレート内では、スコープオブジェクトにアクセスできます。パペットマニフェストでアクセスできるすべての機能には、同じ名前ではなくそのスコープオブジェクトを介してアクセスできます。"function_"関数名の先頭に追加します。たとえば、ここで1つのテンプレートを別のテンプレートに含めました。<%= scope.function_template("template2.erb") %>

http://reductivelabs.com/trac/puppet/wiki/PuppetTemplatingには、テンプレート内のスコープオブジェクトに関する優れたドキュメントがあります。テンプレートと関数に関する非常に深い情報については、内部lib/puppet/parser/templatewrapper.rbとをご覧くださいlib/puppet/parser/functions.rb


まことにありがとうございます。テンプレートでtemplate()関数を使用している人への注意事項:パペットマニフェスト(つまりscope.function_template( "module / template.erb"))のように修飾する必要があります。
sh-beta

テンプレート内のテンプレート関数呼び出しのためにロードするために、テンプレートファイルの名前に変数を使用することは可能ですか?例えば<%= scope.function_template("sites/$domain/config.erb") %>
ゲイリー

絶対に。PuppetのDSLではなくRubyで作業していることに注意してください。そのため、変数名(および補間規則)は異なります。あなたの文字列はでなければなりません<%= scope.function_template("sites/#{domain}/config.erb") %>
jgoldschrafe

3

質問をカスタム関数にも拡張してみましょう。基本的に、組み込み関数と同じ方法で(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') %>

詳細:http : //projects.puppetlabs.com/issues/7991


-2

Puppet関数の意味が完全にはわかりませんが、パペットテンプレートはRubyに埋め込まれているため、Rubyでできることはテンプレートで何でもできます。


ネイティブのパペット関数は、fqdn_rand()、sha1()、tagged()などのようなものです。カスタムのパペット関数は、modules / modulename / plugins / puppet / parser / functions /の下に保存されます。これらはテンプレート内から呼び出すことができますか?
sh-beta
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.