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
# ...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がコンフリクトした場合は
無理やり設定を差し込む感じ。
かなりアドホックにつくった&想定していないケースがあるかもですが
とりあえず動いておりますとさ。