前回に引き続き、Puppetを実践で利用するためのテクニックについて解説します。
LDAPによるノード管理
最近のソフトウェアは、LDAP対応は当たり前、といった感がありますが、PuppetもLDAPに対応しており、OpenLDAP用のスキーマファイルも用意されています。
LDAPを利用しない場合には、ホスト情報もマニフェストで管理する必要がありますが、LDAPを利用することにより、マニフェストの管理とホスト情報の管理を分離することができ、管理がしやすくなります。
また、LDAPサーバにホスト情報を持たせることにより、他のLDAP対応ソフトウェアからホスト情報利用することもできますし、逆に既にLDAPサーバ上でホスト情報の管理をしている場合には、スキーマを拡張してPuppet用のオブジェクトクラスや属性を追加するだけで、Puppetに流用することができます。
LDAPを利用するもうひとつの重要なポイントとしては、第7回で解説したように、puppetrunの一部オプション(--all、--class)が、LDAPでノード管理していないと使えない、という点があります。したがって、puppetrunの機能をフルに利用するためには、LDAPでのノード管理が必須となります。
以下では、LDAPでのノード管理方法について解説します。LDAPサーバはOpenLDAPを前提とします。
Ruby/LDAPライブラリのインストール
LDAPでのノード管理には、Ruby/LDAPライブラリをPuppetサーバ側に予めインストールしておく必要があります。
LDAPスキーマの設定
Puppetの配布tarballには、OpenLDAP用のスキーマファイルが同梱されています。このスキーマファイルはPuppetのSVNリポジトリからも取得可能です。スキーマの内容は以下のようになっています。
OpenLDAPでノード管理を行うためには、このスキーマファイルを適切なディレクトリに置き、以下の例の最後の行のように、slapd.confでスキーマファイルをインクルードします。
ノード情報をLDAPサーバに登録
ノード情報をLDAPサーバに登録するためには、以下のようなLDIFファイルを作成し、ldapaddやldapmodifyコマンドを実行します。
puppetClientオブジェクトクラスは必ず指定してください。parentnode属性は、他のノードを継承する場合に、継承元となるノードを指定します。puppetclass属性では、このノードでincludeするクラスを指定します。
上記のLDIFで記述されたノード情報と等価なものをマニフェストで表すと、以下のようになります。
Puppetサーバ側の設定
puppetmasterdがLDAPサーバを参照するために必要な設定を、以下のようにpuppet.confに記述します。
ldapnodesをtrueに設定することで、puppetmasterdのLDAP参照が有効になります。ldapserverで参照するLDAPサーバを指定します。ldapbaseでは検索のベースとなるDNを指定します。ldapstringは、検索フィルタをカスタマイズしたい場合に指定します。デフォルトの検索フィルタは(&(objectclass=puppetClient)(cn=%s))です。
puppetd/puppetmasterdの実行
あとは通常通り、puppetd、puppetmasterdを実行するだけです。
第2回 Puppet セミナーのご案内
第2回 Puppet セミナーが12/17(月)~12/19(水)に開催されます。詳細はリンク先をご参照ください。