Puppet モジュールは、マニフェストとデータのコレクションであり、ファクト、ファイル、およびテンプレートを含めることができます。モジュールを使用すると、コードをいくつかのマニフェストに分割できるため、Puppet コードを整理したり再利用したりするために役立ちます。すべてのノードのためのグローバル構成を含むメインの site.pp マニフェストを除き、ほぼすべての Puppet マニフェストをモジュールに含めてください。複数の Puppet マニフェストがある場合は、それらを整理する方法としてモジュールを使用することを考慮してください。
![]() | 注意 - IPS を通して提供されるモジュールは、特に Oracle Solaris のために更新されます。これらのモジュールを Puppet Forge モジュールに置き換えないでください。 |
独自の Puppet モジュールを記述するには、Puppet マスター上で次のコマンドを実行して起動します。
# puppet module generate module-name
前のコマンドを実行すると、一連の質問がプロンプトに表示されます。Puppet は、ユーザーの応答を使用してモジュールに関する情報を収集したあと、基本的なモジュール構造を作成します。詳細な手順および例については、https://docs.puppet.com/guides/module_guides/bgtm.html を参照してください。
作成した Puppet モジュールをマスター上の /etc/puppet/modules ディレクトリに追加します。ここで、基本的なディレクトリツリー構造を次に示します。
module-name/ – モジュールの名前を指定するもっとも外側の (または親の) ディレクトリ構造です。
manifests/ – モジュール内のすべてのマニフェストが含まれています。
init.pp – クラス定義が含まれています。クラス定義の名前はモジュールの名前に一致している必要があります。
other_class.pp – my_module::my_defined_type という名前の定義済みのタイプが含まれています。
my_defined_type.pp – my_module::other_class という名前のクラスが含まれています。
my_module::my_defined_type – my_module::my_defined_type という名前の定義済みのタイプが含まれています。
implementation/ – その下に格納されているクラス名に影響を与える名前を持つディレクトリです。
foo.pp – my_module::implementation::foo という名前のクラスが含まれています。
bar.pp – my_module::implementation::bar という名前のクラスが含まれています。
files/ – 管理対象ノードがダウンロードできる静的ファイルが含まれています。
service.conf – puppet:///modules/my_module/service.conf のようなソース URL を含むファイルです。このファイルの内容には、my_module/service.conf などのファイル機能を使用してアクセスできます。
lib/ – Puppet マスターサーバーと Puppet エージェントサービスの両方で使用されるプラグイン (カスタムファクトやリソースタイプなど) が含まれています。
facts.d/ – Ruby ベースのカスタムファクトの代わりに使用できる外部ファクトが含まれています。
templates/ – モジュールのマニフェストが使用できるテンプレートが含まれています。
component.erb – マニフェストが my_module/component.erb として表すことのできるテンプレートです。
component.epp – マニフェストが my_module/component.epp として表すことのできるテンプレートです。
examples/ – モジュールのクラスや定義済みのタイプを宣言する方法を示す例が含まれています。
init.pp
other_example.pp – 主要なユースケースの例が含まれています。
spec/ – lib ディレクトリ内にあるすべてのプラグインのテストが含まれています。
次の例に示すように、/etc/puppet/modules ディレクトリの下に examplecloud という名前のモジュールが存在します。
# cd /etc/puppet/modules # ls -al drwxrwxr-x 3 userfoo staff 3 Mar 4 14:44 . drwxr-xr-x 5 userfoo staff 6 Mar 25 06:33 .. drwxr-xr-x 4 userfoo staff 4 Mar 3 13:24 examplecloud # cd examplecloud # ls -al drwxr-xr-x 4 userfoo staff 4 Mar 3 13:24 . drwxrwxr-x 3 userfoo staff 3 Mar 4 14:44 .. drwxr-xr-x 3 userfoo staff 12 Mar 9 11:55 files drwxr-xr-x 2 userfoo staff 12 Mar 24 15:43 manifests
examplecloud ディレクトリの下に、そのモジュールのマニフェストを含む manifests ディレクトリが存在します。次の出力に示すように、各マニフェストには 1 つのクラスまたは定義済みのタイプが含まれています。
# cd /etc/puppet/modules/examplecloud/manifests # ls -al total 52 drwxr-xr-x 2 userfoo staff 12 Mar 24 15:43 . drwxr-xr-x 4 userfoo staff 4 Mar 3 13:24 .. -rw-r--r-- 1 userfoo staff 552 Mar 3 13:24 analytics.pp -rw-r--r-- 1 userfoo staff 1097 Mar 3 13:24 compute_node.pp -rw-r--r-- 1 userfoo staff 1232 Mar 7 12:45 dlmp_aggr.pp -rw-r--r-- 1 userfoo staff 491 Mar 3 13:24 mysql.pp -rw-r--r-- 1 userfoo staff 1764 Mar 7 12:45 nameservice.pp -rw-r--r-- 1 userfoo staff 1073 Mar 24 15:43 neutron_aggr.pp -rw-r--r-- 1 userfoo staff 463 Mar 3 13:24 ntp.pp -rw-r--r-- 1 userfoo staff 1814 Mar 3 13:24 openstack_horizon.pp -rw-r--r-- 1 userfoo staff 690 Mar 3 13:24 rabbitmq.pp -rw-r--r-- 1 userfoo staff 1688 Mar 14 14:34 storage_ip.pp
マニフェストファイルの名前は、そこに含まれるクラスおよび定義済みのタイプの名前にマップされます。examplecloud/manifests ディレクトリの下にある各サブディレクトリには特定の機能があります。
これらの各コンポーネントのより詳細な説明については、https://docs.puppet.com/puppet/3.6/reference/modules_fundamentals.html#example を参照してください。
Puppet Forge サイトには、公式に使用可能なモジュール (より新しいモジュールを含む) のリポジトリのほか、ユーザーがダウンロードできるオーサリングツールやドキュメントが含まれています。