Go to main content
Oracle® Solaris 11.3 での Puppet を使用した構成管理の実行

印刷ビューの終了

更新: 2016 年 7 月
 
 

Puppet モジュールの記述

Puppet モジュールは、マニフェストとデータのコレクションであり、ファクト、ファイル、およびテンプレートを含めることができます。モジュールを使用すると、コードをいくつかのマニフェストに分割できるため、Puppet コードを整理したり再利用したりするために役立ちます。すべてのノードのためのグローバル構成を含むメインの site.pp マニフェストを除き、ほぼすべての Puppet マニフェストをモジュールに含めてください。複数の Puppet マニフェストがある場合は、それらを整理する方法としてモジュールを使用することを考慮してください。


Caution

注意  -  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.ppmy_module::my_defined_type という名前の定義済みのタイプが含まれています。

    • my_defined_type.ppmy_module::other_class という名前のクラスが含まれています。

    • my_module::my_defined_typemy_module::my_defined_type という名前の定義済みのタイプが含まれています。

    • implementation/ – その下に格納されているクラス名に影響を与える名前を持つディレクトリです。

      • foo.ppmy_module::implementation::foo という名前のクラスが含まれています。

      • bar.ppmy_module::implementation::bar という名前のクラスが含まれています。

  • files/ – 管理対象ノードがダウンロードできる静的ファイルが含まれています。

    service.confpuppet:///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 サイトには、公式に使用可能なモジュール (より新しいモジュールを含む) のリポジトリのほか、ユーザーがダウンロードできるオーサリングツールやドキュメントが含まれています。