オープンソースなシステム自動管理ツール Puppet

第9回 Puppet実践テクニック(その4)

この記事を読むのに必要な時間:およそ 2 分

前回に引き続き,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リポジトリからも取得可能です。スキーマの内容は以下のようになっています。

# These OIDs are all fake.  No guarantees there won't be conflicts.
#
# $Id$

attributetype ( 1.1.3.10 NAME 'puppetclass'
    DESC 'Puppet Node Class'
    EQUALITY caseIgnoreIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

attributetype ( 1.1.3.9 NAME 'parentnode'
    DESC 'Puppet Parent Node'
    EQUALITY caseIgnoreIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

objectclass ( 1.1.1.2 NAME 'puppetClient' SUP top AUXILIARY
    DESC 'Puppet Client objectclass'
    MAY ( puppetclass $ parentnode ))

OpenLDAPでノード管理を行うためには,このスキーマファイルを適切なディレクトリに置き,以下の例の最後の行のように,slapd.confでスキーマファイルをインクルードします。

include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/puppet.schema

ノード情報をLDAPサーバに登録

ノード情報をLDAPサーバに登録するためには、以下のようなLDIFファイルを作成し,ldapaddやldapmodifyコマンドを実行します。

dn: cn=basenode, ou=hosts, o=southpark
objectclass: top
objectclass: device
objectclass: puppetClient
cn: basenode
puppetclass: base

dn: cn=client.example.org, ou=hosts, o=southpark
objectClass: top
objectClass: device
objectClass: ipHost
objectClass: puppetClient
cn: client.example.org
ipHostNumber: 192.168.10.3
parentnode: basenode
puppetclass: web

puppetClientオブジェクトクラスは必ず指定してください。parentnode属性は,他のノードを継承する場合に,継承元となるノードを指定します。puppetclass属性では,このノードでincludeするクラスを指定します。

上記のLDIFで記述されたノード情報と等価なものをマニフェストで表すと,以下のようになります。

node basenode {
    include base
}

node 'client.example.org' inherits basenode {
    include web
}

Puppetサーバ側の設定

puppetmasterdがLDAPサーバを参照するために必要な設定を、以下のようにpuppet.confに記述します。

[puppetmasterd]
    ldapnodes  = true
    ldapserver = ldap.example.org
    ldapbase   = ou=hosts, o=southpark 
    ldapstring = (&(objectclass=puppetClient)(cn=%s))

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(水)に開催されます。詳細はリンク先をご参照ください。

著者プロフィール

宮下剛輔(みやしたごうすけ)

(株)paperboy&co.技術責任者。 社内ではサーバ周りからアプリケーション開発まで幅広く関わる一方,個人的にはPerlプログラミングを趣味として,サーバ管理用ユニットテストスイート Assurer(アシュラ)をオープンソースで公開したり,CPAN AuthorPlaggerコミッタとして活動している。また,YAPC::Asia 2007 Tokyo等の技術系カンファレンスでスピーカを務めるのも最近の楽しみのひとつ。共著書に『MASHUP++』がある。

URLhttp://mizzy.org/

コメント

コメントの記入