taskをroles(ターゲットホスト)を動的に変更する方法
タスクをメソッド内で定義なんて出来るのを見て思いついた。
意外とハマったのでメモメモ・・・
set :runner, 'root' def run_task(hostname,cmd) # ホスト名でロールを動的に定義 role hostname.to_s do host end # ロールを指定 task :run_t, roles => hostname.to_s do run "#{sudo :as => runner} " + impl end # タスク名は定義直後に実行するので再利用可 run_t end
呼ぶ時はこんな感じ
run_task('localhost','ls /tmp')
Capistranoの複数ホスト&複数タスクの場合の処理の順番
普通にレシピを書くと、、
[HostA:Task1]⇒[HostB:Task1]⇒[HostA:Task2]⇒[HostB:Task2]
こっちの方が何かと良いよ
[HostA:Task1]⇒[HostA:Task2]⇒[HostB:Task1]⇒[HostB:Task2]