今回から,Puppetでのシステム管理の肝となる,マニフェストについて解説していきます。
マニフェストとは,Puppet独自の宣言型言語によって,システムのあるべき状態を記述したファイルです。マニフェストをいかに維持管理するかが,Puppetでのシステム管理の要となります。
シンプルなマニフェストをシステムに適用してみる
まずはシンプルなマニフェストを作成してそれを適用することによって,Puppetが動作する様子を実際に見てみましょう。
Puppetサーバ上で,以下の内容の/etc/puppet/manifests/site.ppを作成します。
file { '/etc/hosts':
owner => 'root',
group => 'root',
mode => 644,
}
内容は推測できると思いますが,詳細は後ほど解説します。
マニフェストを作成したらpuppetmasterdを起動します。
$ sudo puppetmasterd --nonodes --verbose info: Starting server for Puppet version 0.22.4 info: Parsed manifest in 0.01 seconds info: Listening on port 8140 notice: Starting Puppet server version 0.22.4
次はPuppetクライアント側での操作です。/etc/hostsのパーミッションを644以外に変更します。
$ sudo chmod 600 /etc/hosts
そしてpuppetdを起動します。--verboseオプションをつけることにより,実際に何が行われているのかを確認することができます。
$ sudo puppetd --server puppet.example.com --verbose notice: Starting Puppet client version 0.22.4 info: Facts have changed; recompiling info: Caching configuration at /var/puppet/state/localconfig.yaml info: No classes to store notice: Starting configuration run notice: //File[/etc/hosts]/mode: mode changed '600' to '644'
この様に,/etc/hostsのパーミッションが600から644に変更されていることが確認できます。
リソースの宣言
ユーザ,ファイル,ソフトウェ等の,Puppetの管理対象となるものを「リソース」と呼びます。マニフェスト作成のはじめの一歩は,リソースを宣言するところからはじまります。
先ほど適用したマニフェストをもう一度見てみます。
file { '/etc/hosts':
owner => 'root',
group => 'root',
mode => 644,
}
最初の「file」はリソースタイプと呼ばれ,このリソースの種類を示しています。リソースタイプの次に記述されている「'/etc/hosts'」はリソースを識別するための名前です。残りのowner,group,modeはこのリソース固有のパラメータです。
これにより,『/etc/hostsファイルのオーナ/グループはroot/root,パーミッションは644であるべき』というシステムの状態が宣言されます。
あらかじめPuppetに組み込まれているリソースタイプには,file以外にも以下のようなものがあります。
- user(ユーザ)
- group(グループ)
- host(ホスト)
- package(ソフトウェアパッケージ)
- service(稼動しているサービス)
これら以外にも様々なリソースタイプがあります。
リソースの名前は管理対象となるファイルのパスを示しています。管理対象となるファイルのパスは,pathパラメータによって指定することもできるため,以下の様にマニフェストを記述することもできます。
file { 'hosts':
path => '/etc/hosts',
owner => 'root',
group => 'root',
mode => 644,
}
pathパラメータの様に,リソース名と結び付けられるパラメータをnamevarと呼びます。namevarはfileタイプの場合はpath,userタイプの場合はnameといった具合に,リソースタイプによって異なります。
fileタイプで指定できるパラメータには,他にも以下のようなものがあります。
- backup
- checksum
- content
- ensure
fileタイプ以外のリソースタイプにどんなものがあるか,各リソースタイプのnamevarは何か,各リソースタイプ毎に設定できるパラメータやその意味は何かなど,もっと詳しくお知りになりたい方は,パペウィキ - Typeリファレンスをご参照下さい。
この連載でも順次解説していきたいと思います。

