第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: カスタム関数の場所