Puppet-custom-functions

提供:Dev Guides
移動先:案内検索

Puppet-カスタム関数

前の章で説明したように、関数はユーザーにカスタム関数を開発する特権を提供します。 Puppetは、カスタム関数を使用して解釈能力を拡張できます。 カスタム関数は、Puppetモジュールとマニフェストファイルの能力を向上および拡張するのに役立ちます。

カスタム関数の作成

関数を書く前に心に留めておかなければならないことがいくつかあります。

  • Puppetでは、関数はコンパイラーによって実行されます。つまり、すべての関数はPuppetマスターで実行され、同じためにPuppetクライアントを扱う必要はありません。 情報が事実の形式である場合、関数はエージェントとのみ対話できます。
  • Puppetマスターはカスタム関数をキャッチします。つまり、Puppet関数に何らかの変更を加えた場合、Puppetマスターを再起動する必要があります。
  • 関数はサーバー上で実行されます。つまり、関数に必要なファイルはサーバー上に存在する必要があり、関数がクライアントマシンへの直接アクセスを必要とする場合は何もできません。
  • 使用可能な関数には完全に2つのタイプがあります。1つは、値を返すRvalue関数と、何も返さないステートメント関数です。
  • 関数を含むファイルの名前は、ファイル内の関数の名前と同じでなければなりません。 そうしないと、自動的にロードされません。

カスタム関数を配置する場所

すべてのカスタム関数は個別の .rb ファイルとして実装され、モジュール間で配布されます。 lib/puppet/parser/functionにカスタム関数を配置する必要があります。 関数は、次の場所から .rb ファイルからロードできます。

  • $ libdir/puppet/parser/functions
  • Rubyのpuppet/parser/functionsサブディレクトリ$ LOAD_PATH

新しい関数を作成する

新しい関数は、 *puppet
parser :: Functions* モジュール内の newfunction メソッドを使用して作成または定義されます。 関数名をシンボルとして newfunction メソッドに渡し、コードをブロックとして実行する必要があります。 次の例は、/userディレクトリ内のファイルに文字列を書き込むために使用される関数です。
module Puppet::Parser::Functions
   newfunction(:write_line_to_file) do |args|
      filename = args[0]
      str = args[1]
      File.open(filename, 'a') {|fd| fd.puts str }
   end
end

ユーザーが関数を宣言すると、以下に示すようにマニフェストファイルで使用できます。

write_line_to_file('/user/vipin.txt, "Hello vipin!")