Perlbal::Plugin::ConfLoaderをつくってみた

追記:Perlbal::Plugin::Includeでなんの問題もなく可能なのでした




Perlbalでは/etc/perlbal/perlbal.confに
Perlbalの設定をもりもり書くわけですが、
相当数のサービスを1台のPerlbalで管理していると、
1つの設定ファイルがかなり大きくなってしまって
管理しずらいとです。


そこで、PerlbalをながめていたらPerlbal::Plugin::Includeというのがあって、
そらあるわなぁと思い使ってみたところ、問題なく動きました。


ただ、Includeさせるファイルをサイト毎に管理しようとすると
例えば


nekokak.intra/perlbal.conf

# ...nop
CREATE SERVICE http_server
    SET listen          = 0.0.0.0:80
    SET role            = selector
    SET plugins         = vhosts

    VHOST nekokak.intra      = nekokak
ENABLE http_server

hoge.intra/perlbal.conf

# ...nop
CREATE SERVICE http_server
    SET listen          = 0.0.0.0:80
    SET role            = selector
    SET plugins         = vhosts

    VHOST hoge.intra      = hoge
ENABLE http_server


このようにファイルを分けるわけですが、
これをP::P::Includeを使って読み込むと...


perlbal.conf

LOAD include
INCLUDE = hoge.intra/perlbal.conf
INCLUDE = nekokak.intra/perlbal.conf


と書くわけです。
すると
CREATE SERVICE http_serverという名前がバッティングしてしまって
Perlbalが起動してくれませぬ。
CREATE SERVICE http_server_hogeみたいに
名前を分けて管理できればそれはそれでいいのですが
listenがかぶってしまうと、それはそれで起動しないのです。


そこでPerlbal::Plugin::ConfLoaderというのを書いてみましたとさ。

http://github.com/nekokak/perlbal-plugin-confloader/tree/master


使い方は


perlbal.conf

LOAD ConfLoader
LOAD_CONF = hoge.intra/perlbal.conf
LOAD_CONF = nekokak.intra/perlbal.conf

と書くだけです。


それぞれのconfを読みつつCREATE SERVICE XXXがコンフリクトした場合は
無理やり設定を差し込む感じ。


かなりアドホックにつくった&想定していないケースがあるかもですが
とりあえず動いておりますとさ。