前回までの内容で,Puppetでのシステム管理の肝となるマニフェストについて一通り解説しました。今回から,Puppetを実践で利用するために必要となる,様々なテクニックについて解説していきます。
Puppetの設定
Puppetは特に設定をしなくても,最低限マニフェストさえあれば動作するため,今まで特に設定についての解説はしてきませんでしたが,実践で利用するためには何らかの設定が必要となりますので,Puppetの設定方法について解説します。
コマンドオプションでの設定
設定パラメータをコマンドオプションで指定するには,以下のように実行します。
$ sudo puppetmasterd --confdir=/private/puppet
利用可能なパラメータとそのデフォルト値は,以下のようにコマンドオプションに--genconfigを指定することで確認することができます。
$ puppetd --genconfig | less
--genconfigの出力は以下のようになります(一部のみ抜粋)。
[puppetd]
# Where Puppet stores dynamic and growing data. The default for this parameter is calculated specially, like `confdir`_.
# The default value is '/var/puppet'.
# vardir = /var/puppet
設定ファイルでの設定
設定ファイルは0.23.xでは/etc/puppet/puppet.confというファイルであり,[main],[puppetd],[puppetmasterd]といったセクションに分かれています。
[main]
confdir = /etc/puppet
[puppetd]
usecacheonfailure = true
[puppetmasterd]
manifestdir = $confdir/manifests
manifest = $manifestdir/site.pp
[main]セクションにあるパラメータはすべてのコマンドに共通のパラメータを指定します。その他のセクションは,各コマンド特有のパラメータを指定します。例えば,[puppetd]セクションはpuppetd コマンド特有のパラメータ,[puppetmasterd]セクションはpuppetmasterdコマンド特有のパラメータを指定します。また, [fileserver]など,コマンドではなく機能別のセクションもあります。
上の例の通り,$confdir,$manifestdirといった形で,設定ファイル中で定義されたパラメータを,別な箇所で参照することが可能です。
0.22.x以前では,設定ファイルはコマンド毎に異なり,puppetdの場合は/etc/puppet/puppetd.confを, puppetmasterdの場合は/etc/puppet/puppetmasterd.confをデフォルトで参照します。 puppetmasterd.confは以下のようになり,セクションはありません。
confdir = /etc/puppet
manifestdir = $confdir/manifests
manifest = $manifestdir/site.pp
0.23以降でも,0.22.x以前と同様コマンド毎に異なる設定ファイルを持つこともできますが,推奨されていません。
Puppetへのアクセスコントロール
puppetdやpuppetmasterdへのアクセスをコントロールするためには,namespaceauth.confという設定ファイルを利用します。以下はpuppetdからpuppetmasterdへのアクセスをコントロールするための設定例です。
# puppetdからのマニフェスト取得アクセスのコントロール
[puppetmaster]
allow *.example.org
deny deny.example.org
# puppetdからのレポート通知アクセスのコントロール
[puppetreports]
allow *.example.org
deny deny.example.org
# puppetdからのファイルサーバ機能へのアクセスコントロール
[fileserver]
allow *.example.org
deny deny.example.org
このファイルが存在しない場合,デフォルトですべてアクセス許可となるのですが,このファイルが存在する場合には,たとえファイル内に何も記述されていなくても,デフォルトですべてのアクセスが拒否されます。このように,ファイルが存在しない場合と,ファイルが存在するが空の場合とで, Puppetの挙動が異なるのでご注意ください。
自動署名
第2回でも解説したように,通常,Puppetクライアントの証明書に対する署名は,Puppetサーバ側で手動で行いますが, /etc/puppet/autosign.conf というファイルに,以下のように自動署名の対象となるホスト名を列挙することで,該当するホストからの署名リクエストに対して自動で署名することができます。
client.example.org
*.example.com

