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

第13回 仮想リソース

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

では,以下のようにdaemontoolsはどちらか一方のクラスに記述しておけばいい,と考えるかもしれません。

class proxy {
  package {
    'daemontools':
      ensure => present; 
    'perl-Perlbal':
      ensure => present;
  }
}

class www {
  package { 'rubygem-rails': ensure => present; }
}

node proxy_and_www {
  include proxy
  include www
}

このマニフェスト自体は問題ありませんが,負荷が高くなってきたため,ウェブアプリケーションサーバのみ新規に増やしたいということになり,以下のようなマニフェストを追加した場合にはどうなるでしょうか?

node www {
  include www
}

wwwクラスにはdaemontoolsパッケージリソースの宣言がないため,daemontoolsはインストールされず,BackgrounDrbのプロセスが起動しない,という事態が発生し,マニフェストの修正が必要となります。

これを解決するために,以下のようなマニフェストを記述し,daemontoolsパッケージリソースを仮想リソースとして宣言,proxyクラスとwwwクラスで実体化します。

@package { 'daemontools': ensure => present }

class proxy {
  realize(Package['daemontools'])
  package { 'perl-Perlbal': ensure => present; }
}

class www {
  realize(Package['daemontools'])
  package { 'rubygem-rails': ensure => present; }

}

node proxy_and_www {
  include proxy
  include www
}

node proxy {
  inclue proxy
}

node www {
  include www
}

こうすることで,リバースプロキシやウェブアプリケーションサーバを個別に増設する場合でも,単純にノードを追加するだけで済みます。

このように仮想リソースを利用することで,マニフェストが柔軟で拡張しやすいものとなります。

仮想リソースの実体化

relize関数での実体化

最初の方でも述べましたが,仮想リソースを実体化する方法のひとつは,realize関数を実行することです。実体化する仮想リソースがひとつの場合には,括弧はなくても構いません。

realize User[luke]

複数の仮想リソースを実体化する場合には,以下のように記述します。

realize(User[johnny], User[billy])

コレクションでの実体化

もうひとつの方法は,コレクションと呼ばれるシンタックスを利用することです。コレクションは実体化したい仮想リソースのタイプと条件を Type<| condition |> といった形で記述します。

たとえば,lukeユーザの仮想リソースを実体化するには,以下のように記述します。

User <| title == luke |>

条件には == 以外にも,!=, and, or が使えます。

Grpup <| title != sysadmin |>
File  <| owner == root and mode == 400 |>
User  <| title == luke or (group == dba or group == sysadmin) |>

コレクションを利用すると,複数の仮想リソースを短い記述で実体化することができます。

仮想リソースの解説は以上です。次回はFacterの拡張方法について解説予定です。

著者プロフィール

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

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

URLhttp://mizzy.org/