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

第14回 Facterの拡張

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

カスタムfactサンプル

eth1のIPアドレスを取得するためのカスタムfact

eth0にグローバルなIPアドレスを,eth1にプライベートなIPアドレスを割り当て,特定のデーモンをプライベートなIPアドレスにのみバインドしたい,という場合,Puppetでこれを実現しようとすると,eth1のIPアドレスを取得する必要があります。ですがFacterでは,ipaddressはeth0のIPアドレスを返します(インターフェース名はOSによって異なりますので,適宜読み替えてください⁠⁠。

そこで,privateipaddressというカスタムfactを追加し,eth1のIPアドレスを取得できるようにします。そのためのカスタムfactファイルの内容は以下のようになります。

Facter.add(:privateipaddress) do
  confine :kernel => :linux

  setcode do
    ip = nil
    output = %x{/sbin/ifconfig}

    output.split(/\n\n/).each { |str|
      if str !~ /eth1/

        next
      end

      if str =~ /inet addr:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/
        tmp = $1

        unless tmp =~ /127\./
          ip = tmp
          break

        end
      end
    }

    ip
  end
end

これを利用して,例えばmemcachedをプライベートIPアドレスにのみバインドしたい場合は,Red Hat系Linuxであれば以下のような/etc/sysconfig/memcached用のPuppetテンプレートファイルを作成すれば実現できます。

PORT="11211"
USER="nobody"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l <%= privateipaddress %> "

XenのDom0かDomUかを区別するためのカスタムfact

もうひとつのサンプルは,Xenを利用している場合に,Puppetクライアントが動作しているXenカーネルが,Dom0なのかDomUなのかを区別するためのカスタムfactです。内容は以下のようになり,Dom0の場合にはvirtualの値がxen0に,DomUの場合にはxenuになります。

Facter.add("virtual") do
  confine :kernel => :linux

  ENV["PATH"]="/bin:/sbin:/usr/bin:/usr/sbin"

  result = "physical"

  setcode do
    if FileTest.exists?("/proc/xen/capabilities")
      txt = File.read("/proc/xen/capabilities")

      if txt =~ /control_d/i
        result = "xen0"
      else

        result = "xenu"
      end
    end

    result

  end
end

これを利用して,DomUの場合には,Dom0上の/homeをautofsでマウントするために,autofsパッケージをインストールしたい,という場合には,以下の様なPuppetマニフェストを記述することで実現できます。

case $virtual {
  'xenu': {
    package { 'autofs':
        ensure => installed;
    }
  }
}

PuppetのオフィシャルWikiにも,カスタムfactのサンプルがありますのでご参照ください。

次回は独自のリソースタイプを作成して,Puppetを拡張する方法について解説する予定です。

著者プロフィール

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

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

URLhttp://mizzy.org/