読者です 読者をやめる 読者になる 読者になる

中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

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]