前回はリソースタイプを拡張し、カスタムリソースを適用するための全体的な流れについて解説しました。今回はカスタムリソースタイプの、タイプを定義するためのコードについて、前回のサンプルであるfilesimpleタイプを元に解説します。
filesimpleタイプの定義は、以下のようなRubyコードになっています。このコードについて順次解説していきます。
1行目では、Puppetモジュールとしてカスタムリソースタイプを定義しています。
2行目のnewtypeメソッドで、filesimpleタイプの定義を開始しています。
3行目では@docというインスタンス変数に、このカスタムリソースタイプのドキュメントを記述しています。ドキュメントはreStructuredTextで記述します。Puppet標準のリソースタイプでは、ここで記述されたドキュメントが、Puppet WikiのType Referenceの自動生成に利用されています。
5行目のensurableというヘルパメソッドを実行することによって、リソース宣言でensureパラメータが利用できるようになります。ensureパラメータは値によって、プロバイダで定義されたcreate、destroy、exists?の3つのメソッドを呼び出します。たとえば、リソース宣言でensure => present と指定されていれば、存在確認のためにexists?メソッドが呼ばれ、存在しなければcreateメソッドが呼ばれます。
7行目のnewparamメソッドでは、filesimpleタイプで利用するnameパラメータを定義しています。nameパラメータはnamevarとして扱われます。(namevarについては第3回 マニフェストはじめの一歩をご参照ください。)
namevarをnameパラメータ以外にしたい場合には、以下のように記述します。
パラメータの値を決まったものの中から指定できるようにしたい場合には、以下のように記述します。
正規表現も指定できます。
この場合、blue、redはシンボルとして扱われますが、それ以外は文字列として扱われます。
値のバリデーションも可能です。以下のコード例では、colorパラメータの値にgreenが指定された場合、ArgumentErrorをraiseします。
ここで定義されたvalidateメソッドは、デフォルトのvaldateメソッドを継承してオーバーライドしています。そのため、デフォルトのvalidateメソッドも実行するために、superを呼び出しています。
値を変換することもできます。以下のコード例では、colorパラメータの値に、mauveかvioletが指定された場合は、purpleに変換します。
mungeメソッドもvalidateメソッドと同様、superを呼び出してデフォルト定義されたmungeメソッドを実行しています。
8行目のdescではnameパラメータの説明を記述しています。これは@docと同様に、Type Referenceの自動生成に利用されています。
11行目のnewpropertyでは、modeプロパティを定義しています。プロパティはパラメータとは異なり、プロバイダで定義されたメソッドが呼び出されます。
例えばmodeプロパティであれば、リソース宣言でmode => 644と指定されると、プロバイダ中のmodeメソッドが呼び出され、ファイルのモードが設定される、という動作をします。
13行目のdefaulttoでは、modeプロパティが指定されない場合のデフォルト値が640であると定義しています。
プロパティで指定される値のバリデーションを行うこともできます。以下のコード例では、enableプロパティの値をtrueまたはfalseに制限しています。
正規表現でバリデーションすることもできます。
次回はプロバイダのコードについて解説予定です。
- 参考リンク
- URL:Creating Custom Types