Menu Close

第2章 スケーラブルな Puppet モジュールの構築

本章では、独自の Puppet モジュールを構築してテストする方法を説明します。これには、簡単な Web サーバー設定をデプロイする Puppet モジュールを作成するための基本的なチュートリアルが含まれます。

2.1. Puppet モジュールの内容の検証

モジュールを作成する前に、Puppet モジュールを作成するコンポーネントを理解する必要があります。

Puppet マニフェスト

Manifest(サブスクリプションマニフェスト)と混同しないように してください。Puppet マニフェストは、リソースセットとその属性を定義するコードが含まれるファイルです。リソースは、システムの設定可能な部分です。リソースの例には、パッケージ、サービス、ファイル、ユーザーとグループ、SELinux 設定、SSH キー認証、cron ジョブなどが含まれます。マニフェストは、属性のキーと値のペアのセットを使用して必要な各リソースを定義します。例を示します。

package { 'httpd':
  ensure => installed,
}

この宣言は、httpd パッケージがインストールされているかどうかを確認します。設定されていない場合は、マニフェストが実行 yum し、インストールします。

コンパイルを開始するために使用される Puppet マニフェストは、「メインマニフェスト」または「サイトマニフェスト」と呼ばれます。

マニフェストは、モジュールの manifest ディレクトリーにあります。

Puppet モジュールは、テストマニフェストの テスト ディレクトリーも使用します。これらのマニフェストは、正式なマニフェストに含まれる特定のクラスをテストするために使用されます。

静的ファイル

モジュールには、システム上の特定の場所に、Puppet がコピーできる静的ファイルを含めることができます。これらの場所や、パーミッションなどのその他の属性は、マニフェストの file リソース宣言で定義されます。

静的ファイルは、モジュールの files ディレクトリーに配置されています。

テンプレート

設定ファイルにはカスタムのコンテンツが必要な場合があります。このような場合、ユーザーは静的ファイルの代わりにテンプレートを作成します。静的ファイルと同様に、テンプレートはマニフェストで定義され、システム上の場所にコピーされます。相違点は、テンプレートでは Ruby 表現でカスタマイズのコンテンツや変数入力を定義することができる点です。たとえば、をカスタマイズ可能なポート httpd で設定する場合、設定ファイルのテンプレートには以下が含まれます。

Listen <%= @httpd_port %>

この場合の httpd_port 変数は、このテンプレートを参照するマニフェストに定義されています。

テンプレートは、モジュールの templates ディレクトリーに配置されています。

プラグイン:

プラグインにより、Puppet のコア機能を拡張することができます。プラグインを使用して、カスタムファクト、カスタムリソース、または新機能を定義できます。たとえば、データベース管理者が PostgreSQL データベースのリソース種別を必要とする場合があります。これは、データベース管理者が PostgreSQL のインストール後に新しいデータベースセットで PostgreSQL を設定するのに役立ちます。その結果、データベース管理者は PostgreSQL のインストールと後でデータベースが作成されるように Puppet Manifest のみを作成する必要があります。

プラグインは、モジュールの lib ディレクトリーに配置されています。これには、プラグインのタイプに応じたサブディレクトリーのセットが含まれます。例を示します。

  • /lib/facter: カスタムファクトの場所
  • /lib/puppet/type: 属性のキーと値のペアを記述するカスタムリソース種別の定義の場所
  • /lib/puppet/provider: リソースを制御するためのリソース種別の定義と併用するカスタムリソースプロバイダーの場所
  • /lib/puppet/parser/functions: カスタム関数の場所