この記事向けのちょっとしたサンプルとして、設定ファイルの所有者、グループ、パーミッションを管理する、というタスクを取り上げる。まずは次のようにして、所有者、グループ、パーミッションが適切に設定されていないサンプルファイルを用意する。これがPuppetによってどのように修正されるかを確認するわけだ。
# touch /etc/puptest
# chown ben.ben /etc/puptest
# l /etc/puptest
-rw-r--r-- 1 ben ben 0 2008-07-17 20:01 /etc/puptest
続いて「/etc/puppet/manifests」にマニフェスト(manifest)ファイルを作成し、Puppetに何を行わせるのかを記述する。通常は、クライアントのホスト名に応じてほかのマニフェストファイルをインポートする「site.pp」というマニフェストを用意する。クライアントごとに特定の設定を行うことも、多数のホストで使われる汎用のマニフェストをインポートすることもできる。「site.pp」によってインポートされるマニフェストファイルは普通「classes」サブディレクトリに置かれる。Puppetでは、システムをどのように設定したいのかを記述するのにクラスを用いる。また、クラスによって設定の論理的なグループ化が可能になる。
以下に示す2つのサンプルマニフェストファイルは、Puppetのスタートガイドにあるものをベースにしている。「site.pp」マニフェストファイルは、「classes」サブディレクトリ内にあるその他すべてのマニフェストファイルをインポートするが、そのうちノード(node)エントリで明示的に使われているものだけが効力を持つ。この例では、接続しているすべてのPuppetクライアントに「puptest.pp」ファイルで指定されたパーミッションが適用される。puppetmasterdマシン上にある「site.pp」ファイルのノードエントリには、接続している各マシンに設定したい内容を定義する。例えば「node "www.example.com"」というエントリは、このドメイン名から接続しているPuppetクライアントだけに適用される。通常、Puppetクライアントの名前はホスト名と同じである。ノード名の詳細については、ドキュメントの「node_name」の項を参照してほしい。
# mkdir -p /etc/puppet/manifests/classes
# cd /etc/puppet/manifests/classes
# vi puptest.pp
class puptest {
file { "/etc/puptest":
owner => "root",
group => "root",
mode => 440,
}
}
# cd /etc/puppet/manifests
# vi site.pp
import "classes/*"
node default {
include puptest
}
こうした設定の下で「puppet」サービスを起動すると、「/etc/puptest」ファイルのパーミッションが変更される。
Puppetクライアントはサービスとして動作するため、Puppetサーバは設定の変更内容をクライアントマシンにいつでもプッシュできる。また、クライアント側は通常、システムの設定が該当するマニフェストに記述された内容と一致しているかどうかを定期的にチェックしている。例えば、前記のようにPuppetの起動によって「/etc/puptest」ファイルのパーミッションが変更された後で、このファイルの所有者をわたしの手で「ben」に変えても、この変更はPuppetによる次回のチェック時に、マニフェストに記述された設定に戻される。デフォルトでは、こうした設定のチェックが30分ごとに行われる。この間隔は「/etc/puppet/puppet.conf」ファイルの「[main]」セクションにある「runinterval」の値を秒数で指定することで変更できる。
Puppetは、必ずしもクライアント/サーバモードで実行する必要はない。ホストがPuppetをサービスとして実行していなくても「puppet /etc/puppet/manifests/site.pp」のようなコマンドでPuppetクライアントを実行すれば、設定ファイルの内容を直接そのクライアントに適用できる。また、中央のサーバから各ホストに対してすべての設定ファイルを適用することもできる。あるいは、変数への代入操作やテンプレートファイルを利用して、パスやホスト名といった要素を設定ファイルに盛り込み、クライアントに適用することも可能だ。
Puppetは、ディストリビューションによる設定の違いをサポートしている。言語に関するチュートリアルには、sshサービスの設定ファイルをオペレーティングシステム別に指定する例が載っている。これは、宣言型の言語を使ってマシン別の設定を行うための重要なポイントだ。
マシンが2、3台あっても、Puppetサーバによってシステム設定の変更内容を各マシンにプッシュすれば、ソフトウェアのインストールや設定はそれほど大変ではなくなる。さらに、「/etc/puppet/manifests」ツリーをリビジョン管理システムで扱うようにすれば、ネットワーク上の全マシンの設定を正常に機能していた以前の状態に素早く戻すことも可能だろう。
最終的にPuppetが成功を収めるかどうかは、どれだけ多くのシステム管理者がPuppetの言語を覚え、優れたコーディングによる質の高いレシピ(recipe)の作成に貢献し、ほかのユーザーが管理の省力化のためにPuppetを利用する際の障壁をどれだけ低くしてくれるかにかかっている。
Ben Martinは10年以上もファイルシステムに携わっている。博士号を持ち、現在はlibferris、各種ファイルシステム、検索ソリューションを中心としたコンサルティングサービスを提供している。
Copyright © 2010 OSDN Corporation, All Rights Reserved.