第2章 ゼロからの Puppet モジュールの構築
本章では、独自の Puppet モジュールを構築してテストする方法を説明します。これには、簡単な Web サーバー設定をデプロイする Puppet モジュールの作成に関する基本的なチュートリアルが含まれます。
2.1. Puppet モジュールの内容の検証
モジュールを作成する前に、Puppet モジュールを作成するコンポーネントを理解する必要があります。
- Puppet Manifest (Puppet マニフェスト)
マニフェスト(サブスクリプションマニフェスト) と混同しないようにしてください。Puppet マニフェストは、リソースとその属性を定義するコードが含まれるファイルです。リソースは、システムの構成可能な部分です。リソースの例として、パッケージ、サービス、ファイル、ユーザーとグループ、SELinux 設定、SSH キー認証、cron ジョブなどが挙げられます。マニフェストは、属性のキーと値のペアのセットを使用して必要な各リソースを定義します。以下は例になります。
package { 'httpd': ensure => installed, }
この宣言は、httpd パッケージがインストールされているかどうかを確認します。インストールされていない場合は、マニフェストが
yum
を実行してインストールします。コンパイルを開始するのに使用する Puppet マニフェストは、「main manifest」または「site manifest」と呼ばれます。
マニフェストは、モジュールの manifest ディレクトリーに配置されています。
Puppet モジュールは、テストマニフェストの テスト ディレクトリーも使用します。これらのマニフェストを使用して、正式なマニフェストに含まれている特定のクラスをテストします。
- 静的ファイル
モジュールには、システムの特定の場所に Puppet がコピーできる静的ファイルを含めることができます。これらの場所や、パーミッションなどのその他の属性は、マニフェストの
file
リソース宣言で定義されます。静的ファイルは、モジュールの files ディレクトリーに配置されています。
- テンプレート
設定ファイルにはカスタムコンテンツが必要な場合があります。このような場合、ユーザーは静的ファイルの代わりにテンプレートを作成します。静的ファイルと同様に、テンプレートはマニフェストで定義され、システム上の場所にコピーされます。相違点は、テンプレートでは Ruby 式がカスタマイズのコンテンツと変数入力を定義できることです。たとえば、カスタマイズ可能なポートで
httpd
を設定する場合には、設定ファイルのテンプレートには以下が含まれます。Listen <%= @httpd_port %>
この場合の
httpd_port
変数はこのテンプレートを参照するマニフェストで定義されています。テンプレートは、モジュールの templates ディレクトリーに配置されています。
- プラグイン
プラグインは、Puppet のコア機能を超える要素を可能にします。プラグインを使用してカスタムファクト、カスタムリソース、または新機能を定義できます。たとえば、データベースの管理者は、PostgreSQL データベースのリソースタイプが必要になる場合があります。これにより、データベース管理者は PostgreSQL のインストール後に新規データベースセットを PostgreSQL に投入しやすくなります。その結果、データベース管理者は、PostgreSQL のインストールとその後のデータベース作成を確実に行う Puppet マニフェストのみを作成するだけでよくなります。
プラグインは、モジュールの lib ディレクトリーに配置されています。これには、プラグインのタイプに応じたサブディレクトリーセットが含まれます。以下は例になります。
- /lib/facter: カスタムファクトの場所。
- /lib/puppet/type: 属性のキーと値のペアを記述するカスタムリソースタイプの定義の場所。
- /lib/puppet/provider: リソースを制御するためのリソースタイプの定義と併用するカスタムリソースプロバイダーの場所。
- /lib/puppet/parser/functions: カスタム関数の場所