VolansというCL(deploy にも使えるよ)toolを作ってみた

最近deployをどうしたらいいかなぁとか悩んでて、(新しく出たcapistranoを使おうかと思ってたんですが、プロジェクトに直接突っ込む形になってたりしてて、サーバーの情報は一元化してもってたいのがあってやめました。) なんかみてて思ったのは、この手のツールって突き詰めると複数のサーバーに命令を実行したいだけなんで、対象のサーバーをLIST形式でもってて繰り替えし使うであろう処理を事前処理に使えるような大本の構造と、データ取得周りをAPI経由でもなんでも好きにやりやすいようにperlで書けるようにしておけばたいていの問題が解決するんじゃないかとか思って作ってみました。一回各種実装をPerlOpenSSHとか色々使って大仰なものをつくってみたんですが、小規模で要求が細々変わると面倒になってきてここまで簡素になるに至りました。

使い方

$HOME/.volans/config.pl
config.pl
{
    hooks => {
        echo => q{echo "hello"},
    },
    groups => {
        'group_01' => {
            'before_hooks' => [qw/echo/],
            'after_hooks'  => [qw/echo/],
            'hosts'        => [qw/127.0.0.1/],
            'cmd'          => sub {
                return sprintf(qq{ssh %s 'echo "hello"'},$_[0]); 
            },
        },
    },
};